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.
 
 
 
 
 
 

193 lines
6.4 KiB

/*++
Copyright (c) 1997-1999 Microsoft Corporation
Module Name:
dcapi.c
Abstract:
WMI data consumer api set
Author:
16-Jan-1997 AlanWar
Revision History:
--*/
#include "wmiump.h"
#ifndef MEMPHIS
#include <aclapi.h>
#endif
ULONG
WMIAPI
EtwNotificationRegistrationA(
IN LPGUID Guid,
IN BOOLEAN Enable,
IN PVOID DeliveryInfo,
IN ULONG_PTR DeliveryContext,
IN ULONG Flags
)
/*+++
Routine Description:
ANSI thunk to NotificationRegistration
Return Value:
Returns ERROR_SUCCESS or an error code
---*/
{
return(EtwpNotificationRegistration(Guid,
Enable,
DeliveryInfo,
DeliveryContext,
0,
Flags,
TRUE));
}
ULONG
WMIAPI
EtwNotificationRegistrationW(
IN LPGUID Guid,
IN BOOLEAN Enable,
IN PVOID DeliveryInfo,
IN ULONG_PTR DeliveryContext,
IN ULONG Flags
)
/*+++
Routine Description:
This routine allows a data consumer to register or unregister for
notification of events fired by WMI data providers. Notifications are
delivered via callbackor via a posted meesage to a window.
Arguments:
Guid is pointer to the guid whose events are being registered for
Enable is TRUE if enabling notifications else FALSE. If FALSE the
Destination and DestinationInformation parameters are ignored.
DeliveryInfo has the callback function pointer or window handle to which
to deliver the notifications for the guid.
DeliveryContext has a context value or additional information to use
when delivering the notification.
Flags are a set of flags that define how the notification is delivered.
DeliveryInfo and DeliveryContext have different meanings depending
upon the value in Flags:
NOTIFICATION_WINDOW_HANDLE is set when notifications for the guid
are to be delivered by posting a message to the window handle
passed in DeliveryInfo. The message posted is the value that
is returned from the call to
RegisterWindowMessage(WMINOTIFICATIONWINDOWMESSAGE) with the
wParam set to the pointer to the Wnode containing the notification
and lParam set to the context value passed in DeliveryContext.
The caller MUST free the Wnode passed in wParam by calling
WMIFreeBuffer.
NOTIFICATION_CALLBACK_DIRECT is set when notifications for the
guid are to be delivered by direct callback. Whenever a
notification arrives WMI creates a new thread dedicated to
calling the callback function with the notification. This
mechanism provides the shortest latency from notification firing
to notification delivery, although it is the most expensive
mechanism. The callback function pointer is passed in DeliveryInfo
and must conform to the prototype described by the type
NOTIFICATIONCALLBACK. The context value passed in the callback
is specified by the DeliveryContext parameter. WMI does not
serialize calling the callback function so it must be reentrant.
NOTIFICATION_CALLBACK_QUEUED is set when notifications for the
guid are to be delivered by a queued callback. Whenever a
notification arrives WMI places it at the end of an internal
queue. A single thread monitors this queue and calls the callback
function serially for each notification in the queue. This
mechanism provides low overhead for event delivery, however
notification delivery can be delayed if the callback function
for an earlier notification does not complete quickly.
The callback function pointer is passed in DeliveryInfo
and must conform to the prototype described by the type
NOTIFICATIONCALLBACK. The context value passed in the callback
is specified by the DeliveryContext parameter. WMI does
serialize calling the callback function so it need not be
reentrant provided it is not also used for
NOTIFICATION_CALLBACK_DIRECT notififications. NOTE THAT THIS
IS NOT YET IMPLEMENTED.
NOTIFICATION_TRACE_FLAG is set when the caller wishes to enable
trace logging in the data provider for the guid. DeliveryInfo
specifies the trace logger handle to be passed to the data
provider. DeliveryContext is not used. No notifications are
generated to the caller when this flag is set.
Note that all of the above flags are mutually exclusive.
Return Value:
Returns ERROR_SUCCESS or an error code
---*/
{
return(EtwpNotificationRegistration(Guid,
Enable,
DeliveryInfo,
DeliveryContext,
0,
Flags,
FALSE));
}
ULONG
WMIAPI
EtwReceiveNotificationsW(
IN ULONG HandleCount,
IN HANDLE *HandleList,
IN NOTIFICATIONCALLBACK Callback,
IN ULONG_PTR DeliveryContext
)
{
return(EtwpReceiveNotifications(HandleCount,
HandleList,
Callback,
DeliveryContext,
FALSE,
RECEIVE_ACTION_NONE,
NULL,
NULL));
}
ULONG
WMIAPI
EtwReceiveNotificationsA(
IN ULONG HandleCount,
IN HANDLE *HandleList,
IN NOTIFICATIONCALLBACK Callback,
IN ULONG_PTR DeliveryContext
)
{
return(EtwpReceiveNotifications(HandleCount,
HandleList,
Callback,
DeliveryContext,
TRUE,
RECEIVE_ACTION_NONE,
NULL,
NULL));
}