MiCreatePfnDatabase

NTSTATUS __stdcall MiCreatePfnDatabase(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  int v2; 
  __int64 v3; 
  __int64 v4; 
  unsigned __int64 *v5; 
  unsigned __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  _QWORD *v9; 
  __int64 v10; 
  _MMPFN *PfnDb; 
  _QWORD *v12; 
  NTSTATUS result; 

  MiInitializeColors();
  v2 = (unsigned __int16)KeNumberNodes;
  v3 = (unsigned __int16)KeNumberNodes
     * (unsigned int)(unsigned __int8)MiChannelMaximumPowerOf2
     * *(&stru_140C4DB30 + 67);
  *(&stru_140C50B28 + 259) = 0x30000000000i64;
  v4 = (unsigned int)v3;
  *(&stru_140C4DB30 + 67) *= (unsigned __int16)KeNumberNodes * (unsigned __int8)MiChannelMaximumPowerOf2;
  v3 *= 5i64;
  *(&stru_140C50B28 + 260) = 8 * v3 + 0x30000000000i64;
  v5 = (unsigned __int64 *)((char *)&stru_140C50B28 + 4096);
  v6 = (*(&stru_140C50B28 + 260) + 8 * v3 + 15) & 0xFFFFFFFFFFFFFFF0ui64;
  v7 = 16 * v4;
  do
  {
    *v5 = v6;
    v6 += v7;
    ++v5;
  }
  while( (__int64)v5 < (__int64)&stru_140C50B28 + 4112 );
  *(&stru_140C50B28 + 624) = 4544i64 * (unsigned __int16)KeNumberNodes + v6;
  *(&stru_140C50B28 + 757) = *(&stru_140C50B28 + 624) + 24i64 * (unsigned int)MiGetPartitionLargePageListCount();
  *(&stru_140C4DB30 + 22) = (*(&stru_140C50B28 + 757) + 16 * v8 * *(&stru_140C4DB30 + 100) + 23) & 0xFFFFFFFFFFFFFFF0ui64;
  *(&stru_140C4DB30 + 21) = 176 * v8 + *(&stru_140C4DB30 + 22);
  *(&stru_140C4DB30 + 415) = (*(&stru_140C4DB30 + 21) + 4i64 * v2 * v2 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
  v10 = 144 * v8 + *(&stru_140C4DB30 + 415);
  PfnDb = MmGetPfnDb();
  MxPfnAllocation = (unsigned __int64)(v10 + 72 * v8 + 4095) >> 12;
  MmPfnDatabase = PfnDb;
  v12 = (_QWORD *)((char *)&stru_140C50B28 + 2072);
  do
    *v12++ += PfnDb;
  while( (__int64)v12 < (__int64)&stru_140C50B28 + 2088 );
  do
    *v9++ += PfnDb;
  while( (__int64)v9 < (__int64)&stru_140C50B28 + 4112 );
  *(&stru_140C50B28 + 624) += PfnDb;
  *(&stru_140C50B28 + 757) += PfnDb;
  *(&stru_140C4DB30 + 22) += PfnDb;
  *(&stru_140C4DB30 + 21) += PfnDb;
  *(&stru_140C4DB30 + 415) += PfnDb;
  *(&stru_140C4DB30 + 416) = (char *)PfnDb + v10;
  qword_140C50AD0 = (__int64)PfnDb + v6;
  result = MiCreateSparsePfnDatabase(LoaderBlock);
  if( result )
  {
    MiInitializePartitions(0i64);
    MiInitializePartition(&Irp, 0);
    MiInitializeNumaGraph(LoaderBlock);
    return 1;
  }
  return result;
}

Referenced by:

MiInitNucleus