MiCaptureAllocateMapExtendedParameters

NTSTATUS __stdcall MiCaptureAllocateMapExtendedParameters(VOID *Address, ULONGLONG ullMultiplicand, VOID *a3){
  int v3; 
  int v4; 
  char v5; 
  ULONGLONG v6; 
  int v8; 
  ULONGLONG v10; 
  int v11; 
  char *v12; 
  int v13; 
  int v14; 
  int v15; 
  unsigned __int64 v16; 
  int v17; 
  int v18; 
  int v19; 
  __int64 v20; 
  __int64 v21; 
  __int64 v22; 
  unsigned __int64 v23; 
  UINT64 pullResult; 
  __int64 v25; 
  VOID *v26; 
  char *v27; 
  unsigned __int64 v28; 
  _QWORD *v29; 

  v4 = v3;
  v5 = (char)a3;
  v6 = (unsigned int)ullMultiplicand;
  pullResult = 0i64;
  memset(v29, 0i64, 0x48u);
  if( !(_DWORD)v6 )
    return Address != 0i64 ? 0xC000000D : 0;
  if( !Address )
    return -1073741811;
  v10 = v6;
  v8 = RtlULongLongMult(v6, 0x10ui64, &pullResult);
  if( v8 >= 0 )
  {
    v11 = 0;
    if( v5 )
      ProbeForWrite((UINT64)Address, pullResult, 8i64);
    v26 = Address;
    v12 = (char *)Address + 16 * v10;
    v27 = v12;
    while( Address < v12 )
    {
      v13 = (unsigned __int8)*(_DWORD *)Address;
      if( (unsigned int)(v13 - 1) > 4 || *(_QWORD *)Address >= 0x100ui64 )
        return -1073741811;
      v14 = 1 << v13;
      if( ((1 << v13) & v4) == 0 )
        return -1073741811;
      if( (v14 & v11) != 0 )
        return -1073741811;
      v11 |= v14;
      v15 = v13 - 1;
      if( v15 )
      {
        v17 = v15 - 1;
        if( v17 )
        {
          v18 = v17 - 1;
          if( v18 )
          {
            v19 = v18 - 1;
            if( v19 )
            {
              if( v19 != 1 )
                return -1073741811;
              v20 = *((_QWORD *)Address + 1);
              v29[7] = v20;
              if( (v20 & 0xFFFFFFFFFFFFFFC0ui64) != 0 )
                return -1073741811;
            }
            else
            {
              v29[5] = *((_QWORD *)Address + 1);
              *((_BYTE *)v29 + 48) = 1;
            }
          }
          else
          {
            v21 = *((_QWORD *)Address + 1);
            v29[3] = v21;
            if( !v21 )
              return -1073741811;
          }
        }
        else
        {
          v25 = 0i64;
          v22 = *((_QWORD *)Address + 1);
          v25 = v22;
          if( (unsigned __int64)v22 > 0xFFFFFFFF )
          {
            v23 = v22;
            if( v22 < 0 )
            {
              v22 &= ~0x8000000000000000ui64;
              v25 = v22;
              *((_BYTE *)v29 + 49) = 1;
              v23 = v22;
            }
            if( v23 > 0xFFFFFFFF )
              return -1073741811;
          }
          *((_DWORD *)v29 + 8) = v22;
          if( (_DWORD)v22 == -1 )
            return -1073741811;
          *((_DWORD *)v29 + 8) = v22 + 1;
        }
      }
      else
      {
        v16 = *((_QWORD *)Address + 1);
        v28 = v16;
        if( v5 )
        {
          if( (v16 & 7) != 0 )
            ExRaiseDatatypeMisalignment();
          if( v16 + 24 > 0x7FFFFFFF0000i64 || v16 + 24 < v16 )
            MEMORY[0x7FFFFFFF0000] = 0;
        }
        *v29 = *(_QWORD *)v16;
        v29[1] = *(_QWORD *)(v16 + 8);
        v29[2] = *(_QWORD *)(v16 + 16);
      }
      Address = (char *)Address + 16;
      v26 = Address;
    }
    *((_DWORD *)v29 + 13) = v11;
    return 0;
  }
  return v8;
}

Referenced by:

MiAllocateUserPhysicalPages
MiMapViewOfSectionExCommon
MmAllocateVirtualMemory