VfPnpVerifyIrpStackUpward
VOID __stdcall VfPnpVerifyIrpStackUpward(
_IOV_REQUEST_PACKET *IovPacket,
_IO_STACK_LOCATION *IrpSp,
_IOV_STACK_LOCATION *RequestHeadLocationData,
_IOV_STACK_LOCATION *StackLocationData,
UINT64 IsNewlyCompleted,
UINT64 RequestFinalized){
_IRP *v10;
__int64 v11;
VOID *CallerAddress;
int v13;
int v14;
int v15;
_VF_ERROR_ID v16;
VOID *LowerDeviceObjectWithTag;
_DEVICE_OBJECT *DeviceObject;
_DEVICE_OBJECT *v19;
_DEVICE_OBJECT *v20;
int IsPdo;
const VOID *v22;
UINT64 v23;
if( !(unsigned int)IovUtilIsWdmStack(IrpSp->DeviceObject) )
return;
v10 = *(_IRP **)IovPacket;
v11 = *((_QWORD *)IovPacket + 30);
CallerAddress = (VOID *)*((_QWORD *)StackLocationData + 5);
v13 = *(_DWORD *)(*(_QWORD *)IovPacket + 48i64);
if( !(_DWORD)IsNewlyCompleted )
goto LABEL_16;
v14 = IovPacket[14] & 0x20;
v15 = StackLocationData[1] & 0x10000000;
if( StackLocationData[1] < 0 )
goto LABEL_14;
if( v15 )
{
LABEL_15:
LODWORD(v23) = 0;
ViPnpVerifyMinorWasProcessedProperly(
v10,
IrpSp,
VF_DEVOBJ_PDO,
(VI_PNP_HOW_PROCESSED)((v13 != -1073741637) + 1),
CallerAddress,
v23);
goto LABEL_16;
}
if( IrpSp->MinorFunction == 8 )
goto LABEL_14;
if( v14 )
{
v16 = 557;
goto LABEL_24;
}
if( (int)(v13 + 0x80000000) >= 0 && v13 != -1073741637 )
goto LABEL_14;
if( VfIoSwitchedOffNoReboot )
goto LABEL_16;
if( v13 >= 0 )
{
v16 = 558;
LABEL_24:
ViErrorReport1(v16, *((VOID **)StackLocationData + 5), v10);
goto LABEL_16;
}
if( v13 == -1073741637 )
{
ViErrorReport1(559, *((VOID **)StackLocationData + 5), v10);
LABEL_14:
if( v15 )
goto LABEL_15;
LABEL_16:
if( v13 == -1073741637
&& (RequestHeadLocationData[1] & 0x2000000) == 0
&& RequestHeadLocationData[24] != -1073741637 )
{
ViErrorReport1(534, CallerAddress, v10);
RequestHeadLocationData[1] |= 0x2000000u;
}
}
if( IrpSp->MinorFunction == 23 )
{
LowerDeviceObjectWithTag = IovUtilGetLowerDeviceObjectWithTag((INT64)IrpSp->DeviceObject);
if( LowerDeviceObjectWithTag )
{
ObfDereferenceObjectWithTag(LowerDeviceObjectWithTag, 0x49667256ui64);
}
else
{
DeviceObject = IrpSp->DeviceObject;
LODWORD(v19) = IovUtilGetBottomDeviceObjectWithTag(DeviceObject);
v20 = v19;
if( v19 == DeviceObject )
IsPdo = PpvUtilIsPdo(v19);
else
IsPdo = 0;
ObfDereferenceObjectWithTag(v20, 0x49667256ui64);
if( !IsPdo )
ViErrorReport10(577, CallerAddress, *(const VOID **)(v11 + 64), IrpSp->DeviceObject);
}
if( (unsigned int)IovUtilIsDeviceObjectMarked(IrpSp->DeviceObject, 0) )
ViErrorReport10(578, CallerAddress, *(const VOID **)(v11 + 64), v22);
}
}Referenced by:
No references.