PiProcessQueryDeviceState
INT64 __stdcall PiProcessQueryDeviceState(PDEVICE_OBJECT DeviceObject){
__int64 v2;
__int16 v3;
int v4;
unsigned int updated;
PVOID v6;
int v8;
UINT64 DeviceState;
PVOID P;
LODWORD(DeviceState) = 0;
P = 0i64;
v2 = *(_QWORD *)(*((_QWORD *)DeviceObject + 39) + 40i64);
PiPnpRtlBeginOperation((__int64 **)&P);
PoFxActivateDevice(*(DEVICE_OBJECT **)(v2 + 32));
*(_DWORD *)(v2 + 704) |= 0x100u;
if( IopQueryDeviceState(DeviceObject, &DeviceState) < 0 )
{
updated = 0;
goto LABEL_16;
}
v3 = DeviceState;
if( (DeviceState & 2) != 0 )
PipSetDevNodeUserFlags(v2, 2);
else
PipClearDevNodeUserFlags(v2, 2);
if( (v3 & 0x40) != 0 )
PipSetDevNodeUserFlags(v2, 64);
else
PipClearDevNodeUserFlags(v2, 64);
v4 = *(_DWORD *)(v2 + 400) & 8;
if( (v3 & 0x20) != 0 )
{
if( !v4 )
{
PipSetDevNodeUserFlags(v2, 8);
IopIncDisableableDepends(v2);
}
}
else if( v4 )
{
IopDecDisableableDepends((_DEVICE_NODE *)v2);
PipClearDevNodeUserFlags(v2, 8);
}
updated = PiUpdateGuestAssignedState(v2, HIBYTE(v3) & 1);
if( ((v3 & 9) != 0 || (v3 & 4) != 0 && (v3 & 0x10) == 0) && PnpCheckForActiveDependencies(v2, 3u) )
{
v8 = 51;
LABEL_30:
PnpRequestDeviceRemoval(v2, 0, v8, 0);
updated = -1073741823;
goto LABEL_16;
}
if( (v3 & 9) != 0 )
{
v8 = (v3 & 1) != 0 ? 29 : 24;
goto LABEL_30;
}
if( (v3 & 0x10) != 0 )
{
IopResourceRequirementsChanged(DeviceObject, (v3 & 4) != 0);
goto LABEL_16;
}
if( (v3 & 4) != 0 )
{
v8 = 43;
goto LABEL_30;
}
if( (v3 & 0x80u) != 0 )
updated = PiUpdateDeviceResourceLists((_QWORD *)v2);
LABEL_16:
PoFxIdleDevice(*(DEVICE_OBJECT **)(v2 + 32));
v6 = P;
*(_DWORD *)(v2 + 704) &= ~0x100u;
if( v6 )
PiPnpRtlEndOperation(v6);
return updated;
}Referenced by:
PiProcessRequeryDeviceState
PipProcessStartPhase3