mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
499 lines
16 KiB
499 lines
16 KiB
//+----------------------------------------------------------------------------
|
|
//
|
|
// Task Scheduler
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1996.
|
|
//
|
|
// File: mstask.idl
|
|
//
|
|
// Contents: ITaskTrigger, ITask, ITaskScheduler, IEnumWorkItems
|
|
// interfaces and related definitions
|
|
//
|
|
// History: 06-Sep-95 EricB created
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
import "oaidl.idl";
|
|
import "oleidl.idl";
|
|
|
|
// 148BD520-A2AB-11CE-B11F-00AA00530503 - Task object class ID
|
|
// 148BD52A-A2AB-11CE-B11F-00AA00530503 - Task Scheduler class ID
|
|
// A6B952F0-A4B1-11D0-997D-00AA006887EC - IScheduledWorkItem interface ID
|
|
// 148BD524-A2AB-11CE-B11F-00AA00530503 - ITask interface ID
|
|
// 148BD527-A2AB-11CE-B11F-00AA00530503 - ITaskScheduler interface ID
|
|
// 148BD528-A2AB-11CE-B11F-00AA00530503 - IEnumWorkItems interface ID
|
|
// 148BD52B-A2AB-11CE-B11F-00AA00530503 - ITaskTrigger interface ID
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Datatypes
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
cpp_quote("#define TASK_SUNDAY (0x1)")
|
|
cpp_quote("#define TASK_MONDAY (0x2)")
|
|
cpp_quote("#define TASK_TUESDAY (0x4)")
|
|
cpp_quote("#define TASK_WEDNESDAY (0x8)")
|
|
cpp_quote("#define TASK_THURSDAY (0x10)")
|
|
cpp_quote("#define TASK_FRIDAY (0x20)")
|
|
cpp_quote("#define TASK_SATURDAY (0x40)")
|
|
cpp_quote("#define TASK_FIRST_WEEK (1)")
|
|
cpp_quote("#define TASK_SECOND_WEEK (2)")
|
|
cpp_quote("#define TASK_THIRD_WEEK (3)")
|
|
cpp_quote("#define TASK_FOURTH_WEEK (4)")
|
|
cpp_quote("#define TASK_LAST_WEEK (5)")
|
|
cpp_quote("#define TASK_JANUARY (0x1)")
|
|
cpp_quote("#define TASK_FEBRUARY (0x2)")
|
|
cpp_quote("#define TASK_MARCH (0x4)")
|
|
cpp_quote("#define TASK_APRIL (0x8)")
|
|
cpp_quote("#define TASK_MAY (0x10)")
|
|
cpp_quote("#define TASK_JUNE (0x20)")
|
|
cpp_quote("#define TASK_JULY (0x40)")
|
|
cpp_quote("#define TASK_AUGUST (0x80)")
|
|
cpp_quote("#define TASK_SEPTEMBER (0x100)")
|
|
cpp_quote("#define TASK_OCTOBER (0x200)")
|
|
cpp_quote("#define TASK_NOVEMBER (0x400)")
|
|
cpp_quote("#define TASK_DECEMBER (0x800)")
|
|
|
|
cpp_quote("#define TASK_FLAG_INTERACTIVE (0x1)")
|
|
cpp_quote("#define TASK_FLAG_DELETE_WHEN_DONE (0x2)")
|
|
cpp_quote("#define TASK_FLAG_DISABLED (0x4)")
|
|
cpp_quote("#define TASK_FLAG_START_ONLY_IF_IDLE (0x10)")
|
|
cpp_quote("#define TASK_FLAG_KILL_ON_IDLE_END (0x20)")
|
|
cpp_quote("#define TASK_FLAG_DONT_START_IF_ON_BATTERIES (0x40)")
|
|
cpp_quote("#define TASK_FLAG_KILL_IF_GOING_ON_BATTERIES (0x80)")
|
|
cpp_quote("#define TASK_FLAG_RUN_ONLY_IF_DOCKED (0x100)")
|
|
cpp_quote("#define TASK_FLAG_HIDDEN (0x200)")
|
|
cpp_quote("#define TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET (0x400)")
|
|
cpp_quote("#define TASK_FLAG_RESTART_ON_IDLE_RESUME (0x800)")
|
|
cpp_quote("#define TASK_FLAG_SYSTEM_REQUIRED (0x1000)")
|
|
cpp_quote("#define TASK_FLAG_RUN_ONLY_IF_LOGGED_ON (0x2000)")
|
|
|
|
cpp_quote("#define TASK_TRIGGER_FLAG_HAS_END_DATE (0x1)")
|
|
cpp_quote("#define TASK_TRIGGER_FLAG_KILL_AT_DURATION_END (0x2)")
|
|
cpp_quote("#define TASK_TRIGGER_FLAG_DISABLED (0x4)")
|
|
|
|
//
|
|
// 1440 = 60 mins/hour * 24 hrs/day since a trigger/TASK could run all day at
|
|
// one minute intervals.
|
|
//
|
|
|
|
const int TASK_MAX_RUN_TIMES = 1440;
|
|
|
|
//
|
|
// The TASK_TRIGGER_TYPE field of the TASK_TRIGGER structure determines
|
|
// which member of the TRIGGER_TYPE_UNION field to use.
|
|
//
|
|
typedef enum _TASK_TRIGGER_TYPE {
|
|
TASK_TIME_TRIGGER_ONCE = 0, // Ignore the Type field.
|
|
TASK_TIME_TRIGGER_DAILY = 1, // Use DAILY
|
|
TASK_TIME_TRIGGER_WEEKLY = 2, // Use WEEKLY
|
|
TASK_TIME_TRIGGER_MONTHLYDATE = 3, // Use MONTHLYDATE
|
|
TASK_TIME_TRIGGER_MONTHLYDOW = 4, // Use MONTHLYDOW
|
|
TASK_EVENT_TRIGGER_ON_IDLE = 5, // Ignore the Type field.
|
|
TASK_EVENT_TRIGGER_AT_SYSTEMSTART = 6, // Ignore the Type field.
|
|
TASK_EVENT_TRIGGER_AT_LOGON = 7 // Ignore the Type field.
|
|
} TASK_TRIGGER_TYPE, *PTASK_TRIGGER_TYPE;
|
|
|
|
typedef struct _DAILY {
|
|
WORD DaysInterval;
|
|
} DAILY;
|
|
|
|
typedef struct _WEEKLY {
|
|
WORD WeeksInterval;
|
|
WORD rgfDaysOfTheWeek;
|
|
} WEEKLY;
|
|
|
|
typedef struct _MONTHLYDATE {
|
|
DWORD rgfDays;
|
|
WORD rgfMonths;
|
|
} MONTHLYDATE;
|
|
|
|
typedef struct _MONTHLYDOW {
|
|
WORD wWhichWeek;
|
|
WORD rgfDaysOfTheWeek;
|
|
WORD rgfMonths;
|
|
} MONTHLYDOW;
|
|
|
|
typedef union _TRIGGER_TYPE_UNION {
|
|
DAILY Daily;
|
|
WEEKLY Weekly;
|
|
MONTHLYDATE MonthlyDate;
|
|
MONTHLYDOW MonthlyDOW;
|
|
} TRIGGER_TYPE_UNION;
|
|
|
|
typedef struct _TASK_TRIGGER {
|
|
WORD cbTriggerSize; // Structure size.
|
|
WORD Reserved1; // Reserved. Must be zero.
|
|
WORD wBeginYear; // Trigger beginning date year.
|
|
WORD wBeginMonth; // Trigger beginning date month.
|
|
WORD wBeginDay; // Trigger beginning date day.
|
|
WORD wEndYear; // Optional trigger ending date year.
|
|
WORD wEndMonth; // Optional trigger ending date month.
|
|
WORD wEndDay; // Optional trigger ending date day.
|
|
WORD wStartHour; // Run bracket start time hour.
|
|
WORD wStartMinute; // Run bracket start time minute.
|
|
DWORD MinutesDuration; // Duration of run bracket.
|
|
DWORD MinutesInterval; // Run bracket repetition interval.
|
|
DWORD rgFlags; // Trigger flags.
|
|
TASK_TRIGGER_TYPE TriggerType; // Trigger type.
|
|
TRIGGER_TYPE_UNION Type; // Trigger data.
|
|
WORD Reserved2; // Reserved. Must be zero.
|
|
WORD wRandomMinutesInterval; // Maximum number of random minutes
|
|
// after start time.
|
|
} TASK_TRIGGER, * PTASK_TRIGGER;
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Interfaces
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Interface: ITaskTrigger
|
|
//
|
|
// Synopsis: Trigger object interface. A Task object may contain several
|
|
// of these.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
cpp_quote("// {148BD52B-A2AB-11CE-B11F-00AA00530503}")
|
|
cpp_quote("DEFINE_GUID(IID_ITaskTrigger, 0x148BD52BL, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);")
|
|
|
|
interface ITaskTrigger;
|
|
[
|
|
local,
|
|
object,
|
|
uuid(148BD52B-A2AB-11CE-B11F-00AA00530503),
|
|
pointer_default(unique)
|
|
]
|
|
interface ITaskTrigger : IUnknown
|
|
{
|
|
// Methods:
|
|
HRESULT SetTrigger(
|
|
[in] const PTASK_TRIGGER pTrigger);
|
|
|
|
HRESULT GetTrigger(
|
|
[out] PTASK_TRIGGER pTrigger);
|
|
|
|
HRESULT GetTriggerString(
|
|
[out] LPWSTR * ppwszTrigger);
|
|
};
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Interface: IScheduledWorkItem
|
|
//
|
|
// Synopsis: Abstract base class for any runnable work item that can be
|
|
// scheduled by the task scheduler.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
cpp_quote("// {a6b952f0-a4b1-11d0-997d-00aa006887ec}")
|
|
cpp_quote("DEFINE_GUID(IID_IScheduledWorkItem, 0xa6b952f0L, 0xa4b1, 0x11d0, 0x99, 0x7d, 0x00, 0xaa, 0x00, 0x68, 0x87, 0xec);")
|
|
|
|
interface IScheduledWorkItem;
|
|
[
|
|
local,
|
|
object,
|
|
uuid(a6b952f0-a4b1-11d0-997d-00aa006887ec),
|
|
pointer_default(unique)
|
|
]
|
|
interface IScheduledWorkItem : IUnknown
|
|
{
|
|
// Methods concerning scheduling:
|
|
HRESULT CreateTrigger(
|
|
[out] WORD * piNewTrigger,
|
|
[out] ITaskTrigger ** ppTrigger);
|
|
|
|
HRESULT DeleteTrigger(
|
|
[in] WORD iTrigger);
|
|
|
|
HRESULT GetTriggerCount(
|
|
[out] WORD * pwCount);
|
|
|
|
HRESULT GetTrigger(
|
|
[in] WORD iTrigger,
|
|
[out] ITaskTrigger ** ppTrigger);
|
|
|
|
HRESULT GetTriggerString(
|
|
[in] WORD iTrigger,
|
|
[out] LPWSTR * ppwszTrigger);
|
|
|
|
HRESULT GetRunTimes(
|
|
[in] const LPSYSTEMTIME pstBegin,
|
|
[in] const LPSYSTEMTIME pstEnd,
|
|
[in, out] WORD * pCount,
|
|
[out] LPSYSTEMTIME * rgstTaskTimes);
|
|
|
|
HRESULT GetNextRunTime(
|
|
[in, out] SYSTEMTIME * pstNextRun);
|
|
|
|
HRESULT SetIdleWait(
|
|
[in] WORD wIdleMinutes,
|
|
[in] WORD wDeadlineMinutes);
|
|
HRESULT GetIdleWait(
|
|
[out] WORD * pwIdleMinutes,
|
|
[out] WORD * pwDeadlineMinutes);
|
|
|
|
// Other methods:
|
|
HRESULT Run(
|
|
void);
|
|
|
|
HRESULT Terminate(
|
|
void);
|
|
|
|
HRESULT EditWorkItem(
|
|
[in] HWND hParent,
|
|
[in] DWORD dwReserved);
|
|
|
|
HRESULT GetMostRecentRunTime(
|
|
[out] SYSTEMTIME * pstLastRun);
|
|
|
|
HRESULT GetStatus(
|
|
[out] HRESULT * phrStatus);
|
|
|
|
HRESULT GetExitCode(
|
|
[out] DWORD * pdwExitCode);
|
|
|
|
// Properties:
|
|
HRESULT SetComment(
|
|
[in] LPCWSTR pwszComment);
|
|
HRESULT GetComment(
|
|
[out] LPWSTR * ppwszComment);
|
|
|
|
HRESULT SetCreator(
|
|
[in] LPCWSTR pwszCreator);
|
|
HRESULT GetCreator(
|
|
[out] LPWSTR * ppwszCreator);
|
|
|
|
HRESULT SetWorkItemData(
|
|
[in] WORD cbData,
|
|
[in] BYTE rgbData[]);
|
|
HRESULT GetWorkItemData(
|
|
[out] WORD * pcbData,
|
|
[out] BYTE ** prgbData);
|
|
|
|
HRESULT SetErrorRetryCount(
|
|
[in] WORD wRetryCount);
|
|
HRESULT GetErrorRetryCount(
|
|
[out] WORD * pwRetryCount);
|
|
|
|
HRESULT SetErrorRetryInterval(
|
|
[in] WORD wRetryInterval);
|
|
HRESULT GetErrorRetryInterval(
|
|
[out] WORD * pwRetryInterval);
|
|
|
|
HRESULT SetFlags(
|
|
[in] DWORD dwFlags);
|
|
HRESULT GetFlags(
|
|
[out] DWORD * pdwFlags);
|
|
|
|
HRESULT SetAccountInformation(
|
|
[in] LPCWSTR pwszAccountName,
|
|
[in] LPCWSTR pwszPassword);
|
|
HRESULT GetAccountInformation(
|
|
[out] LPWSTR * ppwszAccountName);
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Interface: ITask
|
|
//
|
|
// Synopsis: Task object interface. The primary means of task object
|
|
// manipulation.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
cpp_quote("// {148BD524-A2AB-11CE-B11F-00AA00530503}")
|
|
cpp_quote("DEFINE_GUID(IID_ITask, 0x148BD524L, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);")
|
|
|
|
interface ITask;
|
|
[
|
|
local,
|
|
object,
|
|
uuid(148BD524-A2AB-11CE-B11F-00AA00530503),
|
|
pointer_default(unique)
|
|
]
|
|
interface ITask : IScheduledWorkItem
|
|
{
|
|
// Properties that correspond to parameters of CreateProcess:
|
|
HRESULT SetApplicationName(
|
|
[in] LPCWSTR pwszApplicationName);
|
|
HRESULT GetApplicationName(
|
|
[out] LPWSTR * ppwszApplicationName);
|
|
|
|
HRESULT SetParameters(
|
|
[in] LPCWSTR pwszParameters);
|
|
HRESULT GetParameters(
|
|
[out] LPWSTR * ppwszParameters);
|
|
|
|
HRESULT SetWorkingDirectory(
|
|
[in] LPCWSTR pwszWorkingDirectory);
|
|
HRESULT GetWorkingDirectory(
|
|
[out] LPWSTR * ppwszWorkingDirectory);
|
|
|
|
HRESULT SetPriority(
|
|
[in] DWORD dwPriority);
|
|
HRESULT GetPriority(
|
|
[out] DWORD * pdwPriority);
|
|
|
|
// Other properties:
|
|
HRESULT SetTaskFlags(
|
|
[in] DWORD dwFlags);
|
|
HRESULT GetTaskFlags(
|
|
[out] DWORD * pdwFlags);
|
|
|
|
HRESULT SetMaxRunTime(
|
|
[in] DWORD dwMaxRunTimeMS);
|
|
HRESULT GetMaxRunTime(
|
|
[out] DWORD * pdwMaxRunTimeMS);
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Interface: IEnumWorkItems
|
|
//
|
|
// Synopsis: Work item object enumerator. Enumerates the work item objects
|
|
// within the Tasks folder.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
cpp_quote("// {148BD528-A2AB-11CE-B11F-00AA00530503}")
|
|
cpp_quote("DEFINE_GUID(IID_IEnumWorkItems, 0x148BD528L, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);")
|
|
|
|
interface IEnumWorkItems;
|
|
[
|
|
local,
|
|
object,
|
|
uuid(148BD528-A2AB-11CE-B11F-00AA00530503),
|
|
pointer_default(unique)
|
|
]
|
|
interface IEnumWorkItems : IUnknown
|
|
{
|
|
// Methods:
|
|
HRESULT Next(
|
|
[in] ULONG celt,
|
|
[out] LPWSTR ** rgpwszNames,
|
|
[out] ULONG * pceltFetched);
|
|
|
|
HRESULT Skip(
|
|
[in] ULONG celt);
|
|
|
|
HRESULT Reset(
|
|
void);
|
|
|
|
HRESULT Clone(
|
|
[out] IEnumWorkItems ** ppEnumWorkItems);
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Interface: ITaskScheduler
|
|
//
|
|
// Synopsis: Task Scheduler interface. Provides location transparent
|
|
// manipulation of task and/or queue objects within the Tasks
|
|
// folder.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
cpp_quote("// {148BD527-A2AB-11CE-B11F-00AA00530503}")
|
|
cpp_quote("DEFINE_GUID(IID_ITaskScheduler, 0x148BD527L, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);")
|
|
|
|
interface ITaskScheduler;
|
|
[
|
|
local,
|
|
object,
|
|
uuid(148BD527-A2AB-11CE-B11F-00AA00530503),
|
|
pointer_default(unique)
|
|
]
|
|
interface ITaskScheduler : IUnknown
|
|
{
|
|
// Methods:
|
|
HRESULT SetTargetComputer(
|
|
[in] LPCWSTR pwszComputer);
|
|
|
|
HRESULT GetTargetComputer(
|
|
[out] LPWSTR * ppwszComputer);
|
|
|
|
HRESULT Enum(
|
|
[out] IEnumWorkItems ** ppEnumWorkItems);
|
|
|
|
HRESULT Activate(
|
|
[in] LPCWSTR pwszName,
|
|
[in] REFIID riid,
|
|
[out] IUnknown ** ppUnk);
|
|
|
|
HRESULT Delete(
|
|
[in] LPCWSTR pwszName);
|
|
|
|
HRESULT NewWorkItem(
|
|
[in] LPCWSTR pwszTaskName,
|
|
[in] REFCLSID rclsid,
|
|
[in] REFIID riid,
|
|
[out] IUnknown ** ppUnk);
|
|
|
|
HRESULT AddWorkItem(
|
|
[in] LPCWSTR pwszTaskName,
|
|
[in] IScheduledWorkItem * pWorkItem);
|
|
|
|
HRESULT IsOfType(
|
|
[in] LPCWSTR pwszName,
|
|
[in] REFIID riid);
|
|
}
|
|
|
|
cpp_quote("EXTERN_C const CLSID CLSID_CTask;")
|
|
cpp_quote("EXTERN_C const CLSID CLSID_CTaskScheduler;")
|
|
cpp_quote(" ")
|
|
cpp_quote("// {148BD520-A2AB-11CE-B11F-00AA00530503}")
|
|
cpp_quote("DEFINE_GUID(CLSID_CTask, 0x148BD520, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);")
|
|
cpp_quote(" ")
|
|
cpp_quote("// {148BD52A-A2AB-11CE-B11F-00AA00530503}")
|
|
cpp_quote("DEFINE_GUID(CLSID_CTaskScheduler, 0x148BD52A, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);")
|
|
cpp_quote(" ")
|
|
|
|
|
|
//
|
|
// NOTE: Definition of HPROPSHEETPAGE is from sdk\inc\prsht.h
|
|
// Including this header file causes numerous redefinition errors.
|
|
//
|
|
|
|
struct _PSP;
|
|
typedef struct _PSP * HPROPSHEETPAGE;
|
|
|
|
typedef enum _TASKPAGE {
|
|
TASKPAGE_TASK = 0,
|
|
TASKPAGE_SCHEDULE = 1,
|
|
TASKPAGE_SETTINGS = 2
|
|
} TASKPAGE;
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Interface: IProvideTaskPage
|
|
//
|
|
// Synopsis: Task property page retrieval interface. With this interface,
|
|
// it is possible to retrieve one or more property pages
|
|
// associated with a task object. Task objects inherit this
|
|
// interface.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
cpp_quote("// {4086658a-cbbb-11cf-b604-00c04fd8d565}")
|
|
cpp_quote("DEFINE_GUID(IID_IProvideTaskPage, 0x4086658aL, 0xcbbb, 0x11cf, 0xb6, 0x04, 0x00, 0xc0, 0x4f, 0xd8, 0xd5, 0x65);")
|
|
|
|
interface IProvideTaskPage;
|
|
[
|
|
local,
|
|
object,
|
|
uuid(4086658a-cbbb-11cf-b604-00c04fd8d565),
|
|
pointer_default(unique)
|
|
]
|
|
interface IProvideTaskPage : IUnknown
|
|
{
|
|
// Methods:
|
|
HRESULT GetPage(
|
|
[in] TASKPAGE tpType,
|
|
[in] BOOL fPersistChanges,
|
|
[out] HPROPSHEETPAGE * phPage);
|
|
}
|
|
|
|
cpp_quote("#define ISchedulingAgent ITaskScheduler")
|
|
cpp_quote("#define IEnumTasks IEnumWorkItems")
|
|
cpp_quote("#define IID_ISchedulingAgent IID_ITaskScheduler")
|
|
cpp_quote("#define CLSID_CSchedulingAgent CLSID_CTaskScheduler")
|