PnpLockDeviceActionQueue
__int64 PnpLockDeviceActionQueue(){
unsigned __int64 v0;
__int64 result;
while( 1 )
{
PpDevNodeLockTree(PPL_TREEOP_ALLOW_READS);
v0 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)&PnpReplaceEvent + 50);
if( !*(&PnpReplaceEvent + 289) )
break;
KxReleaseSpinLock((UINT64 *)&PnpReplaceEvent + 50);
__writecr8(v0);
PpDevNodeUnlockTree(PPL_TREEOP_ALLOW_READS);
KeWaitForSingleObject((UINT64)&PnpReplaceEvent + 352, 0, 0, 0, 0i64);
}
*(&PnpReplaceEvent + 289) = 1;
KeResetEvent((_KEVENT *)((char *)&PnpReplaceEvent + 352));
KxReleaseSpinLock((UINT64 *)&PnpReplaceEvent + 50);
result = (unsigned int)KiIrqlFlags;
__writecr8(v0);
return result;
}Referenced by:
IoBuildPoDeviceNotifyList
IoControlPnpDeviceActionQueue
IopInitializeBootDrivers
PipInitializeCoreDriversByGroup