PiProcessSetDeviceProblem
INT64 __fastcall PiProcessSetDeviceProblem(_PNP_DEVICE_ACTION_ENTRY *Request){
_DEVICE_OBJECT *DeviceObject;
_DWORD *RequestArgument;
__int64 v3;
unsigned int v4;
unsigned int v5;
unsigned int v6;
int v7;
int v8;
unsigned int v9;
int v10;
int v11;
PVOID P;
DeviceObject = Request->DeviceObject;
RequestArgument = (_DWORD *)Request->RequestArgument;
P = 0i64;
v3 = *(_QWORD *)(*((_QWORD *)DeviceObject + 39) + 40i64);
if( (unsigned int)(*(_DWORD *)(v3 + 300) - 787) <= 1 )
{
v4 = -1073741738;
}
else
{
v4 = 0;
PiPnpRtlBeginOperation((__int64 **)&P);
v5 = RequestArgument[5];
v6 = RequestArgument[6];
v7 = (v5 >> 18) & 1 | 4;
if( (v5 & 0x100) == 0 )
v7 = (RequestArgument[5] >> 18) & 1;
v8 = (RequestArgument[5] >> 1) & 0x4000 | 0x2000;
if( (v5 & 0x400) == 0 )
v8 = (RequestArgument[5] >> 1) & 0x4000;
v9 = v8;
if( v6 == 14 )
{
v10 = *(_DWORD *)(v3 + 300);
if( v10 != 786 && v10 != 770 )
v9 = v8 & 0xFFFFDFFF;
v7 |= 4u;
}
if( !v9 )
{
v11 = 0;
goto LABEL_15;
}
if( ((*(_DWORD *)(v3 + 300) - 770) & 0xFFFFFFEF) == 0
&& ((v9 & 0x4000) != 0 || v6 < 0x3A && !(unsigned int)PipIsProblemReadonly(v3, v6)) )
{
PipSetDevNodeProblem(v3, v6, RequestArgument[8]);
v11 = v9;
LABEL_15:
PipSetDevNodeFlags(v3, v11);
PipSetDevNodeUserFlags(v3, v7);
goto LABEL_16;
}
v4 = -1073741584;
}
LABEL_16:
if( (RequestArgument[7] & 1) != 0 )
ExFreePoolWithTag(RequestArgument, 0x55706E50u);
if( P )
PiPnpRtlEndOperation(P);
return v4;
}Referenced by:
PnpDeviceActionWorker