MiCreatePfnBitMaps

VOID __stdcall MiCreatePfnBitMaps(){
  _DWORD *v0; 
  __int64 v1; 
  unsigned int v2; 
  __int64 *v3; 
  unsigned int v4; 
  _DWORD *v5; 
  __int64 v6; 
  _MMPTE *PteBase; 
  unsigned __int64 v8; 
  RTL_BITMAP *v9; 
  unsigned __int64 v10; 
  INT64 v11; 
  __int64 v12; 
  INT64 v13; 
  INT64 v14; 
  __int64 v15; 
  INT64 v16; 
  INT64 v17; 
  INT64 v18; 
  INT64 v19; 
  __int64 v20; 
  int v21; 
  UINT64 v22; 
  INT64 v23; 
  __int64 v24[9]; 
  unsigned __int64 NumberOfBits; 
  INT64 v26; 
  v2 = 0;
  v3 = MiLargePageSizes;
  v4 = 0;
  v5 = v0;
  v6 = v1;
  do
  {
    PteBase = MmGetPteBase();
    if( v4 >= 2 )
    {
      v8 = 512i64;
      v9 = (RTL_BITMAP *)(v6 + 6144);
      if( (ULONG_PTR *)v6 != &MiSystemPartition )
      {
        *(_QWORD *)&v9->SizeOfBitMap = 0i64;
        *(_QWORD *)(v6 + 6152) = 0i64;
        v12 = (_QWORD)PteBase << 25;
        goto LABEL_7;
      }
    }
    else
    {
      v8 = *v3;
      v9 = (RTL_BITMAP *)(16i64 * v4 + v6 + 5064);
    }
    NumberOfBits = 0x1000000000i64 / v8 + (0x1000000000i64 % v8 != 0);
    v10 = (((NumberOfBits + 7) >> 3) + 4095) >> 12;
    v11 = MiReservePtes((INT64)&qword_140C4EC80, (unsigned int)v10);
    v26 = v11;
    if( !v11 )
      goto LABEL_30;
    v12 = (_QWORD)PteBase << 25;
    if( !(unsigned int)MiInitializeDynamicBitmap(v9, (PVOID)(((v11 << 25) - v12) >> 16), NumberOfBits, 4ui64) )
    {
      v23 = v26;
      v22 = (unsigned int)v10;
LABEL_29:
      MiReleasePtes((INT64)&qword_140C4EC80, v23, v22);
LABEL_30:
      MiDeletePfnBitMaps((UINT64 *)v6);
      return;
    }
    *(_QWORD *)&v9->SizeOfBitMap = 0i64;
LABEL_7:
    ++v4;
    ++v3;
  }
  while( v4 < 3 );
  v13 = MiReservePtes((INT64)&qword_140C4EC80, 0x8000ui64);
  v14 = v13;
  if( !v13 )
    goto LABEL_30;
  v15 = ((v13 << 25) - v12) >> 16;
  if( !(unsigned int)MiInitializeDynamicBitmap((RTL_BITMAP *)v24, (PVOID)v15, 0x40000000ui64, 4ui64) )
  {
    v22 = 0x8000i64;
    v23 = v14;
    goto LABEL_29;
  }
  *(_QWORD *)(v6 + 5104) = v15;
  v16 = MiReservePtes((INT64)&qword_140C4EC80, 8ui64);
  v17 = v16;
  if( !v16 )
    goto LABEL_30;
  if( !(unsigned int)MiInitializeDynamicBitmap(
                        (RTL_BITMAP *)(v6 + 5112),
                        (PVOID)(((v16 << 25) - v12) >> 16),
                        0x40000ui64,
                        4ui64) )
  {
    v22 = 8i64;
    v23 = v17;
    goto LABEL_29;
  }
  *(_QWORD *)(v6 + 5112) = 0i64;
  v18 = MiReservePtes((INT64)&qword_140C4EC80, 0x80ui64);
  v19 = v18;
  if( !v18 )
    goto LABEL_30;
  v20 = ((v18 << 25) - v12) >> 16;
  if( !(unsigned int)MiInitializeDynamicBitmap((RTL_BITMAP *)v24, (PVOID)v20, 0x400000ui64, 4ui64) )
  {
    v22 = 128i64;
    v23 = v19;
    goto LABEL_29;
  }
  *(_QWORD *)(v6 + 5128) = v20;
  if( v5 && (v21 = 0, *v5) )
  {
    while( (unsigned int)MiSplitPfnBitMaps((UINT64 *)v6, *(_QWORD *)&v5[4 * v21 + 4], *(_QWORD *)&v5[4 * v21 + 6]) )
    {
      if( (unsigned int)++v21 >= *v5 )
        goto LABEL_18;
    }
  }
  else
  {
LABEL_18:
    *(_BYTE *)(v6 + 4830) = 1;
    if( v5 && KeNumberNodes )
    {
      do
      {
        MiInitializeRebuildCandidateCounts(v2, 2ui64);
        MiInitializeRebuildCandidateCounts(v2++, 1ui64);
      }
      while( v2 < (unsigned __int16)KeNumberNodes );
    }
  }
}

Referenced by:

MiInitNucleus