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