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