ViGenericVerifyIrpStackDownward
VOID __stdcall ViGenericVerifyIrpStackDownward(
_IOV_REQUEST_PACKET *IovPacket,
_DEVICE_OBJECT *DeviceObject,
_IO_STACK_LOCATION *IrpLastSp,
_IO_STACK_LOCATION *IrpSp,
_IOV_STACK_LOCATION *RequestHeadLocationData,
_IOV_STACK_LOCATION *StackLocationData,
VOID *CallerAddress){
const VOID *v7;
__int64 v9;
unsigned int v11;
NTSTATUS IsNewRequest;
unsigned __int8 MajorFunction;
NTSTATUS v15;
UINT64 v16;
_IOV_STACK_LOCATION v17;
_VF_ERROR_ID v18;
NTSTATUS v19;
int v20;
_IOV_STACK_LOCATION v21;
__int64 v22;
__int64 v23;
INT8 pszDest[96];
v7 = *(const VOID **)IovPacket;
v9 = *((_QWORD *)IovPacket + 30);
v11 = *(_DWORD *)(*(_QWORD *)IovPacket + 48i64);
v21 = RequestHeadLocationData[24];
v23 = *(_QWORD *)(*(_QWORD *)IovPacket + 56i64);
v22 = *((_QWORD *)RequestHeadLocationData + 13);
v20 = RequestHeadLocationData[1] & 0x8000000;
IsNewRequest = VfMajorIsNewRequest(IrpLastSp, IrpSp);
MajorFunction = IrpSp->MajorFunction;
v15 = IsNewRequest;
v19 = IsNewRequest;
if( (IrpSp->MajorFunction < 3u
|| MajorFunction > 4u && (MajorFunction <= 0xDu || MajorFunction > 0xFu && MajorFunction != 22))
&& *(_DWORD *)(v9 + 56) == 2 )
{
v16 = *((unsigned __int8 *)IovPacket + 60);
if( (unsigned __int8)v16 >= 2u && (IovPacket[14] & 0x2000000) == 0 )
{
ViErrorDisplayDescription(769);
if( RtlStringCbPrintfA(pszDest, 0x5Bui64, (INT8 *)"CulpritAddress = %p, Irp = %p, IRQL = %u.\n") >= 0 )
VfUtilDbgPrint(pszDest);
ViErrorFinishReport(769, CallerAddress, (UINT64)v7, v16);
IovPacket[14] |= 0x2000000u;
v15 = v19;
}
}
if( IrpLastSp )
{
v17 = RequestHeadLocationData[1];
if( (IovPacket[14] & 0x20) != 0 && (v17 & 0x1000000) == 0 )
{
if( v15 && !v20 )
{
RequestHeadLocationData[1] = v17 | 0x1000000;
ViErrorReport1(530, CallerAddress, v7);
}
if( v11 != v21 )
{
RequestHeadLocationData[1] |= 0x1000000u;
v18 = 571;
if( IrpSp->MinorFunction != 0xFF )
v18 = 531;
ViErrorReport1(v18, CallerAddress, v7);
}
if( v23 != v22 )
{
RequestHeadLocationData[1] |= 0x1000000u;
ViErrorReport1(532, CallerAddress, v7);
}
}
if( !VfMajorIsValidIrpStatus(IrpSp, v11) )
ViErrorReport6(768, CallerAddress, v7, v11);
}
}Referenced by:
No references.