/* Automated generated idl file <taskscheduler>.
 * Generated by genidl tool (c) 2009, 2010 Mingw-w64 project.
 */

/* Interface forward declarations.  */
interface ITaskHandler;
interface ITaskHandlerStatus;
interface ITaskVariables;

/* Structure forward declarations.  */
struct _SYSTEMTIME;

/* Union record forward declarations.  */
dispinterface ITaskFolderCollection;
dispinterface ITaskFolder;
dispinterface IRegisteredTask;
dispinterface IRunningTask;
dispinterface IRunningTaskCollection;
dispinterface ITaskDefinition;
dispinterface IRegistrationInfo;
dispinterface ITriggerCollection;
dispinterface ITrigger;
dispinterface IRepetitionPattern;
dispinterface ITaskSettings;
dispinterface IIdleSettings;
dispinterface INetworkSettings;
dispinterface IPrincipal;
dispinterface IActionCollection;
dispinterface IAction;
dispinterface IRegisteredTaskCollection;
dispinterface ITaskService;
dispinterface ITaskNamedValuePair;
dispinterface ITaskNamedValueCollection;
dispinterface IIdleTrigger;
dispinterface ILogonTrigger;
dispinterface ISessionStateChangeTrigger;
dispinterface IEventTrigger;
dispinterface ITimeTrigger;
dispinterface IDailyTrigger;
dispinterface IWeeklyTrigger;
dispinterface IMonthlyTrigger;
dispinterface IMonthlyDOWTrigger;
dispinterface IBootTrigger;
dispinterface IRegistrationTrigger;
dispinterface IExecAction;
dispinterface IShowMessageAction;
dispinterface IComHandlerAction;
dispinterface IEmailAction;

/* Union record forward declarations.  */
coclass TaskScheduler;
coclass TaskHandlerPS;
coclass TaskHandlerStatusPS;

/* Enumeration declarations.  */
enum _TASK_STATE
{
  TASK_STATE_UNKNOWN = (int) 201326592,
  TASK_STATE_DISABLED = (int) 201326593,
  TASK_STATE_QUEUED = (int) 201326594,
  TASK_STATE_READY = (int) 201326595,
  TASK_STATE_RUNNING = (int) 201326596
};
enum _TASK_TRIGGER_TYPE2
{
  TASK_TRIGGER_EVENT = (int) 201326592,
  TASK_TRIGGER_TIME = (int) 201326593,
  TASK_TRIGGER_DAILY = (int) 201326594,
  TASK_TRIGGER_WEEKLY = (int) 201326595,
  TASK_TRIGGER_MONTHLY = (int) 201326596,
  TASK_TRIGGER_MONTHLYDOW = (int) 201326597,
  TASK_TRIGGER_IDLE = (int) 201326598,
  TASK_TRIGGER_REGISTRATION = (int) 201326599,
  TASK_TRIGGER_BOOT = (int) 201326600,
  TASK_TRIGGER_LOGON = (int) 201326601,
  TASK_TRIGGER_SESSION_STATE_CHANGE = (int) 201326603
};
enum _TASK_INSTANCES_POLICY
{
  TASK_INSTANCES_PARALLEL = (int) 201326592,
  TASK_INSTANCES_QUEUE = (int) 201326593,
  TASK_INSTANCES_IGNORE_NEW = (int) 201326594,
  TASK_INSTANCES_STOP_EXISTING = (int) 201326595
};
enum _TASK_COMPATIBILITY
{
  TASK_COMPATIBILITY_AT = (int) 201326592,
  TASK_COMPATIBILITY_V1 = (int) 201326593,
  TASK_COMPATIBILITY_V2 = (int) 201326594
};
enum _TASK_LOGON_TYPE
{
  TASK_LOGON_NONE = (int) 201326592,
  TASK_LOGON_PASSWORD = (int) 201326593,
  TASK_LOGON_S4U = (int) 201326594,
  TASK_LOGON_INTERACTIVE_TOKEN = (int) 201326595,
  TASK_LOGON_GROUP = (int) 201326596,
  TASK_LOGON_SERVICE_ACCOUNT = (int) 201326597,
  TASK_LOGON_INTERACTIVE_TOKEN_OR_PASSWORD = (int) 201326598
};
enum _TASK_RUNLEVEL
{
  TASK_RUNLEVEL_LUA = (int) 201326592,
  TASK_RUNLEVEL_HIGHEST = (int) 201326593
};
enum _TASK_ACTION_TYPE
{
  TASK_ACTION_EXEC = (int) 201326592,
  TASK_ACTION_COM_HANDLER = (int) 201326597,
  TASK_ACTION_SEND_EMAIL = (int) 201326598,
  TASK_ACTION_SHOW_MESSAGE = (int) 201326599
};
enum _TASK_SESSION_STATE_CHANGE_TYPE
{
  TASK_CONSOLE_CONNECT = (int) 201326593,
  TASK_CONSOLE_DISCONNECT = (int) 201326594,
  TASK_REMOTE_CONNECT = (int) 201326595,
  TASK_REMOTE_DISCONNECT = (int) 201326596,
  TASK_SESSION_LOCK = (int) 201326599,
  TASK_SESSION_UNLOCK = (int) 201326600
};
enum _TASK_RUN_FLAGS
{
  TASK_RUN_NO_FLAGS = (int) 201326592,
  TASK_RUN_AS_SELF = (int) 201326593,
  TASK_RUN_IGNORE_CONSTRAINTS = (int) 201326594,
  TASK_RUN_USE_SESSION_ID = (int) 201326596,
  TASK_RUN_USER_SID = (int) 201326600
};
enum _TASK_ENUM_FLAGS
{
  TASK_ENUM_HIDDEN = (int) 201326593
};
enum _TASK_CREATION
{
  TASK_VALIDATE_ONLY = (int) 201326593,
  TASK_CREATE = (int) 201326594,
  TASK_UPDATE = (int) 201326596,
  TASK_CREATE_OR_UPDATE = (int) 201326598,
  TASK_DISABLE = (int) 201326600,
  TASK_DONT_ADD_PRINCIPAL_ACE = (int) 201326608,
  TASK_IGNORE_REGISTRATION_TRIGGERS = (int) 201326624
};

/* Structure/union declarations.  */
struct _SYSTEMTIME
{
  USHORT wYear;
  USHORT wMonth;
  USHORT wDayOfWeek;
  USHORT wDay;
  USHORT wHour;
  USHORT wMinute;
  USHORT wSecond;
  USHORT wMilliseconds;
};

[
  uuid(E34CB9F1-C7F7-424C-BE29-027DCC09363A),
  version(1.0)
]
library taskscheduler
{
  importlib("stdole2.tlb");

   /* CoClass declarations.  */
   [
     uuid(0F87369F-A4E5-4CFC-BD3E-73E6154572DD),
     cancreate
   ]
   coclass TaskScheduler
   {
     dispinterface ITaskService;
   };
   [
     uuid(F2A69DB7-DA2C-4352-9066-86FEE6DACAC9),
     cancreate
   ]
   coclass TaskHandlerPS
   {
     interface ITaskHandler;
   };
   [
     uuid(9F15266D-D7BA-48F0-93C1-E6895F6FE5AC),
     cancreate
   ]
   coclass TaskHandlerStatusPS
   {
     interface ITaskHandlerStatus;
     interface ITaskVariables;
   };

   /* Dispatch interface declarations.  */
   [
     uuid(79184A66-8664-423F-97F1-637356A5D812),
     helpstring("Container for ITaskFolders"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface ITaskFolderCollection : IDispatch
   {
     [id(1610743808), propget]
     HRESULT __stdcall Count (
       [out retval] long *pCount
     );
     [id(0), propget]
     HRESULT __stdcall Item (
       [in] VARIANT index,
       [out retval] dispinterface ITaskFolder **ppFolder
     );
     [id(-4), propget]
     HRESULT __stdcall _NewEnum (
       [out retval] IUnknown **ppEnum
     );
   };
   [
     uuid(8CFAC062-A080-4C15-9A88-AA7C2AF80DFC),
     helpstring("Container (directory) for tasks"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface ITaskFolder : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Name (
       [out retval] BSTR *pName
     );
     [id(0), propget]
     HRESULT __stdcall Path (
       [out retval] BSTR *pPath
     );
     [id(3)]
     HRESULT __stdcall GetFolder (
       BSTR Path,
       [out retval] dispinterface ITaskFolder **ppFolder
     );
     HRESULT __stdcall GetFolders (
       long flags,
       [out retval] dispinterface ITaskFolderCollection **ppFolders
     );
     HRESULT __stdcall CreateFolder (
       [in] BSTR subFolderName,
       [in opt] VARIANT sddl,
       [out retval] dispinterface ITaskFolder **ppFolder
     );
     HRESULT __stdcall DeleteFolder (
       BSTR subFolderName,
       [in] long flags
     );
     HRESULT __stdcall GetTask (
       BSTR Path,
       [out retval] dispinterface IRegisteredTask **ppTask
     );
     HRESULT __stdcall GetTasks (
       long flags,
       [out retval] dispinterface IRegisteredTaskCollection **ppTasks
     );
     HRESULT __stdcall DeleteTask (
       [in] BSTR Name,
       [in] long flags
     );
     HRESULT __stdcall RegisterTask (
       [in] BSTR Path,
       [in] BSTR XmlText,
       [in] long flags,
       [in] VARIANT UserId,
       [in] VARIANT password,
       [in] enum _TASK_LOGON_TYPE LogonType,
       [in opt] VARIANT sddl,
       [out retval] dispinterface IRegisteredTask **ppTask
     );
     HRESULT __stdcall RegisterTaskDefinition (
       [in] BSTR Path,
       [in] dispinterface ITaskDefinition *pDefinition,
       [in] long flags,
       [in] VARIANT UserId,
       [in] VARIANT password,
       [in] enum _TASK_LOGON_TYPE LogonType,
       [in opt] VARIANT sddl,
       [out retval] dispinterface IRegisteredTask **ppTask
     );
     HRESULT __stdcall GetSecurityDescriptor (
       long securityInformation,
       [out retval] BSTR *pSddl
     );
     HRESULT __stdcall SetSecurityDescriptor (
       [in] BSTR sddl,
       [in] long flags
     );
   };
   [
     uuid(9C86F320-DEE3-4DD1-B972-A303F26B061E),
     helpstring("A task that has been given to the Task Scheduler service"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IRegisteredTask : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Name (
       [out retval] BSTR *pName
     );
     [id(0), propget]
     HRESULT __stdcall Path (
       [out retval] BSTR *pPath
     );
     [id(2), propget]
     HRESULT __stdcall State (
       [out retval] enum _TASK_STATE *pState
     );
     [propget]
     HRESULT __stdcall Enabled (
       [out retval] WINBOOL *pEnabled
     );
     [id(3), propput]
     HRESULT __stdcall Enabled (
       WINBOOL argNo1
     );
     [id(5)]
     HRESULT __stdcall Run (
       [in] VARIANT params,
       [out retval] dispinterface IRunningTask **ppRunningTask
     );
     HRESULT __stdcall RunEx (
       [in] VARIANT params,
       [in] long flags,
       [in] long sessionID,
       [in] BSTR user,
       [out retval] dispinterface IRunningTask **ppRunningTask
     );
     HRESULT __stdcall GetInstances (
       long flags,
       [out retval] dispinterface IRunningTaskCollection **ppRunningTasks
     );
     [propget]
     HRESULT __stdcall LastRunTime (
       [out retval] DATE *pLastRunTime
     );
     [propget]
     HRESULT __stdcall LastTaskResult (
       [out retval] long *pLastTaskResult
     );
     [id(11), propget]
     HRESULT __stdcall NumberOfMissedRuns (
       [out retval] long *pNumberOfMissedRuns
     );
     [propget]
     HRESULT __stdcall NextRunTime (
       [out retval] DATE *pNextRunTime
     );
     [propget]
     HRESULT __stdcall Definition (
       [out retval] dispinterface ITaskDefinition **ppDefinition
     );
     [propget]
     HRESULT __stdcall Xml (
       [out retval] BSTR *pXml
     );
     HRESULT __stdcall GetSecurityDescriptor (
       long securityInformation,
       [out retval] BSTR *pSddl
     );
     HRESULT __stdcall SetSecurityDescriptor (
       [in] BSTR sddl,
       [in] long flags
     );
     HRESULT __stdcall Stop (
       long flags
     );
     [id(1610743825), restricted, hidden]
     HRESULT __stdcall GetRunTimes (
       [in] struct _SYSTEMTIME *pstStart,
       [in] struct _SYSTEMTIME *pstEnd,
       [in out] UINT *pCount,
       [out] struct _SYSTEMTIME **pRunTimes
     );
   };
   [
     uuid(653758FB-7B9A-4F1E-A471-BEEB8E9B834E),
     helpstring("A Task that is currently executing"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IRunningTask : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Name (
       [out retval] BSTR *pName
     );
     [id(0), propget]
     HRESULT __stdcall InstanceGuid (
       [out retval] BSTR *pGuid
     );
     [id(2), propget]
     HRESULT __stdcall Path (
       [out retval] BSTR *pPath
     );
     [propget]
     HRESULT __stdcall State (
       [out retval] enum _TASK_STATE *pState
     );
     [propget]
     HRESULT __stdcall CurrentAction (
       [out retval] BSTR *pName
     );
     HRESULT __stdcall Stop (void);
     HRESULT __stdcall Refresh (void);
     [propget]
     HRESULT __stdcall EnginePID (
       [out retval] UINT *pPID
     );
   };
   [
     uuid(6A67614B-6828-4FEC-AA54-6D52E8F1F2DB),
     helpstring("Group of tasks which are currently executing"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IRunningTaskCollection : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Count (
       [out retval] long *pCount
     );
     [id(0), propget]
     HRESULT __stdcall Item (
       [in] VARIANT index,
       [out retval] dispinterface IRunningTask **ppRunningTask
     );
     [id(-4), propget]
     HRESULT __stdcall _NewEnum (
       [out retval] IUnknown **ppEnum
     );
   };
   [
     uuid(F5BC8FC5-536D-4F77-B852-FBC1356FDEB6),
     helpstring("Describe task to be run by the Task Scheduler service"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface ITaskDefinition : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall RegistrationInfo (
       [out retval] dispinterface IRegistrationInfo **ppRegistrationInfo
     );
     [id(1), propput]
     HRESULT __stdcall RegistrationInfo (
       [in] dispinterface IRegistrationInfo *argNo1
     );
     [propget]
     HRESULT __stdcall Triggers (
       [out retval] dispinterface ITriggerCollection **ppTriggers
     );
     [id(2), propput]
     HRESULT __stdcall Triggers (
       [in] dispinterface ITriggerCollection *argNo1
     );
     [id(7), propget]
     HRESULT __stdcall Settings (
       [out retval] dispinterface ITaskSettings **ppSettings
     );
     [id(7), propput]
     HRESULT __stdcall Settings (
       [in] dispinterface ITaskSettings *argNo1
     );
     [id(11), propget]
     HRESULT __stdcall Data (
       [out retval] BSTR *pData
     );
     [id(11), propput]
     HRESULT __stdcall Data (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Principal (
       [out retval] dispinterface IPrincipal **ppPrincipal
     );
     [id(12), propput]
     HRESULT __stdcall Principal (
       [in] dispinterface IPrincipal *argNo1
     );
     [propget]
     HRESULT __stdcall Actions (
       [out retval] dispinterface IActionCollection **ppActions
     );
     [id(13), propput]
     HRESULT __stdcall Actions (
       [in] dispinterface IActionCollection *argNo1
     );
     [propget]
     HRESULT __stdcall XmlText (
       [out retval] BSTR *pXml
     );
     [id(14), propput]
     HRESULT __stdcall XmlText (
       [in] BSTR argNo1
     );
   };
   [
     uuid(416D8B73-CB41-4EA1-805C-9BE9A5AC4A74),
     helpstring("Information about the task"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IRegistrationInfo : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Description (
       [out retval] BSTR *pDescription
     );
     [id(1), propput]
     HRESULT __stdcall Description (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Author (
       [out retval] BSTR *pAuthor
     );
     [id(2), propput]
     HRESULT __stdcall Author (
       [in] BSTR argNo1
     );
     [id(4), propget]
     HRESULT __stdcall Version (
       [out retval] BSTR *pVersion
     );
     [id(4), propput]
     HRESULT __stdcall Version (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Date (
       [out retval] BSTR *pDate
     );
     [id(5), propput]
     HRESULT __stdcall Date (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Documentation (
       [out retval] BSTR *pDocumentation
     );
     [id(6), propput]
     HRESULT __stdcall Documentation (
       [in] BSTR argNo1
     );
     [id(9), propget]
     HRESULT __stdcall XmlText (
       [out retval] BSTR *pText
     );
     [id(9), propput]
     HRESULT __stdcall XmlText (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall URI (
       [out retval] BSTR *pUri
     );
     [id(10), propput]
     HRESULT __stdcall URI (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall SecurityDescriptor (
       [out retval] VARIANT *pSddl
     );
     [id(11), propput]
     HRESULT __stdcall SecurityDescriptor (
       [in] VARIANT argNo1
     );
     [propget]
     HRESULT __stdcall Source (
       [out retval] BSTR *pSource
     );
     [id(12), propput]
     HRESULT __stdcall Source (
       [in] BSTR argNo1
     );
   };
   [
     uuid(85DF5081-1B24-4F32-878A-D9D14DF4CB77),
     helpstring("Container for ITriggers"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface ITriggerCollection : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Count (
       [out retval] long *pCount
     );
     [id(0), propget]
     HRESULT __stdcall Item (
       [in] long index,
       [out retval] dispinterface ITrigger **ppTrigger
     );
     [id(-4), propget]
     HRESULT __stdcall _NewEnum (
       [out retval] IUnknown **ppEnum
     );
     [id(2)]
     HRESULT __stdcall Create (
       [in] enum _TASK_TRIGGER_TYPE2 Type,
       [out retval] dispinterface ITrigger **ppTrigger
     );
     [id(4)]
     HRESULT __stdcall Remove (
       [in] VARIANT index
     );
     HRESULT __stdcall Clear (void);
   };
   [
     uuid(09941815-EA89-4B5B-89E0-2A773801FAC3),
     helpstring("Specify when the task is started"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface ITrigger : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Type (
       [out retval] enum _TASK_TRIGGER_TYPE2 *pType
     );
     [propget]
     HRESULT __stdcall Id (
       [out retval] BSTR *pId
     );
     [id(2), propput]
     HRESULT __stdcall Id (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Repetition (
       [out retval] dispinterface IRepetitionPattern **ppRepeat
     );
     [id(3), propput]
     HRESULT __stdcall Repetition (
       [in] dispinterface IRepetitionPattern *argNo1
     );
     [propget]
     HRESULT __stdcall ExecutionTimeLimit (
       [out retval] BSTR *pTimeLimit
     );
     [id(4), propput]
     HRESULT __stdcall ExecutionTimeLimit (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall StartBoundary (
       [out retval] BSTR *pStart
     );
     [id(5), propput]
     HRESULT __stdcall StartBoundary (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall EndBoundary (
       [out retval] BSTR *pEnd
     );
     [id(6), propput]
     HRESULT __stdcall EndBoundary (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Enabled (
       [out retval] WINBOOL *pEnabled
     );
     [id(7), propput]
     HRESULT __stdcall Enabled (
       [in] WINBOOL argNo1
     );
   };
   [
     uuid(7FB9ACF1-26BE-400E-85B5-294B9C75DFD6),
     helpstring("Specify how often a task is to repeat"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IRepetitionPattern : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Interval (
       [out retval] BSTR *pInterval
     );
     [id(1), propput]
     HRESULT __stdcall Interval (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Duration (
       [out retval] BSTR *pDuration
     );
     [id(2), propput]
     HRESULT __stdcall Duration (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall StopAtDurationEnd (
       [out retval] WINBOOL *pStop
     );
     [id(3), propput]
     HRESULT __stdcall StopAtDurationEnd (
       [in] WINBOOL argNo1
     );
   };
   [
     uuid(8FD4711D-2D02-4C8C-87E3-EFF699DE127E),
     helpstring("Control execution of the task"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface ITaskSettings : IDispatch
   {
     [id(3), propget]
     HRESULT __stdcall AllowDemandStart (
       [out retval] WINBOOL *pAllowDemandStart
     );
     [id(3), propput]
     HRESULT __stdcall AllowDemandStart (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall RestartInterval (
       [out retval] BSTR *pRestartInterval
     );
     [id(4), propput]
     HRESULT __stdcall RestartInterval (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall RestartCount (
       [out retval] int *pRestartCount
     );
     [id(5), propput]
     HRESULT __stdcall RestartCount (
       [in] int argNo1
     );
     [propget]
     HRESULT __stdcall MultipleInstances (
       [out retval] enum _TASK_INSTANCES_POLICY *pPolicy
     );
     [id(6), propput]
     HRESULT __stdcall MultipleInstances (
       [in] enum _TASK_INSTANCES_POLICY argNo1
     );
     [propget]
     HRESULT __stdcall StopIfGoingOnBatteries (
       [out retval] WINBOOL *pStopIfOnBatteries
     );
     [id(7), propput]
     HRESULT __stdcall StopIfGoingOnBatteries (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall DisallowStartIfOnBatteries (
       [out retval] WINBOOL *pDisallowStart
     );
     [id(8), propput]
     HRESULT __stdcall DisallowStartIfOnBatteries (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall AllowHardTerminate (
       [out retval] WINBOOL *pAllowHardTerminate
     );
     [id(9), propput]
     HRESULT __stdcall AllowHardTerminate (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall StartWhenAvailable (
       [out retval] WINBOOL *pStartWhenAvailable
     );
     [id(10), propput]
     HRESULT __stdcall StartWhenAvailable (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall XmlText (
       [out retval] BSTR *pText
     );
     [id(11), propput]
     HRESULT __stdcall XmlText (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall RunOnlyIfNetworkAvailable (
       [out retval] WINBOOL *pRunOnlyIfNetworkAvailable
     );
     [id(12), propput]
     HRESULT __stdcall RunOnlyIfNetworkAvailable (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall ExecutionTimeLimit (
       [out retval] BSTR *pExecutionTimeLimit
     );
     [id(13), propput]
     HRESULT __stdcall ExecutionTimeLimit (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Enabled (
       [out retval] WINBOOL *pEnabled
     );
     [id(14), propput]
     HRESULT __stdcall Enabled (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall DeleteExpiredTaskAfter (
       [out retval] BSTR *pExpirationDelay
     );
     [id(15), propput]
     HRESULT __stdcall DeleteExpiredTaskAfter (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Priority (
       [out retval] int *pPriority
     );
     [id(16), propput]
     HRESULT __stdcall Priority (
       [in] int argNo1
     );
     [propget]
     HRESULT __stdcall Compatibility (
       [out retval] enum _TASK_COMPATIBILITY *pCompatLevel
     );
     [id(17), propput]
     HRESULT __stdcall Compatibility (
       [in] enum _TASK_COMPATIBILITY argNo1
     );
     [propget]
     HRESULT __stdcall Hidden (
       [out retval] WINBOOL *pHidden
     );
     [id(18), propput]
     HRESULT __stdcall Hidden (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall IdleSettings (
       [out retval] dispinterface IIdleSettings **ppIdleSettings
     );
     [id(19), propput]
     HRESULT __stdcall IdleSettings (
       [in] dispinterface IIdleSettings *argNo1
     );
     [propget]
     HRESULT __stdcall RunOnlyIfIdle (
       [out retval] WINBOOL *pRunOnlyIfIdle
     );
     [id(20), propput]
     HRESULT __stdcall RunOnlyIfIdle (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall WakeToRun (
       [out retval] WINBOOL *pWake
     );
     [id(21), propput]
     HRESULT __stdcall WakeToRun (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall NetworkSettings (
       [out retval] dispinterface INetworkSettings **ppNetworkSettings
     );
     [id(22), propput]
     HRESULT __stdcall NetworkSettings (
       [in] dispinterface INetworkSettings *argNo1
     );
   };
   [
     uuid(84594461-0053-4342-A8FD-088FABF11F32),
     helpstring("Parameters which specify idle state required for task to run"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IIdleSettings : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall IdleDuration (
       [out retval] BSTR *pDelay
     );
     [id(1), propput]
     HRESULT __stdcall IdleDuration (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall WaitTimeout (
       [out retval] BSTR *pTimeout
     );
     [id(2), propput]
     HRESULT __stdcall WaitTimeout (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall StopOnIdleEnd (
       [out retval] WINBOOL *pStop
     );
     [id(3), propput]
     HRESULT __stdcall StopOnIdleEnd (
       [in] WINBOOL argNo1
     );
     [propget]
     HRESULT __stdcall RestartOnIdle (
       [out retval] WINBOOL *pRestart
     );
     [id(4), propput]
     HRESULT __stdcall RestartOnIdle (
       [in] WINBOOL argNo1
     );
   };
   [
     uuid(9F7DEA84-C30B-4245-80B6-00E9F646F1B4),
     helpstring("Specify network settings required to run task"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface INetworkSettings : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Name (
       [out retval] BSTR *pName
     );
     [id(1), propput]
     HRESULT __stdcall Name (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Id (
       [out retval] BSTR *pId
     );
     [id(2), propput]
     HRESULT __stdcall Id (
       [in] BSTR argNo1
     );
   };
   [
     uuid(D98D51E5-C9B4-496A-A9C1-18980261CF0F),
     helpstring("User associated with task"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IPrincipal : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Id (
       [out retval] BSTR *pId
     );
     [id(1), propput]
     HRESULT __stdcall Id (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall DisplayName (
       [out retval] BSTR *pName
     );
     [id(2), propput]
     HRESULT __stdcall DisplayName (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall UserId (
       [out retval] BSTR *pUser
     );
     [id(3), propput]
     HRESULT __stdcall UserId (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall LogonType (
       [out retval] enum _TASK_LOGON_TYPE *pLogon
     );
     [id(4), propput]
     HRESULT __stdcall LogonType (
       [in] enum _TASK_LOGON_TYPE argNo1
     );
     [propget]
     HRESULT __stdcall GroupId (
       [out retval] BSTR *pGroup
     );
     [id(5), propput]
     HRESULT __stdcall GroupId (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall RunLevel (
       [out retval] enum _TASK_RUNLEVEL *pRunLevel
     );
     [id(6), propput]
     HRESULT __stdcall RunLevel (
       [in] enum _TASK_RUNLEVEL argNo1
     );
   };
   [
     uuid(02820E19-7B98-4ED2-B2E8-FDCCCEFF619B),
     helpstring("Container for IActions"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IActionCollection : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Count (
       [out retval] long *pCount
     );
     [id(0), propget]
     HRESULT __stdcall Item (
       [in] long index,
       [out retval] dispinterface IAction **ppAction
     );
     [id(-4), propget]
     HRESULT __stdcall _NewEnum (
       [out retval] IUnknown **ppEnum
     );
     [id(2), propget]
     HRESULT __stdcall XmlText (
       [out retval] BSTR *pText
     );
     [id(2), propput]
     HRESULT __stdcall XmlText (
       [in] BSTR argNo1
     );
     HRESULT __stdcall Create (
       [in] enum _TASK_ACTION_TYPE Type,
       [out retval] dispinterface IAction **ppAction
     );
     HRESULT __stdcall Remove (
       [in] VARIANT index
     );
     HRESULT __stdcall Clear (void);
     [propget]
     HRESULT __stdcall Context (
       [out retval] BSTR *pContext
     );
     [id(6), propput]
     HRESULT __stdcall Context (
       [in] BSTR argNo1
     );
   };
   [
     uuid(BAE54997-48B1-4CBE-9965-D6BE263EBEA4),
     helpstring("A single operation to be performed"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IAction : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Id (
       [out retval] BSTR *pId
     );
     [id(1), propput]
     HRESULT __stdcall Id (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Type (
       [out retval] enum _TASK_ACTION_TYPE *pType
     );
   };
   [
     uuid(86627EB4-42A7-41E4-A4D9-AC33A72F2D52),
     helpstring("Group of IRegisteredTasks"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IRegisteredTaskCollection : IDispatch
   {
     [id(1610743808), propget]
     HRESULT __stdcall Count (
       [out retval] long *pCount
     );
     [id(0), propget]
     HRESULT __stdcall Item (
       [in] VARIANT index,
       [out retval] dispinterface IRegisteredTask **ppRegisteredTask
     );
     [id(-4), propget]
     HRESULT __stdcall _NewEnum (
       [out retval] IUnknown **ppEnum
     );
   };
   [
     uuid(2FABA4C7-4DA9-4013-9697-20CC3FD40F85),
     helpstring("Communicate with the Task Scheduler service"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface ITaskService : IDispatch
   {
     [id(1)]
     HRESULT __stdcall GetFolder (
       [in] BSTR Path,
       [out retval] dispinterface ITaskFolder **ppFolder
     );
     HRESULT __stdcall GetRunningTasks (
       long flags,
       [out retval] dispinterface IRunningTaskCollection **ppRunningTasks
     );
     HRESULT __stdcall NewTask (
       [in] UINT flags,
       [out retval] dispinterface ITaskDefinition **ppDefinition
     );
     HRESULT __stdcall Connect (
       [in opt] VARIANT serverName,
       [in opt] VARIANT user,
       [in opt] VARIANT domain,
       [in opt] VARIANT password
     );
     [propget]
     HRESULT __stdcall Connected (
       [out retval] WINBOOL *pConnected
     );
     [id(0), propget]
     HRESULT __stdcall TargetServer (
       [out retval] BSTR *pServer
     );
     [id(6), propget]
     HRESULT __stdcall ConnectedUser (
       [out retval] BSTR *pUser
     );
     [propget]
     HRESULT __stdcall ConnectedDomain (
       [out retval] BSTR *pDomain
     );
     [propget]
     HRESULT __stdcall HighestVersion (
       [out retval] UINT *pVersion
     );
   };
   [
     uuid(39038068-2B46-4AFD-8662-7BB6F868D221),
     helpstring("Container for named strings"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface ITaskNamedValuePair : IDispatch
   {
     [id(0), propget]
     HRESULT __stdcall Name (
       [out retval] BSTR *pName
     );
     [id(0), propput]
     HRESULT __stdcall Name (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Value (
       [out retval] BSTR *pValue
     );
     [id(1), propput]
     HRESULT __stdcall Value (
       [in] BSTR argNo1
     );
   };
   [
     uuid(B4EF826B-63C3-46E4-A504-EF69E4F7EA4D),
     helpstring("Group of ITaskNamedValuePairs"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface ITaskNamedValueCollection : IDispatch
   {
     [id(1), propget]
     HRESULT __stdcall Count (
       [out retval] long *pCount
     );
     [id(0), propget]
     HRESULT __stdcall Item (
       [in] long index,
       [out retval] dispinterface ITaskNamedValuePair **ppPair
     );
     [id(-4), propget]
     HRESULT __stdcall _NewEnum (
       [out retval] IUnknown **ppEnum
     );
     [id(2)]
     HRESULT __stdcall Create (
       [in] BSTR Name,
       [in] BSTR Value,
       [out retval] dispinterface ITaskNamedValuePair **ppPair
     );
     [id(4)]
     HRESULT __stdcall Remove (
       [in] long index
     );
     HRESULT __stdcall Clear (void);
   };
   [
     uuid(D537D2B0-9FB3-4D34-9739-1FF5CE7B1EF3),
     helpstring("Run task when machine becomes idle"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IIdleTrigger : ITrigger
   {
   };
   [
     uuid(72DADE38-FAE4-4B3E-BAF4-5D009AF02B1C),
     helpstring("Run task when user logs on"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface ILogonTrigger : ITrigger
   {
     [id(20), propget]
     HRESULT __stdcall Delay (
       [out retval] BSTR *pDelay
     );
     [id(20), propput]
     HRESULT __stdcall Delay (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall UserId (
       [out retval] BSTR *pUser
     );
     [id(21), propput]
     HRESULT __stdcall UserId (
       [in] BSTR argNo1
     );
   };
   [
     uuid(754DA71B-4385-4475-9DD9-598294FA3641),
     helpstring("Run task when login session state changes"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface ISessionStateChangeTrigger : ITrigger
   {
     [id(20), propget]
     HRESULT __stdcall Delay (
       [out retval] BSTR *pDelay
     );
     [id(20), propput]
     HRESULT __stdcall Delay (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall UserId (
       [out retval] BSTR *pUser
     );
     [id(21), propput]
     HRESULT __stdcall UserId (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall StateChange (
       [out retval] enum _TASK_SESSION_STATE_CHANGE_TYPE *pType
     );
     [id(22), propput]
     HRESULT __stdcall StateChange (
       [in] enum _TASK_SESSION_STATE_CHANGE_TYPE argNo1
     );
   };
   [
     uuid(D45B0167-9653-4EEF-B94F-0732CA7AF251),
     helpstring("Start task in response to an event log event"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IEventTrigger : ITrigger
   {
     [id(20), propget]
     HRESULT __stdcall Subscription (
       [out retval] BSTR *pQuery
     );
     [id(20), propput]
     HRESULT __stdcall Subscription (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Delay (
       [out retval] BSTR *pDelay
     );
     [id(21), propput]
     HRESULT __stdcall Delay (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall ValueQueries (
       [out retval] dispinterface ITaskNamedValueCollection **ppNamedXPaths
     );
     [id(22), propput]
     HRESULT __stdcall ValueQueries (
       [in] dispinterface ITaskNamedValueCollection *argNo1
     );
   };
   [
     uuid(B45747E0-EBA7-4276-9F29-85C5BB300006),
     helpstring("Start task at a specific time"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface ITimeTrigger : ITrigger
   {
     [id(20), propget]
     HRESULT __stdcall RandomDelay (
       [out retval] BSTR *pRandomDelay
     );
     [id(20), propput]
     HRESULT __stdcall RandomDelay (
       [in] BSTR argNo1
     );
   };
   [
     uuid(126C5CD8-B288-41D5-8DBF-E491446ADC5C),
     helpstring("Run task every day, or every N days"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IDailyTrigger : ITrigger
   {
     [id(25), propget]
     HRESULT __stdcall DaysInterval (
       [out retval] short *pDays
     );
     [id(25), propput]
     HRESULT __stdcall DaysInterval (
       [in] short argNo1
     );
     [id(20), propget]
     HRESULT __stdcall RandomDelay (
       [out retval] BSTR *pRandomDelay
     );
     [id(20), propput]
     HRESULT __stdcall RandomDelay (
       [in] BSTR argNo1
     );
   };
   [
     uuid(5038FC98-82FF-436D-8728-A512A57C9DC1),
     helpstring("Run task every week, or every N weeks"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IWeeklyTrigger : ITrigger
   {
     [id(25), propget]
     HRESULT __stdcall DaysOfWeek (
       [out retval] short *pDays
     );
     [id(25), propput]
     HRESULT __stdcall DaysOfWeek (
       [in] short argNo1
     );
     [propget]
     HRESULT __stdcall WeeksInterval (
       [out retval] short *pWeeks
     );
     [id(26), propput]
     HRESULT __stdcall WeeksInterval (
       [in] short argNo1
     );
     [id(20), propget]
     HRESULT __stdcall RandomDelay (
       [out retval] BSTR *pRandomDelay
     );
     [id(20), propput]
     HRESULT __stdcall RandomDelay (
       [in] BSTR argNo1
     );
   };
   [
     uuid(97C45EF1-6B02-4A1A-9C0E-1EBFBA1500AC),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IMonthlyTrigger : ITrigger
   {
     [id(25), propget]
     HRESULT __stdcall DaysOfMonth (
       [out retval] long *pDays
     );
     [id(25), propput]
     HRESULT __stdcall DaysOfMonth (
       [in] long argNo1
     );
     [propget]
     HRESULT __stdcall MonthsOfYear (
       [out retval] short *pMonths
     );
     [id(26), propput]
     HRESULT __stdcall MonthsOfYear (
       [in] short argNo1
     );
     [propget]
     HRESULT __stdcall RunOnLastDayOfMonth (
       [out retval] WINBOOL *pLastDay
     );
     [id(27), propput]
     HRESULT __stdcall RunOnLastDayOfMonth (
       [in] WINBOOL argNo1
     );
     [id(20), propget]
     HRESULT __stdcall RandomDelay (
       [out retval] BSTR *pRandomDelay
     );
     [id(20), propput]
     HRESULT __stdcall RandomDelay (
       [in] BSTR argNo1
     );
   };
   [
     uuid(77D025A3-90FA-43AA-B52E-CDA5499B946A),
     helpstring("Run task on specific day of week, e.g. 'Second Tuesday in March'"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IMonthlyDOWTrigger : ITrigger
   {
     [id(25), propget]
     HRESULT __stdcall DaysOfWeek (
       [out retval] short *pDays
     );
     [id(25), propput]
     HRESULT __stdcall DaysOfWeek (
       [in] short argNo1
     );
     [propget]
     HRESULT __stdcall WeeksOfMonth (
       [out retval] short *pWeeks
     );
     [id(26), propput]
     HRESULT __stdcall WeeksOfMonth (
       [in] short argNo1
     );
     [propget]
     HRESULT __stdcall MonthsOfYear (
       [out retval] short *pMonths
     );
     [id(27), propput]
     HRESULT __stdcall MonthsOfYear (
       [in] short argNo1
     );
     [propget]
     HRESULT __stdcall RunOnLastWeekOfMonth (
       [out retval] WINBOOL *pLastWeek
     );
     [id(28), propput]
     HRESULT __stdcall RunOnLastWeekOfMonth (
       [in] WINBOOL argNo1
     );
     [id(20), propget]
     HRESULT __stdcall RandomDelay (
       [out retval] BSTR *pRandomDelay
     );
     [id(20), propput]
     HRESULT __stdcall RandomDelay (
       [in] BSTR argNo1
     );
   };
   [
     uuid(2A9C35DA-D357-41F4-BBC1-207AC1B1F3CB),
     helpstring("Run task when machine starts up"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IBootTrigger : ITrigger
   {
     [id(20), propget]
     HRESULT __stdcall Delay (
       [out retval] BSTR *pDelay
     );
     [id(20), propput]
     HRESULT __stdcall Delay (
       [in] BSTR argNo1
     );
   };
   [
     uuid(4C8FEC3A-C218-4E0C-B23D-629024DB91A2),
     helpstring("Run task as soon as it is registered"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IRegistrationTrigger : ITrigger
   {
     [id(20), propget]
     HRESULT __stdcall Delay (
       [out retval] BSTR *pDelay
     );
     [id(20), propput]
     HRESULT __stdcall Delay (
       [in] BSTR argNo1
     );
   };
   [
     uuid(4C3D624D-FD6B-49A3-B9B7-09CB3CD3F047),
     helpstring("Run a program"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IExecAction : IAction
   {
     [id(10), propget]
     HRESULT __stdcall Path (
       [out retval] BSTR *pPath
     );
     [id(10), propput]
     HRESULT __stdcall Path (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Arguments (
       [out retval] BSTR *pArgument
     );
     [id(11), propput]
     HRESULT __stdcall Arguments (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall WorkingDirectory (
       [out retval] BSTR *pWorkingDirectory
     );
     [id(12), propput]
     HRESULT __stdcall WorkingDirectory (
       [in] BSTR argNo1
     );
   };
   [
     uuid(505E9E68-AF89-46B8-A30F-56162A83D537),
     helpstring("Show a message to the user"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IShowMessageAction : IAction
   {
     [id(10), propget]
     HRESULT __stdcall Title (
       [out retval] BSTR *pTitle
     );
     [id(10), propput]
     HRESULT __stdcall Title (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall MessageBody (
       [out retval] BSTR *pMessageBody
     );
     [id(11), propput]
     HRESULT __stdcall MessageBody (
       [in] BSTR argNo1
     );
   };
   [
     uuid(6D2FD252-75C5-4F66-90BA-2A7D8CC3039F),
     helpstring("Execute a Task Handler"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IComHandlerAction : IAction
   {
     [id(10), propget]
     HRESULT __stdcall ClassId (
       [out retval] BSTR *pClsid
     );
     [id(10), propput]
     HRESULT __stdcall ClassId (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Data (
       [out retval] BSTR *pData
     );
     [id(11), propput]
     HRESULT __stdcall Data (
       [in] BSTR argNo1
     );
   };
   [
     uuid(10F62C64-7E16-4314-A0C2-0C3683F99D40),
     helpstring("Send an email"),
     dual,
     nonextensible,
     oleautomation,
     dispatchable
   ]
   dispinterface IEmailAction : IAction
   {
     [id(10), propget]
     HRESULT __stdcall Server (
       [out retval] BSTR *pServer
     );
     [id(10), propput]
     HRESULT __stdcall Server (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Subject (
       [out retval] BSTR *pSubject
     );
     [id(11), propput]
     HRESULT __stdcall Subject (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall To (
       [out retval] BSTR *pTo
     );
     [id(12), propput]
     HRESULT __stdcall To (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Cc (
       [out retval] BSTR *pCc
     );
     [id(13), propput]
     HRESULT __stdcall Cc (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Bcc (
       [out retval] BSTR *pBcc
     );
     [id(14), propput]
     HRESULT __stdcall Bcc (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall ReplyTo (
       [out retval] BSTR *pReplyTo
     );
     [id(15), propput]
     HRESULT __stdcall ReplyTo (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall From (
       [out retval] BSTR *pFrom
     );
     [id(16), propput]
     HRESULT __stdcall From (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall HeaderFields (
       [out retval] dispinterface ITaskNamedValueCollection **ppHeaderFields
     );
     [id(17), propput]
     HRESULT __stdcall HeaderFields (
       [in] dispinterface ITaskNamedValueCollection *argNo1
     );
     [propget]
     HRESULT __stdcall Body (
       [out retval] BSTR *pBody
     );
     [id(18), propput]
     HRESULT __stdcall Body (
       [in] BSTR argNo1
     );
     [propget]
     HRESULT __stdcall Attachments (
       [out retval] VARIANT pAttachements[]*
     );
     [id(19), propput]
     HRESULT __stdcall Attachments (
       [in] VARIANT argNo1[]
     );
   };

};

/* Interface declarations.  */
[
  uuid(839D7762-5121-4009-9234-4F0D19394F04),
  helpstring("an extension to the actions that a task can execute")
]
interface ITaskHandler : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall Start (
    [in] IUnknown * pHandlerServices,
    [in] BSTR Data
  );
  HRESULT __stdcall Stop (
    [out] HRESULT *pRetCode
  );
  HRESULT __stdcall Pause (void);
  HRESULT __stdcall Resume (void);
};
[
  uuid(EAEC7A8F-27A0-4DDC-8675-14726A01A38A),
  helpstring("Allow handler to send status information to task engine")
]
interface ITaskHandlerStatus : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall UpdateStatus (
    [in] short percentComplete,
    [in] BSTR statusMessage
  );
  HRESULT __stdcall TaskCompleted (
    [in] HRESULT taskErrCode
  );
};
[
  uuid(3E4C9351-D966-4B8B-BB87-CEBA68BB0107),
  helpstring("Allows task handler to share information with task")
]
interface ITaskVariables : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall GetInput (
    [out retval] BSTR *pInput
  );
  HRESULT __stdcall SetOutput (
    [in] BSTR input
  );
  HRESULT __stdcall GetContext (
    [out retval] BSTR *pContext
  );
};

