Jungo WinDriver  
Official Documentation

◆ WDC_EventRegister()

DWORD DLLCALLCONV WDC_EventRegister ( _In_ WDC_DEVICE_HANDLE  hDev,
_In_ DWORD  dwActions,
_In_ EVENT_HANDLER  funcEventHandler,
_In_ PVOID  pData,
_In_ BOOL  fUseKP 
)

Registers the application to receive Plug-and-Play and power management events notifications for the device.


Plug-and-play and power management events

Parameters
[in]hDevHandle to a Plug-and-Play WDC device, returned by WDC_PciDeviceOpen()
[in]dwActionsA bit mask of flags indicating which events to register to: Plug-and-Play events: WD_INSERT Device inserted WD_REMOVE Device removed Device power state change events: WD_POWER_CHANGED_D0 Full power WD_POWER_CHANGED_D1 Low sleep WD_POWER_CHANGED_D2 Medium sleep WD_POWER_CHANGED_D3 Full sleep WD_POWER_SYSTEM_WORKING Fully on Systems power state: WD_POWER_SYSTEM_SLEEPING1 Fully on but sleeping WD_POWER_SYSTEM_SLEEPING2 CPU off, memory on, PCI on WD_POWER_SYSTEM_SLEEPING3 CPU off, Memory is in refresh, PCI on aux power WD_POWER_SYSTEM_HIBERNATE OS saves context before shutdown WD_POWER_SYSTEM_SHUTDOWN No context saved
[in]funcEventHandlerA user-mode event handler callback function, which will be called when an event for which the caller registered to receive notifications (see dwActions) occurs. (The prototype of the event handler EVENT_HANDLER is defined in windrvr_events.h.)
[in]pDataData for the user-mode event handler callback routine (funcEventHandler)
[in]fUseKPIf TRUE When an event for which the caller registered to receive notifications (dwActions) occurs, the device's Kernel PlugIn driver's KP_Event function will be called. (The Kernel PlugIn driver to be used for the device is passed to WDC_xxxDeviceOpen() and stored in the WDC device structure). If this function returns TRUE, the user-mode events handler callback function (funcEventHandler) will be called when the kernel-mode event processing is completed. If FALSE When an event for which the caller registered to receive notifications (dwActions) occurs, the user-mode events handler callback function will be called.
Returns
Returns WD_STATUS_SUCCESS (0) on success, or an appropriate error code otherwise.
//WinDriver Callback functions must use DLLCALLCONV macro
static void DLLCALLCONV EventHandlerExample(WDC_DEVICE_HANDLE hDev,
DWORD dwAction)
{
printf("\nReceived event notification (device handle 0x%p): ", hDev);
switch (dwAction)
{
case WD_INSERT:
printf("WD_INSERT\n");
break;
case WD_REMOVE:
printf("WD_REMOVE\n");
break;
printf("WD_POWER_CHANGED_D0\n");
break;
printf("WD_POWER_CHANGED_D1\n");
break;
printf("WD_POWER_CHANGED_D2\n");
break;
printf("WD_POWER_CHANGED_D3\n");
break;
printf("WD_POWER_SYSTEM_WORKING\n");
break;
printf("WD_POWER_SYSTEM_SLEEPING1\n");
break;
printf("WD_POWER_SYSTEM_SLEEPING2\n");
break;
printf("WD_POWER_SYSTEM_SLEEPING3\n");
break;
printf("WD_POWER_SYSTEM_HIBERNATE\n");
break;
printf("WD_POWER_SYSTEM_SHUTDOWN\n");
break;
default:
printf("0x%lx\n", dwAction);
break;
}
}
DWORD EventRegisterExample(WDC_DEVICE_HANDLE hDev)
{
DWORD dwStatus;
DWORD dwActions = WD_ACTIONS_ALL;
/* Check whether the event is already registered */
{
}
/* Register the event */
dwStatus = WDC_EventRegister(hDev, dwActions, EventHandlerExample, hDev,
WDC_IS_KP(hDev));
if (WD_STATUS_SUCCESS != dwStatus)
{
printf("Failed to register events. Error 0x%lx - %s\n",
dwStatus, Stat2Str(dwStatus));
return dwStatus;
}
printf("Events registered\n");
// ...
// Some more code
// ...
/* Cleanup */
dwStatus = WDC_EventUnregister(hDev);
return dwStatus;
}
const char *DLLCALLCONV Stat2Str(_In_ DWORD dwStatus)
Retrieves the status string that corresponds to a status code.
#define WDC_IS_KP(pDev)
Does the device use a Kernel PlugIn driver.
Definition: wdc_defs.h:105
DWORD DLLCALLCONV WDC_EventRegister(_In_ WDC_DEVICE_HANDLE hDev, _In_ DWORD dwActions, _In_ EVENT_HANDLER funcEventHandler, _In_ PVOID pData, _In_ BOOL fUseKP)
Registers the application to receive Plug-and-Play and power management events notifications for the ...
BOOL DLLCALLCONV WDC_EventIsRegistered(_In_ WDC_DEVICE_HANDLE hDev)
Checks if the application is currently registered to receive Plug-and-Play and power management notif...
DWORD DLLCALLCONV WDC_EventUnregister(_In_ WDC_DEVICE_HANDLE hDev)
Unregisters an application from a receiving Plug-and-Play and power management notifications for a de...
void * WDC_DEVICE_HANDLE
Handle to device information struct.
Definition: wdc_lib.h:33
#define WD_ACTIONS_ALL
Definition: windrvr.h:1486
@ WD_STATUS_SUCCESS
[0] Operation completed successfully
Definition: windrvr.h:1061
@ WD_OPERATION_ALREADY_DONE
[0x20000011] Operation Already Done.
Definition: windrvr.h:1141
#define DLLCALLCONV
Definition: windrvr.h:32
@ WD_POWER_SYSTEM_WORKING
Definition: windrvr.h:1464
@ WD_POWER_SYSTEM_SLEEPING3
Definition: windrvr.h:1467
@ WD_POWER_SYSTEM_HIBERNATE
Definition: windrvr.h:1468
@ WD_POWER_CHANGED_D0
Power states for the power management.
Definition: windrvr.h:1459
@ WD_POWER_SYSTEM_SLEEPING2
Definition: windrvr.h:1466
@ WD_POWER_CHANGED_D3
Definition: windrvr.h:1463
@ WD_POWER_SYSTEM_SHUTDOWN
Definition: windrvr.h:1469
@ WD_POWER_CHANGED_D2
Definition: windrvr.h:1462
@ WD_INSERT
Definition: windrvr.h:1456
@ WD_POWER_CHANGED_D1
Definition: windrvr.h:1461
@ WD_POWER_SYSTEM_SLEEPING1
Definition: windrvr.h:1465
@ WD_REMOVE
Definition: windrvr.h:1457