PipProcessRestartPhase2

NTSTATUS __stdcall PipProcessRestartPhase2(_DEVICE_NODE *DeviceNode){
  __int64 v1; 
  __int64 v2; 
  int CompletionStatus; 
  int v5; 
  __int64 v6; 

  if( (byte_140C130BB & 0x10) != 0 )
    McTemplateK0dz_EtwWriteTransfer(
      (__int64)DeviceNode,
      (const _EVENT_DESCRIPTOR *)KMPnPEvt_ProcessDeviceRestart_Start,
      v2,
      2,
      DeviceNode->InstancePath.Buffer);
  CompletionStatus = DeviceNode->CompletionStatus;
  if( CompletionStatus >= 0 )
  {
    PipSetDevNodeState(DeviceNode, DeviceNodeStarted);
    if( (DeviceNode->StateFlags & 0x20) != 0 )
    {
      PoFxIdleDevice(DeviceNode->PhysicalDeviceObject);
      DeviceNode->StateFlags &= ~0x20u;
    }
    PnpStartedDeviceNodeDependencyCheck(DeviceNode);
  }
  else
  {
    if( CompletionStatus == -1073741102 )
    {
      v5 = 14;
      PnpUpdateRebootRequiredReason((INT64)DeviceNode->InstancePath.Buffer, v1, 0x80000000i64);
    }
    else
    {
      v5 = 10;
    }
    PnpRequestDeviceRemoval((__int64)DeviceNode, 0, v5, CompletionStatus);
    if( DeviceNode->DockInfo.DockStatus )
      IoRequestDeviceEject((UINT64)DeviceNode->PhysicalDeviceObject);
  }
  if( (byte_140C130BB & 0x10) != 0 )
    McTemplateK0dz_EtwWriteTransfer(
      (__int64)DeviceNode->InstancePath.Buffer,
      (const _EVENT_DESCRIPTOR *)KMPnPEvt_ProcessDeviceRestart_Stop,
      v6,
      2,
      DeviceNode->InstancePath.Buffer);
  return CompletionStatus;
}

Referenced by:

PipProcessDevNodeTree