MdlInvariantPostProcessing1
VOID __stdcall MdlInvariantPostProcessing1(_IOV_REQUEST_PACKET *IovPacket, ULONG_PTR Irp, _IO_STACK_LOCATION *IrpSp){
int v4;
_MDL *v5;
__int64 v7;
char v8;
__int64 v9;
_MDL_INFO *MdlInfo;
__int64 v11;
VOID *v12;
__int64 v13;
__int64 v14;
unsigned __int64 v15;
unsigned __int8 MajorFunction;
UINT64 v17;
ULONG_PTR v18;
_CRC_CTRL_TABLE *BugCheckOnFailure;
_CRC_CTRL_TABLE *BugCheckOnFailurea;
UINT64 Priority;
v4 = 0;
v5 = *(_MDL **)(*(_QWORD *)&Irp + 8i64);
v7 = *(_QWORD *)&Irp;
if( v5->Next || KeGetCurrentIrql() < 2u && v5->ByteCount == -1 )
return;
v8 = *(_BYTE *)(*(_QWORD *)&Irp + 67i64);
if( (MmVerifierData & 0x2000) != 0 && (MmVerifierData & 0x4000) == 0 && v8 != *(_BYTE *)(v7 + 66) )
return;
if( MmMdlPageContentsState(v5, MmMdlPageContentsQuery) != MmMdlPageContentsInvariant )
return;
v9 = *((_QWORD *)IovPacket + 28);
if( v9 )
*(_QWORD *)(v9 + 16) = *(_QWORD *)(v7 + 8);
MdlInfo = MdlInvariantFindMdlInfo(IovPacket, *(_MDL **)(v7 + 8));
if( !MdlInfo && IrpSp->MajorFunction == 4 )
return;
if( (*(_BYTE *)(v11 + 10) & 5) != 0 )
{
v12 = *(VOID **)(v11 + 24);
}
else
{
LODWORD(Priority) = 1073741856;
LODWORD(BugCheckOnFailure) = 0;
v12 = MmMapLockedPagesSpecifyCache((_MDL *)v11, 0, MmCached, 0i64, (UINT64)BugCheckOnFailure, Priority);
}
if( !v12 )
return;
if( !MdlInfo
|| (v13 = (unsigned int)MdlInfo[6], v14 = *(unsigned int *)(*(_QWORD *)(v7 + 8) + 40i64), (_DWORD)v13 == (_DWORD)v14) )
{
MajorFunction = IrpSp->MajorFunction;
if( IrpSp->MajorFunction == 4 )
{
if( RtlpComputeCrcInternal(
v12,
*(unsigned int *)(*(_QWORD *)(v7 + 8) + 40i64),
0i64,
(_CRC_CTRL_TABLE *)&Crc64Ctrl,
BugCheckOnFailure) != *((_QWORD *)MdlInfo + 1) )
{
v18 = 4112;
goto LABEL_25;
}
return;
}
}
else
{
v15 = *((_QWORD *)MdlInfo + 2);
if( (unsigned __int64)v12 < v15 || (unsigned __int64)v12 + v14 > v15 + v13 )
{
LOBYTE(v4) = IrpSp->MajorFunction != 4;
v18 = v4 + 4112;
goto LABEL_25;
}
MajorFunction = IrpSp->MajorFunction;
}
if( MajorFunction == 3 && KeGetCurrentIrql() < 2u )
{
v17 = RtlpComputeCrcInternal(
v12,
*(unsigned int *)(*(_QWORD *)(v7 + 8) + 40i64),
0i64,
(_CRC_CTRL_TABLE *)&Crc64Ctrl,
BugCheckOnFailure);
KeDelayExecutionThread(0, 0, (_LARGE_INTEGER *)&IovMdlInvariant10Milliseconds);
if( v17 != RtlpComputeCrcInternal(
v12,
*(unsigned int *)(*(_QWORD *)(v7 + 8) + 40i64),
0i64,
(_CRC_CTRL_TABLE *)&Crc64Ctrl,
BugCheckOnFailurea) )
{
v18 = 4113;
LABEL_25:
VerifierBugCheckIfAppropriate(0xC4ui64, v18, (ULONG_PTR)IrpSp->DeviceObject, v7, (ULONG_PTR)v12, Priority);
}
}
}Referenced by:
IovpCompleteRequest2