PipProcessRestartPhase2

__int64 __fastcall PipProcessRestartPhase2(__int64 a1, __int64 a2, __int64 a3){
  int v4; 
  int v5; 
  INT64 v6; 
  if( (byte_140C130BB & 0x10) != 0 )
    McTemplateK0dz_EtwWriteTransfer(a1, &KMPnPEvt_ProcessDeviceRestart_Start, a3, 2i64, *(const WCHAR **)(a1 + 48));
  v4 = *(_DWORD *)(a1 + 392);
  if( v4 >= 0 )
  {
    PipSetDevNodeState((_DEVICE_NODE *)a1, DeviceNodeStarted, (_PNP_DEVNODE_STATE *)a3);
    if( (*(_DWORD *)(a1 + 704) & 0x20) != 0 )
    {
      PoFxIdleDevice(*(DEVICE_OBJECT **)(a1 + 32));
      *(_DWORD *)(a1 + 704) &= ~0x20u;
    }
    PnpStartedDeviceNodeDependencyCheck(a1);
  }
  else
  {
    if( v4 == -1073741102 )
    {
      v5 = 14;
      PnpUpdateRebootRequiredReason(*(_QWORD *)(a1 + 48), a2, 0x80000000i64);
    }
    else
    {
      v5 = 10;
    }
    PnpRequestDeviceRemoval(a1, 0, v5, v4);
    if( *(_DWORD *)(a1 + 568) )
      IoRequestDeviceEject(*(_DEVICE_OBJECT **)(a1 + 32));
  }
  if( (byte_140C130BB & 0x10) != 0 )
    McTemplateK0dz_EtwWriteTransfer(
      *(_QWORD *)(a1 + 48),
      &KMPnPEvt_ProcessDeviceRestart_Stop,
      v6,
      2i64,
      *(const WCHAR **)(a1 + 48));
  return(unsigned int)v4;
}

Referenced by:

PipProcessDevNodeTree