MdlInvariantPreProcessing1

VOID __stdcall MdlInvariantPreProcessing1(
        _IOFCALLDRIVER_STACKDATA *CallDriverData,
        _IOV_REQUEST_PACKET *IovPacket,
        _IO_STACK_LOCATION *IrpSp){
  __int64 v3; 
  int v4; 
  _MDL *v8; 
  __int64 v9; 
  VOID *v10; 
  _MDL_INFO *v11; 
  __int64 v12; 
  char v13; 
  __int64 v14; 
  UINT64 v15; 
  __int64 v16; 
  __int64 v17; 
  unsigned int v18; 
  unsigned __int64 v19; 
  UINT64 v20; 
  __int64 v21; 
  ULONG_PTR v22; 
  UINT64 v23; 
  _CRC_CTRL_TABLE *BugCheckOnFailure; 
  UINT64 Priority; 
  _MDL_INFO MdlInfo[2]; 
  UINT64 v27; 
  VOID *v28; 
  int v29; 
  char v30; 
  __int16 v31; 
  char v32; 

  v3 = *((_QWORD *)CallDriverData + 21);
  v4 = 0;
  v31 = 0;
  v32 = 0;
  v8 = *(_MDL **)(v3 + 8);
  if( !v8->Next
    && (KeGetCurrentIrql() >= 2u || v8->ByteCount != -1)
    && MmMdlPageContentsState(v8, MmMdlPageContentsQuery) == MmMdlPageContentsInvariant )
  {
    v9 = *(_QWORD *)(*((_QWORD *)CallDriverData + 21) + 8i64);
    if( (*(_BYTE *)(v9 + 10) & 5) != 0 )
    {
      v10 = *(VOID **)(v9 + 24);
    }
    else
    {
      LODWORD(Priority) = 1073741856;
      LODWORD(BugCheckOnFailure) = 0;
      v10 = MmMapLockedPagesSpecifyCache((_MDL *)v9, 0, MmCached, 0i64, (UINT64)BugCheckOnFailure, Priority);
    }
    if( v10 )
    {
      v11 = MdlInvariantFindMdlInfo(IovPacket, *(_MDL **)(*((_QWORD *)CallDriverData + 21) + 8i64));
      if( v11 )
      {
        v13 = *(_BYTE *)(v12 + 67);
        if( v13 == *(_BYTE *)(v12 + 66) || *((_BYTE *)v11 + 28) == v13 )
        {
          *(_OWORD *)v11 = 0i64;
          *((_OWORD *)v11 + 1) = 0i64;
          v11 = 0i64;
          *(_QWORD *)(*((_QWORD *)IovPacket + 28) + 16i64) = 0i64;
          v12 = *((_QWORD *)CallDriverData + 21);
        }
      }
      v14 = *(_QWORD *)(v12 + 8);
      if( !v11 )
      {
        v15 = RtlpComputeCrcInternal(
                v10,
                *(unsigned int *)(v14 + 40),
                0i64,
                (_CRC_CTRL_TABLE *)&Crc64Ctrl,
                BugCheckOnFailure);
        v16 = *((_QWORD *)CallDriverData + 21);
        v27 = v15;
        v28 = v10;
        *(_QWORD *)MdlInfo = *(_QWORD *)(v16 + 8);
        v29 = *(_DWORD *)(*(_QWORD *)MdlInfo + 40i64);
        v30 = *(_BYTE *)(v16 + 67);
        MdlInvariantInsertMdlInfo(IovPacket, MdlInfo);
        return;
      }
      v17 = (unsigned int)v11[6];
      v18 = *(_DWORD *)(v14 + 40);
      if( (_DWORD)v17 == v18 )
      {
        v20 = *(unsigned int *)(v14 + 40);
      }
      else
      {
        v19 = *((_QWORD *)v11 + 2);
        if( (unsigned __int64)v10 < v19 || (v20 = v18, (unsigned __int64)v10 + v18 > v19 + v17) )
        {
          LODWORD(v21) = v12;
          LOBYTE(v4) = IrpSp->MajorFunction != 4;
          v22 = v4 + 4112;
LABEL_28:
          VerifierBugCheckIfAppropriate(0xC4ui64, v22, (ULONG_PTR)IrpSp->DeviceObject, v21, (ULONG_PTR)v10, Priority);
          return;
        }
      }
      if( (MmVerifierData & 0x4000) != 0 )
      {
        v23 = RtlpComputeCrcInternal(v10, v20, 0i64, (_CRC_CTRL_TABLE *)&Crc64Ctrl, BugCheckOnFailure);
        if( *((_QWORD *)v11 + 1) != v23 )
        {
          if( IrpSp->MajorFunction == 4 )
          {
            v22 = 4112;
          }
          else
          {
            if( *(_DWORD *)(*(_QWORD *)(v3 + 184) + 8i64) != LODWORD(IrpSp->Parameters.SecurityContext) )
            {
              *((_QWORD *)v11 + 1) = v23;
              return;
            }
            v22 = 4113;
          }
          v21 = *((_QWORD *)CallDriverData + 21);
          goto LABEL_28;
        }
      }
    }
  }
}

Referenced by:

IovpCallDriver1