PiProcessQueryDeviceState
NTSTATUS __stdcall PiProcessQueryDeviceState(_DEVICE_OBJECT *DeviceObject){
_DEVICE_NODE *DeviceNode;
UINT64 v3;
__int16 v4;
int v5;
NTSTATUS updated;
HPNPOPCTX *v7;
int v9;
unsigned int DeviceState;
HPNPOPCTX *hPnpOpCtx;
DeviceState = 0;
hPnpOpCtx = 0i64;
DeviceNode = (_DEVICE_NODE *)DeviceObject->DeviceObjectExtension->DeviceNode;
PiPnpRtlBeginOperation(&hPnpOpCtx);
PoFxActivateDevice(DeviceNode->PhysicalDeviceObject);
DeviceNode->StateFlags |= 0x100u;
if( IopQueryDeviceState(DeviceObject, &DeviceState, v3) < 0 )
{
updated = 0;
goto LABEL_16;
}
v4 = DeviceState;
if( (DeviceState & 2) != 0 )
PipSetDevNodeUserFlags(DeviceNode, 2ui64);
else
PipClearDevNodeUserFlags(DeviceNode, 2ui64);
if( (v4 & 0x40) != 0 )
PipSetDevNodeUserFlags(DeviceNode, 0x40ui64);
else
PipClearDevNodeUserFlags(DeviceNode, 0x40ui64);
v5 = DeviceNode->UserFlags & 8;
if( (v4 & 0x20) != 0 )
{
if( !v5 )
{
PipSetDevNodeUserFlags(DeviceNode, 8ui64);
IopIncDisableableDepends(DeviceNode);
}
}
else if( v5 )
{
IopDecDisableableDepends(DeviceNode);
PipClearDevNodeUserFlags(DeviceNode, 8ui64);
}
updated = PiUpdateGuestAssignedState(DeviceNode, HIBYTE(v4) & 1);
if( ((v4 & 9) != 0 || (v4 & 4) != 0 && (v4 & 0x10) == 0) && PnpCheckForActiveDependencies(DeviceNode, 3ui64) )
{
v9 = 51;
LABEL_30:
PnpRequestDeviceRemoval((__int64)DeviceNode, 0, v9, 0);
updated = -1073741823;
goto LABEL_16;
}
if( (v4 & 9) != 0 )
{
v9 = (v4 & 1) != 0 ? 29 : 24;
goto LABEL_30;
}
if( (v4 & 0x10) != 0 )
{
IopResourceRequirementsChanged(DeviceObject, (v4 & 4) != 0);
goto LABEL_16;
}
if( (v4 & 4) != 0 )
{
v9 = 43;
goto LABEL_30;
}
if( (v4 & 0x80u) != 0 )
updated = PiUpdateDeviceResourceLists(DeviceNode);
LABEL_16:
PoFxIdleDevice(DeviceNode->PhysicalDeviceObject);
v7 = hPnpOpCtx;
DeviceNode->StateFlags &= ~0x100u;
if( v7 )
PiPnpRtlEndOperation(v7);
return updated;
}Referenced by:
PiProcessRequeryDeviceState
PipProcessStartPhase3