PnpUnlockDeviceActionQueue
void PnpUnlockDeviceActionQueue(){
unsigned __int64 v0;
v0 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)&PnpReplaceEvent + 50);
if( (_UNKNOWN *)*(&PnpReplaceEvent + 48) == (_UNKNOWN *)((char *)&PnpReplaceEvent + 384) )
{
*(&PnpReplaceEvent + 289) = 0;
KeSetEvent((PRKEVENT)((char *)&PnpReplaceEvent + 352), 0, 0);
}
else
{
*(&PnpReplaceEvent + 43) = 0i64;
*(&PnpReplaceEvent + 40) = 0i64;
*(&PnpReplaceEvent + 42) = PnpDeviceActionWorker;
ExQueueWorkItem((PWORK_QUEUE_ITEM)&PnpReplaceEvent + 10, DelayedWorkQueue);
}
KxReleaseSpinLock((UINT64 *)&PnpReplaceEvent + 50);
__writecr8(v0);
PpDevNodeUnlockTree(PPL_TREEOP_ALLOW_READS);
}Referenced by:
IoControlPnpDeviceActionQueue
IoFreePoDeviceNotifyList
IopInitializeBootDrivers
PipInitializeCoreDriversByGroup