Leaked source code of windows server 2003
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.
 
 
 
 
 
 

904 lines
33 KiB

cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// MSNotify.h")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// (C) Copyright 1995-1998 Microsoft Corporation. All Rights Reserved.")
cpp_quote("//")
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
cpp_quote("// PARTICULAR PURPOSE.")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")
import "objidl.idl";
import "oleidl.idl";
import "ocidl.idl";
import "mstask.idl";
interface INotification;
interface INotificationMgr;
interface INotificationSink;
interface IEnumScheduleGroup;
interface IEnumNotification;
interface IScheduleGroup;
interface INotificationReport;
typedef [unique] INotification *LPNOTIFICATION;
typedef [unique] INotificationMgr *LPNOTIFICATIONMGR;
typedef [unique] INotificationSink *LPNOTIFICATIONSINK;
typedef [unique] IEnumNotification *LPENUMNOTIFICATION;
typedef [unique] IEnumScheduleGroup *LPENUMSCHEDULEGROUP;
typedef [unique] IScheduleGroup *LPSCHEDULEGROUP;
typedef [unique] INotificationReport *LPNOTIFICATIONREPORT;
typedef REFGUID REFNOTIFICATIONTYPE;
typedef GUID NOTIFICATIONTYPE, *PNOTIFICATIONTYPE;
// NOTIFICATIONCOOKIE:
// The notification cookie is a GUID which is used to identify
// a notification uniquely during the lifetime of a notification.
// A notification can be persisted.
typedef GUID NOTIFICATIONCOOKIE, *PNOTIFICATIONCOOKIE;
typedef struct _tagTASKDATA
{
ULONG cbSize;
DWORD dwReserved;
DWORD dwTaskFlags;
DWORD dwPriority;
DWORD dwDuration;
DWORD nParallelTasks;
// ...
} TASK_DATA, *PTASK_DATA;
cpp_quote("")
cpp_quote("////////////////////////////////////////////////////////////////////////////")
cpp_quote("// Broadcast Destinations ")
cpp_quote("EXTERN_C const CLSID CLSID_GLOBAL_BROADCAST ;")
cpp_quote("EXTERN_C const CLSID CLSID_PROCESS_BROADCAST ;")
cpp_quote("EXTERN_C const CLSID CLSID_THREAD_BROADCAST ;")
cpp_quote("")
cpp_quote("EXTERN_C const GUID CLSID_StdNotificationMgr ;")
cpp_quote("")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_NULL ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_ANOUNCMENT ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_TASK ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_ALERT ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_INET_IDLE ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_INET_OFFLINE ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_INET_ONLINE ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_TASKS_SUSPEND ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_TASKS_RESUME ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_TASKS_ABORT ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_TASKS_COMPLETED ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_TASKS_PROGRESS ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_AGENT_INIT ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_AGENT_START ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_BEGIN_REPORT ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_END_REPORT ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_CONNECT_TO_INTERNET;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_DISCONNECT_FROM_INTERNET;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_CONFIG_CHANGED ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_PROGRESS_REPORT ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_USER_IDLE_BEGIN ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_USER_IDLE_END ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_TASKS_STARTED ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_TASKS_ERROR ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_d ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_e ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_f ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_11 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_12 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_13 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_14 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_ITEM_START ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_ITEM_RESTART ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_ITEM_DONE ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_GROUP_START ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_GROUP_RESTART ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_GROUP_DONE ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_0 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_1 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_2 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_3 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_4 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_5 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_6 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_7 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_8 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_9 ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_A ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_B ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_C ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_D ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_E ;")
cpp_quote("EXTERN_C const GUID NOTIFICATIONTYPE_START_F ;")
cpp_quote("#define NOTIFICATIONTYPE_ALL NOTIFICATIONTYPE_NULL ")
cpp_quote("EXTERN_C const GUID NOTFCOOKIE_SCHEDULE_GROUP_DAILY ;")
cpp_quote("EXTERN_C const GUID NOTFCOOKIE_SCHEDULE_GROUP_WEEKLY ;")
cpp_quote("EXTERN_C const GUID NOTFCOOKIE_SCHEDULE_GROUP_MONTHLY ;")
cpp_quote("EXTERN_C const GUID NOTFCOOKIE_SCHEDULE_GROUP_MANUAL ;")
cpp_quote("#ifndef _LPENUMPROPERTYMAP_DEFINED")
cpp_quote("#define _LPENUMPROPERTYMAP_DEFINED")
[
local,
object,
uuid(c733e4a1-576e-11d0-b28c-00c04fd7cd22),
pointer_default(unique)
]
interface IEnumPropertyMap : IUnknown
{
typedef [unique] IEnumPropertyMap *LPENUMPROPERTYMAP;
typedef struct _tagSTATPROPMAP
{
// extent this to use a variant
LPOLESTR pstrName; // name
DWORD dwFlags; // null for now
VARIANT variantValue; // the variant value
} STATPROPMAP, *LPSTATPROPMAP;
[local]
HRESULT Next(
[in] ULONG celt,
[out, size_is(celt), length_is(*pceltFetched)]
STATPROPMAP *rgelt,
[out] ULONG *pceltFetched);
[call_as(Next)]
HRESULT RemoteNext(
[in] ULONG celt,
[out, size_is(celt), length_is(*pceltFetched)]
STATPROPMAP *rgelt,
[out] ULONG *pceltFetched);
HRESULT Skip(
[in] ULONG celt);
HRESULT Reset();
HRESULT Clone(
[out] IEnumPropertyMap **ppenum);
}
cpp_quote("#endif")
cpp_quote("#ifndef _LPPROPERTYMAP")
cpp_quote("#define _LPPROPERTYMAP")
[
local,
object,
uuid(c733e4a2-576e-11d0-b28c-00c04fd7cd22),
pointer_default(unique)
]
interface IPropertyMap : IUnknown
{
typedef [unique] IPropertyMap *LPPROPERTYMAP;
HRESULT Write(
[in] LPCWSTR pstrName, // name
[in] VARIANT variantValue, // the variant value
[in] DWORD dwFlags // null for now
);
HRESULT Read(
[in] LPCWSTR pstrName, // name
[out] VARIANT *pVariantValue // the variant value
);
HRESULT GetCount(
[out] ULONG *pCount
);
HRESULT GetEnumMAP(
[out] LPENUMPROPERTYMAP *ppEnumMap
);
}
cpp_quote("#endif")
//+---------------------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation, 1995-1998.
//
// Contents: The notification description and INotification interface definition
//
// Description:
//
// Each notification (INotification) has an idendifier (ITEMID) which is a guid and
// itentifies the notification type
//
// An notification is an object which can be send to a distination object via
// a particular interface. The delivery mechanism can be a
// scheduler or an advisor.
//
// The sources of an notification can be any any object or module.
//
// An notification can scheduled and delivered to the destination(s) according
// the trigger time.
//
// An notification might be as simple as an alert or notification. It can
// be a full object form the cache or the docfile. It can be an
// announcment and data might not be available yet.
//
// Many notifications will in fact arrive with all data.
//
// The same object will expose I(Async)Moniker and the client
// can call BindToXXX to bind to the object of the data.
//
//----------------------------------------------------------------------------
//+---------------------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation, 1995-1998.
//
// Contents: IEnumNotification interface definition
//
// Description:
//
// Enumerator overn Notifications.
//
//----------------------------------------------------------------------------
cpp_quote("#define NOTF_E_NOTIFICATION_NOT_DELIVERED _HRESULT_TYPEDEF_(0x800C0F00L) ")
cpp_quote("#ifndef _LPNOTIFICATION")
cpp_quote("#define _LPNOTIFICATION")
[
local,
object,
uuid(c733e4a3-576e-11d0-b28c-00c04fd7cd22),
pointer_default(unique)
]
interface INotification : IPropertyMap
{
//typedef [unique] INotification *LPNOTIFICATION;
typedef enum _tagNOTFSINKMODE
{
// exclusive means deliver only
// notification of the registered type
// NM_Exclusive = 0x00000001
// launch me if an notification of
// registered types arrives
//,NM_Instantiate = 0x00000002
// the sink wants to get completion reports
//,NM_CompletionReport = 0x00000004
// register permanently
//
NM_PERMANENT = 0x00000008
//
// also accept directed notifications
,NM_ACCEPT_DIRECTED_NOTIFICATION = 0x00000010
} _NOTFSINKMODE;
typedef DWORD NOTFSINKMODE;
//
// information about the notification itself
// passed on by the creator of the notification to the scheduler
// and to the advisor
typedef DWORD NOTIFICATIONFLAGS;
//
// the adivse mode indicates how the adivse should be done
//
typedef enum _tagDELIVERMODE
{
// **** FLAGS HOW IT SHOULD BE DELIVERED ***
//
// the normal mode is to deliver imedialty
// and async (postmessage to enter thread
// of destination
// deliver with high priority
// (thread entered with SendNotifyMessage
DM_DELIVER_PREFERED = 0x00000001
// deliver delayed
,DM_DELIVER_DELAYED = 0x00000002
// always deliver the notification
// even on was transmited just imedialty before
,DM_DELIVER_LAST_DELAYED = 0x00000004
// the notification should be delivered
// imedialty and synchronouse
//,DM_SYNCHRONOUS = 0x00000010
// deliver notification only if class is registered
,DM_ONLY_IF_RUNNING = 0x00000020
// notification is send input sync - meaning the
// notification is dispatched before the call returns
//,DM_INPUT_SYNCHRONOUS = 0x00000040
// the notification might be suspended
//
,DM_THROTTLE_MODE = 0x00000080
// **** FLAGS ABOUT PROGRESS FROM THE NOTIFICATIONMGR ***
// the sender want a completion report (notification)
,DM_NEED_COMPLETIONREPORT = 0x00000100
// the send wants progress report
// which means should be called the notification arrives
// at the destination or gets triggered
,DM_NEED_PROGRESSREPORT = 0x00000200
// deliver the notification if there is
// no update notification pending from
// the sender or receiver
//,DM_ONLY_IF_NOT_PENDING = 0x00001000
//
// deliver to the default thread in this process
// if not registered
,DM_DELIVER_DEFAULT_THREAD = 0x00000400
// deliver to the default process if
// registered
,DM_DELIVER_DEFAULT_PROCESS = 0x00000800
// **** GROUP FLAGS ***
// member of group - the notifications
// are delivered sequentiall - meaning
// a completion report is send by each one
//,DM_GROUP_SEQUENTIAL = 0x00001000
// member of group - the notifications
// are delivered at the same time - DEFAULT
//,DM_GROUP_PARALLEL = 0x00000040
} _DELIVERMODE;
typedef DWORD DELIVERMODE;
// get the notification flags
HRESULT GetNotificationInfo(
[out] PNOTIFICATIONTYPE pNotificationType,
[out] PNOTIFICATIONCOOKIE pNotificationCookie,
[out] NOTIFICATIONFLAGS *pNotificationFlags,
[out] DELIVERMODE *pDeliverMode,
[in] DWORD dwReserved
);
HRESULT Clone(
//clones a notification with a new type; the cloned notification has a new cookie
[in] REFNOTIFICATIONTYPE rNotificationType,
// the new object just created
[out] LPNOTIFICATION *ppNotification,
[in] DWORD dwReserved
);
}
cpp_quote("#endif")
cpp_quote("#ifndef _LPNOTIFICATIONMGR_DEFINED")
cpp_quote("#define _LPNOTIFICATIONMGR_DEFINED")
[
local,
object,
uuid(c733e4a4-576e-11d0-b28c-00c04fd7cd22),
pointer_default(unique)
]
interface INotificationMgr : IUnknown
{
//typedef [unique] INotificationMgr *LPNOTIFICATIONMGR;
typedef enum _tagGROUPMODE
{
// member of group - the notifications
// are delivered sequentiall - meaning
// a completion report is send by each one
GM_GROUP_SEQUENTIAL = 0x00000001
} _GROUPMODE;
typedef DWORD GROUPMODE;
typedef enum _tagENUM_FLAGS
{
//
// HOW TO USES THIS FLAGS
//
// these flags allow to specify which items
// and what should be in the item when
// enumerating notification items
//
// default is all items with notification
// object
//
// no notification object is returned
EF_NOT_NOTIFICATION = 0x00000001
// not item of scheduled groups
,EF_NOT_SCHEDULEGROUPITEM = 0x00000002
//
//
,EF_NOTIFICATION_INPROGRESS = 0x00000004
//
// get items which are throttled
//
,EF_NOTIFICATION_THROTTLED = 0x00000008
//
,EF_NOTIFICATION_SUSPENDED = 0x00000010
} _ENUM_FLAGS;
typedef DWORD ENUM_FLAGS;
typedef struct _tagNotificationItem
{
ULONG cbSize;
// the notification itself
LPNOTIFICATION pNotification;
// the notification type
NOTIFICATIONTYPE NotificationType;
// flags which go with the notification
NOTIFICATIONFLAGS NotificationFlags;
// flags passed on deliver/schedule
DELIVERMODE DeliverMode;
// the cookie of the notification
NOTIFICATIONCOOKIE NotificationCookie;
// the task trigger
TASK_TRIGGER TaskTrigger;
// the task data
TASK_DATA TaskData;
// group cookie if part of a group
NOTIFICATIONCOOKIE groupCookie;
// clsid of sender
CLSID clsidSender;
// clsid of destination
CLSID clsidDest;
// last run date
FILETIME dateLastRun;
// the next run date
FILETIME dateNextRun;
// state of the notification
DWORD dwNotificationState;
} NOTIFICATIONITEM, *PNOTIFICATIONITEM;
HRESULT RegisterNotificationSink(
[in] LPNOTIFICATIONSINK pNotfctnSink, // can be null - see mode
[in] LPCLSID pNotificationDest,
[in] NOTFSINKMODE NotfctnSinkMode,
[in] ULONG cNotifications,
[in] PNOTIFICATIONTYPE pNotificationIDs,
[out] PNOTIFICATIONCOOKIE pRegisterCookie,
[in] DWORD dwReserved
);
HRESULT UnregisterNotificationSink(
[in] PNOTIFICATIONCOOKIE pRegisterCookie
);
HRESULT CreateNotification(
// the type of notification
[in] REFNOTIFICATIONTYPE rNotificationType,
// creation flags
[in] NOTIFICATIONFLAGS NotificationFlags,
// the pUnkOuter for aggregation
[in] LPUNKNOWN pUnkOuter,
// the new object just created
[out] LPNOTIFICATION *ppNotification,
[in] DWORD dwReserved
);
// find a scheduled notification
HRESULT FindNotification(
// the notification cookie
[in] PNOTIFICATIONCOOKIE pNotificatioCookie,
// the new object just created
[out] PNOTIFICATIONITEM pNotificationItem,
[in] DWORD grfEnumMode
);
// deliver a notification
HRESULT DeliverNotification(
// the notificationid and object
[in] LPNOTIFICATION pNotification,
// destination
[in] REFCLSID rNotificationDest,
// deliver mode - group and schedule data
[in] DELIVERMODE deliverMode,
// info about who the sender
[in] LPNOTIFICATIONSINK pReportNotfctnSink, // can be null - see mode
// the notification update interface
[out] LPNOTIFICATIONREPORT *ppNotfctnReport,
// task data for notification
[in] PTASK_DATA pTaskData
);
// add notification to scheduler
HRESULT ScheduleNotification(
// the notificationid and object
[in] LPNOTIFICATION pNotification,
// destination
[in] REFCLSID rNotificationDest,
// deliver mode - group and schedule data
[in] PTASK_TRIGGER pTaskTrigger,
// flags which go with the TaskTrigger
[in] PTASK_DATA pTaskData,
// the mode how it should be delivered
[in] DELIVERMODE deliverMode,
// info about who the sender
[in] LPCLSID pClsidSender, // class of sender can be NULL
// sink to which updates from the receiver should arrive
[in] LPNOTIFICATIONSINK pReportNotfctnSink, // can be null - see mode
// the notification update object - only if completion report was requested
[out] LPNOTIFICATIONREPORT *ppNotfctnReport,
//the cookie of the new notification
[out] PNOTIFICATIONCOOKIE pNotificationCookie,
// reserved dword
[in] DWORD dwReserved
);
// add notification to scheduler
HRESULT UpdateNotification(
//the cookie of the new notification
[in] PNOTIFICATIONCOOKIE pNotificationCookie,
// deliver mode - group and schedule data
[in] PTASK_TRIGGER pTaskTrigger,
// flags which go with the TaskTrigger
[in] PTASK_DATA pTaskData,
// the mode how it should be delivered
[in] DELIVERMODE deliverMode,
// reserved dword
[in] DWORD dwReserved
);
HRESULT RevokeNotification(
[in] PNOTIFICATIONCOOKIE pnotificationCookie,
[out] PNOTIFICATIONITEM pNotificationItem,
[in] DWORD grfEnumMode
);
HRESULT GetEnumNotification(
[in] DWORD grfEnumFlags,
[out] LPENUMNOTIFICATION *ppEnumNotification
);
// creates a new group
HRESULT CreateScheduleGroup(
// the group creation flags
[in] DWORD grfGroupCreateFlags,
// the new group
[out] LPSCHEDULEGROUP *ppSchGroup,
// the cookie of the group
[out] PNOTIFICATIONCOOKIE pGroupCookie,
[in] DWORD dwReserved
);
// finds an existing group
HRESULT FindScheduleGroup(
[in] PNOTIFICATIONCOOKIE pGroupCookie,
[out] LPSCHEDULEGROUP *ppSchGroup,
// the cookie of the group
[in] DWORD dwReserved
);
// revokes an entire group from the scheduler
HRESULT RevokeScheduleGroup(
// cookie of group to be revoked
[in] PNOTIFICATIONCOOKIE pGroupCookie,
[out] LPSCHEDULEGROUP *ppSchGroup,
[in] DWORD dwReserved
);
// an enumerator over the groups in the scheduler
HRESULT GetEnumScheduleGroup(
[in] DWORD grfEnumFlags,
[out] LPENUMSCHEDULEGROUP *ppEnumScheduleGroup
);
HRESULT DeliverReport(
// the notification object itself
[in] LPNOTIFICATION pNotification,
// the cookie of the object the notification is targeted too
[in] PNOTIFICATIONCOOKIE pRunningNotfCookie,
[in] DWORD dwReserved
);
}
cpp_quote("#endif")
cpp_quote("#ifndef _LPNOTIFICATIONSINK_DEFINED")
cpp_quote("#define _LPNOTIFICATIONSINK_DEFINED")
[
local,
object,
uuid(c733e4a5-576e-11d0-b28c-00c04fd7cd22),
pointer_default(unique)
]
interface INotificationSink : IUnknown
{
//typedef [unique] INotificationSink *LPNOTIFICATIONSINK;
HRESULT OnNotification(
// the notification object itself
[in] LPNOTIFICATION pNotification,
// the report sink if - can be NULL
[in] LPNOTIFICATIONREPORT pNotfctnReport,
[in] DWORD dwReserved
);
}
cpp_quote("#endif")
cpp_quote("#ifndef _LPGROUPMGR_DEFINED")
cpp_quote("#define _LPGROUPMGR_DEFINED")
[
local,
object,
uuid(c733e4a6-576e-11d0-b28c-00c04fd7cd22),
pointer_default(unique)
]
interface IScheduleGroup : IUnknown
{
//typedef [unique] IScheduleGroup *LPSCHEDULEGROUP;
typedef struct _tagGroupInfo
{
ULONG cbSize;
LPWSTR pwzGroupname;
} GROUPINFO, *PGROUPINFO;
// change the group attributes such as task trigger
// name and mode - see mode for parallel and sequential
HRESULT SetAttributes(
// new task trigger
[in] PTASK_TRIGGER pTaskTrigger,
// the flags which go with the TaskTrigger
[in] PTASK_DATA pTaskData,
// new group cookie if sequential
[in] PNOTIFICATIONCOOKIE pGroupCookie,
// group data
[in] PGROUPINFO pGroupInfo,
// sequential or parallel
[in] GROUPMODE grfGroupMode
);
HRESULT GetAttributes(
// new task trigger
[out] PTASK_TRIGGER pTaskTrigger,
// the flags which go with the TaskTrigger
[out] PTASK_DATA pTaskData,
// new group cookie if sequential
[out] PNOTIFICATIONCOOKIE pGroupCookie,
//group data info
[out] PGROUPINFO pGroupInfo,
// sequential or parallel
[out] GROUPMODE *pgrfGroupMode,
// number of elements in group
[out] LONG *pElements
);
// add notification to this group
HRESULT AddNotification(
// the notificationid and object
[in] LPNOTIFICATION pNotification,
// destination
[in] REFCLSID rNotificationDest,
// deliver mode - group and schedule data
[in] DELIVERMODE deliverMode,
// info about who the sender
[in] LPCLSID pClsidSender, // class of sender can be NULL
// sink to which updates from the receiver should arrive
[in] LPNOTIFICATIONSINK pReportNotfctnSink, // can be null - see mode
// the notification update object - only if completion report was requested
[out] LPNOTIFICATIONREPORT *ppNotfctnReport,
//the cookie of the new notification
[out] PNOTIFICATIONCOOKIE pNotificationCookie,
// task data for notification
[in] PTASK_DATA pTaskData
);
// find a notification in the group
HRESULT FindNotification(
// the notification cookie
[in] PNOTIFICATIONCOOKIE pNotificatioCookie,
// the new object just created
[out] PNOTIFICATIONITEM pNotificationItem,
[in] DWORD dwReserved
);
// only for completness
HRESULT RevokeNotification(
[in] PNOTIFICATIONCOOKIE pnotificationCookie,
[out] PNOTIFICATIONITEM pschedulNotification,
[in] DWORD dwReserved
);
// an enumerator over the items in this group
HRESULT GetEnumNotification(
// flags which items to enumerate
[in] DWORD grfFlags,
[out] LPENUMNOTIFICATION *ppEnumNotification
);
}
cpp_quote("#endif")
cpp_quote("#ifndef _LPENUMSCHEDULEGROUP_DEFINED")
cpp_quote("#define _LPENUMSCHEDULEGROUP_DEFINED")
[
local,
object,
uuid(c733e4a9-576e-11d0-b28c-00c04fd7cd22),
pointer_default(unique)
]
interface IEnumScheduleGroup : IUnknown
{
//typedef [unique] IEnumScheduleGroup *LPENUMSCHEDULEGROUP;
[local]
HRESULT Next(
[in] ULONG celt,
[out, size_is(celt), length_is(*pceltFetched)]
LPSCHEDULEGROUP *rgelt,
[out] ULONG *pceltFetched);
[call_as(Next)]
HRESULT RemoteNext(
[in] ULONG celt,
[out, size_is(celt), length_is(*pceltFetched)]
LPSCHEDULEGROUP *rgelt,
[out] ULONG *pceltFetched);
HRESULT Skip(
[in] ULONG celt);
HRESULT Reset();
HRESULT Clone(
[out] IEnumScheduleGroup **ppenum);
}
cpp_quote("#endif")
cpp_quote("#ifndef _LPENUMNOTIFICATION_DEFINED")
cpp_quote("#define _LPENUMNOTIFICATION_DEFINED")
[
local,
object,
uuid(c733e4a8-576e-11d0-b28c-00c04fd7cd22),
pointer_default(unique)
]
interface IEnumNotification : IUnknown
{
//typedef [unique] IEnumNotification *LPENUMNOTIFICATION;
[local]
HRESULT Next(
[in] ULONG celt,
[out, size_is(celt), length_is(*pceltFetched)]
NOTIFICATIONITEM *rgelt,
[out] ULONG *pceltFetched);
[call_as(Next)]
HRESULT RemoteNext(
[in] ULONG celt,
[out, size_is(celt), length_is(*pceltFetched)]
NOTIFICATIONITEM *rgelt,
[out] ULONG *pceltFetched);
HRESULT Skip(
[in] ULONG celt);
HRESULT Reset();
HRESULT Clone(
[out] IEnumNotification **ppenum);
}
cpp_quote("#endif")
///
cpp_quote("#ifndef _LPNOTIFICATIONREPORT_DEFINED")
cpp_quote("#define _LPNOTIFICATIONREPORT_DEFINED")
[
local,
object,
uuid(c733e4a7-576e-11d0-b28c-00c04fd7cd22),
pointer_default(unique)
]
interface INotificationReport : IUnknown
{
//typedef [unique] INotificationReport *LPNOTIFICATIONREPORT;
HRESULT DeliverUpdate(
// the reply notification object itself
[in] LPNOTIFICATION pNotification,
// not completion report allowed here
[in] DELIVERMODE deliverMode,
// the cookie of the object the notification is targeted too
[in] DWORD dwReserved
);
// get the original notification this report objet belongs too
HRESULT GetOriginalNotification(
[out] LPNOTIFICATION *ppNotification
);
// get the status of the the notification in progress
// such as pending notification etc.
HRESULT GetNotificationStatus(
// what kind of status
[in] DWORD dwStatusIn,
// flags if update notification is pending etc.
[out] DWORD *pdwStatusOut,
[in] DWORD dwReserved
);
}
cpp_quote("#endif")
///
cpp_quote("#ifndef _NOTIFICAITON_HELPER_APIS_")
cpp_quote("#define _NOTIFICAITON_HELPER_APIS_")
cpp_quote("// ")
cpp_quote("// HELPER APIS ")
cpp_quote("// ")
cpp_quote("STDAPI NotfDeliverNotification(REFNOTIFICATIONTYPE rNotificationType ")
cpp_quote(" ,REFCLSID rClsidDest ")
cpp_quote(" ,DELIVERMODE deliverMode ")
cpp_quote(" ,DWORD dwReserved ")
cpp_quote(" ); ")
cpp_quote(" ")
cpp_quote(" ")
cpp_quote("#endif")