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