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