PopBuildDeviceNotifyList
VOID __fastcall PopBuildDeviceNotifyList(_PO_DEVICE_NOTIFY_ORDER *Order){
struct _KEVENT Event;
INT64 result[8];
struct _KDPC Dpc;
memset((INT64)&Dpc, 0i64);
memset(&Event, 0, sizeof(Event));
memset((INT64)result, 0i64);
KeInitializeEvent(&Event, SynchronizationEvent, 0);
KeInitializeTimerEx((PKTIMER)result, NotificationTimer);
KeInitializeDpc(&Dpc, (PKDEFERRED_ROUTINE)PopBuildDeviceNotifyListWatchdog, &Event);
if( (_DWORD)PopWatchdogSleepTimeout )
KiSetTimerEx((_KTIMER *)result, (_LARGE_INTEGER)(-10000000i64 * (int)PopWatchdogSleepTimeout), 0i64, 0, &Dpc);
PopDiagTraceEventNoPayload((EVENT_DESCRIPTOR *)&POP_ETW_EVENT_BUILDNOTIFYLIST);
IoBuildPoDeviceNotifyList(Order);
PopDiagTraceEventNoPayload((EVENT_DESCRIPTOR *)&POP_ETW_EVENT_BUILDNOTIFYLIST_END);
if( (_DWORD)PopWatchdogSleepTimeout )
{
if( !KeCancelTimer((PKTIMER)result) )
KeWaitForSingleObject(&Event, Executive, 0, 0, 0i64);
}
}Referenced by:
PoInitializeBroadcast
PopGracefulShutdown