MiMapBBTMemory

VOID __fastcall MiMapBBTMemory(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  unsigned __int64 v1; 
  _QWORD *v3; 
  unsigned __int64 v4; 
  UINT64 v5; 
  _MMPTE *PteBase; 
  UINT64 *v7; 
  INT64 v8; 
  UINT64 ValidPte; 
  char *v10; 
  char *v11; 
  unsigned __int64 v12; 
  __int64 v13; 
  UINT64 v14; 
  INT64 v15; 
  char *v16; 
  _QWORD *v17; 
  v1 = 0i64;
  if( BBTPagesToReserve )
  {
    v3 = *(_QWORD **)(*((_QWORD *)LoaderBlock + 30) + 2824i64);
    if( v3 )
    {
      v1 = (BBTPagesToReserve + 511) & 0xFFFFFFFFFFFFFE00ui64;
LABEL_20:
      v14 = v1 << 12;
      KeZeroPages(v3, v14);
      *v3 = v14;
      goto LABEL_21;
    }
    v4 = (BBTPagesToReserve + 511) & 0xFFFFFFFFFFFFFE00ui64;
    v5 = MiObtainSystemVa(v4 >> 9, 9i64);
    v17 = (_QWORD *)v5;
    v3 = (_QWORD *)v5;
    if( v5 )
    {
      PteBase = MmGetPteBase();
      v7 = (UINT64 *)((char *)PteBase + ((v5 >> 9) & 0x7FFFFFFFF8i64));
      LODWORD(v15) = 0;
      v8 = (INT64)&v7[v4 - 1];
      if( (unsigned int)MiMakeZeroedPageTablesEx((INT64)v7, v8, 0i64, 9i64, v15) )
      {
        ValidPte = MiMakeValidPte((UINT64)v7, 0i64, 2684354564i64);
        v10 = (char *)LoaderBlock + 32;
        v11 = (char *)*((_QWORD *)LoaderBlock + 4);
        v16 = v10;
        if( v11 != v10 )
        {
          while( 1 )
          {
            if( *((_DWORD *)v11 + 4) == 23 )
            {
              v12 = *((_QWORD *)v11 + 4);
              v13 = *((_QWORD *)v11 + 3);
              if( v12 + v1 > BBTPagesToReserve )
                v12 = BBTPagesToReserve - v1;
              v1 += v12;
              do
              {
                ValidPte ^= (ValidPte ^ (v13 << 12)) & 0xFFFFFFFFF000i64;
                *v7++ = ValidPte;
                ++v13;
                --v12;
              }
              while( v12 );
              if( v1 == BBTPagesToReserve )
              {
LABEL_17:
                v3 = v17;
                break;
              }
              v10 = v16;
            }
            v11 = *(char **)v11;
            if( v11 == v10 )
              goto LABEL_17;
          }
        }
        if( v1 < BBTPagesToReserve )
          BBTPagesToReserve = v1;
        goto LABEL_20;
      }
      MiReturnSystemVa((UINT64)v3, ((v8 << 25) - ((_QWORD)PteBase << 25) + 0x10000000) >> 16, 9i64);
      v3 = 0i64;
    }
    BBTPagesToReserve = 0i64;
LABEL_21:
    BBTBuffer = (__int64)v3;
  }
}

Referenced by:

MiInitSystem