PipRestoreDevNodeState

char __fastcall PipRestoreDevNodeState(__int64 a1, UINT64 a2){
  unsigned __int8 v3; 
  unsigned __int64 v4; 
  BOOL v5; 
  int IsDevNodeDNStarted; 
  __int64 v7; 
  int v8; 
  int v9; 
  int v10; 
  int v11; 
  __int64 v12; 
  __int64 v13; 
  __int64 v14; 
  KeAcquireSpinLockRaiseToDpc(&PnpSpinLock, a2);
  v4 = v3;
  v5 = PipAreDriversLoadedWorker(*(unsigned int *)(a1 + 300), *(unsigned int *)(a1 + 304));
  IsDevNodeDNStarted = PipIsDevNodeDNStarted((_DEVICE_NODE *)a1);
  v7 = *(unsigned int *)(a1 + 388);
  v8 = IsDevNodeDNStarted;
  *(_DWORD *)(a1 + 300) = v9;
  *(_DWORD *)(a1 + 4 * v7 + 308) = v10;
  *(_DWORD *)(a1 + 388) = (*(_DWORD *)(a1 + 388) + 1) % 0x14u;
  KxReleaseSpinLock(&PnpSpinLock);
  LOBYTE(v11) = KiIrqlFlags;
  __writecr8(v4);
  if( *(_QWORD *)(a1 + 48) )
  {
    if( PipAreDriversLoadedWorker(*(unsigned int *)(a1 + 300), *(unsigned int *)(a1 + 304)) != v5
      || (v11 = PipIsDevNodeDNStarted((_DEVICE_NODE *)a1), v11 != v8) )
    {
      PnpRaiseNtPlugPlayDevicePropertyChangeEvent(v12, v13, 11);
      v11 = PipIsDevNodeDNStarted((_DEVICE_NODE *)a1);
      if( v11 != v8 )
        LOBYTE(v11) = PnpRaiseNtPlugPlayDevicePropertyChangeEvent(v14, *(_QWORD *)(a1 + 48), 26);
    }
  }
  return v11;
}

Referenced by:

PnpCancelStopDeviceNode
PnpDeleteLockedDeviceNode
PnpRemoveLockedDeviceNode
PnpRequestDeviceRemovalWorker
PnpSurpriseRemoveLockedDeviceNode