MiMapContiguousMemoryLarge

INT64 __stdcall MiMapContiguousMemoryLarge(PVOID BugCheckParameter2, INT64 a2){
  unsigned int v2; 
  int v3; 
  _DWORD *v4; 
  __int64 PageTablesForLargeMap; 
  _QWORD *v6; 
  unsigned int v8; 
  unsigned __int64 v10; 
  char *v11; 
  __int64 v12; 
  __int64 v13; 
  char *v14; 
  unsigned __int64 v15; 
  int v16; 
  unsigned __int8 *v17; 
  ULONG_PTR v18; 
  unsigned __int8 CurrentIrql; 
  PVOID v20; 
  __int64 v21; 
  CHAR *AnyMultiplexedVm; 
  unsigned __int8 v24; 
  _DWORD *a5; 
  INT64 v26; 
  _QWORD *v27; 
  _RTL_BALANCED_NODE *a6; 
  char *v29; 
  int v30; 
  __int64 v31; 
  unsigned int v32; 
  int v33; 
  __int64 v34; 
  v33 = v3;
  v32 = v2;
  v4 = (_DWORD *)v34;
  PageTablesForLargeMap = 0i64;
  v6 = 0i64;
  v31 = 0i64;
  a6 = 0i64;
  *(_DWORD *)v34 = 0;
  v8 = 1;
  v27 = 0i64;
  v10 = 2i64;
  if( v2 >> 3 == 1 )
  {
    v8 = 0;
  }
  else if( v2 >> 3 == 3 && (v2 & 7) != 0 )
  {
    v8 = 2;
  }
  v11 = (char *)MmGetPfnDb() + 40;
  if( (unsigned __int64)BugCheckParameter2 > 0xFFFFFFFFFi64 )
  {
    LODWORD(v13) = 0;
  }
  else
  {
    v12 = 6i64 * (_QWORD)BugCheckParameter2;
    v13 = (*(_QWORD *)&v11[8 * v12] >> 50) & 1i64;
    if( ((*(_QWORD *)&v11[8 * v12] >> 50) & 1) != 0 )
    {
      v14 = (char *)MmGetPfnDb() + 8 * v12;
      goto LABEL_6;
    }
  }
  v14 = 0i64;
LABEL_6:
  v15 = 0i64;
  v29 = v14;
  v16 = 3;
  if( !a2 )
    goto LABEL_17;
  v17 = (unsigned __int8 *)(v14 + 34);
  while( 1 )
  {
    v18 = (ULONG_PTR)BugCheckParameter2 + v15;
    if( (unsigned __int64)BugCheckParameter2 + v15 > 0xFFFFFFFFFi64
      || (*((_QWORD *)MmGetPfnDb() + 6 * v18 + 5) & 0x4000000000000i64) == 0 )
    {
      break;
    }
    if( ((unsigned __int8)v3 & (unsigned __int8)v10) != 0 && ((*v17 & 7) != 5 || !MiIsPfnFileOnly((INT64)(v17 - 34))) )
      KeBugCheckEx(0x1Au, 0x1160Cui64, v18, 0i64, 0i64);
    if( !v14 )
      goto LABEL_16;
    v24 = *v17;
    if( (*v17 & 0xC0) == 0xC0 )
    {
      MiAssignInitialPageAttribute((INT64)(v17 - 34), v8);
      v24 = *v17;
      v10 = 2i64;
      v6 = v27;
    }
    if( v24 >> 6 != v8 )
      goto LABEL_16;
    v16 = v8;
LABEL_12:
    ++v15;
    v17 += 48;
    if( v15 >= a2 )
      goto LABEL_16;
    v14 = v29;
    LOBYTE(v3) = v33;
  }
  if( v14 )
    goto LABEL_16;
  if( v15 )
    goto LABEL_12;
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(v10);
  v6 = MiIoSpaceIsConstant((unsigned __int64)BugCheckParameter2, a2);
  v27 = v6;
  __writecr8(CurrentIrql);
  if( !v6 )
    goto LABEL_12;
  v16 = *((_DWORD *)v6 + 10);
  v15 = a2;
LABEL_16:
  PageTablesForLargeMap = v31;
  v4 = (_DWORD *)v34;
LABEL_17:
  if( v15 == a2 )
  {
    if( (_DWORD)v13 || v6 )
    {
LABEL_23:
      LODWORD(v21) = MiSearchNumaNodeTable(BugCheckParameter2);
      PageTablesForLargeMap = MiGetPageTablesForLargeMap(a2, 9ui64, 1i64, (unsigned int)(*(_DWORD *)(v21 + 8) + 1));
      if( PageTablesForLargeMap )
      {
        AnyMultiplexedVm = MiGetAnyMultiplexedVm(3i64);
        LODWORD(v26) = v16;
        LODWORD(a5) = 1;
        MiMapWithLargePages(
          (INT64)AnyMultiplexedVm,
          PageTablesForLargeMap,
          (UINT64)BugCheckParameter2,
          a2,
          (INT64)a5,
          v32,
          v26);
        if( a6 )
          *v4 |= 1u;
      }
      else if( !(_DWORD)v13 && !v27 )
      {
        v20 = BugCheckParameter2;
        goto LABEL_46;
      }
    }
    else
    {
      v30 = 0;
      if( (int)MiReferenceIoPages(1ui64, (INT64)BugCheckParameter2, a2, v8, &v30, &a6) >= 0 )
      {
        v20 = BugCheckParameter2;
        if( ((v30 - 1) & v30) == 0 )
        {
          v16 = *((unsigned __int16 *)a6[2].Children[0]->Children
                + ((unsigned __int64)BugCheckParameter2 & 0xFFFFFFFFFi64)
                - a6[1].ParentValue) >> 14;
          LOWORD(v34) = *((_WORD *)a6[2].Children[0]->Children
                        + ((unsigned __int64)BugCheckParameter2 & 0xFFFFFFFFFi64)
                        - a6[1].ParentValue);
          goto LABEL_23;
        }
LABEL_46:
        MiDereferenceIoPages(1i64, v20, a2);
      }
    }
  }
  return PageTablesForLargeMap;
}

Referenced by:

MiMapContiguousMemory