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