MmInitSystem
UINT8 __stdcall MmInitSystem(UINT64 Phase, _LOADER_PARAMETER_BLOCK *LoaderBlock){
_LOADER_PARAMETER_BLOCK *v2;
int NestedPageProtectionFlags;
char v5;
int v6;
UINT16 *NumaGraph;
unsigned int v8;
unsigned int i;
unsigned int v10;
__int64 v11;
v2 = LoaderBlock;
if( (_DWORD)Phase == -1 )
{
BitMapHeader.SizeOfBitMap = 2048;
BitMapHeader.Buffer = (unsigned int *)&unk_140C29EB0;
word_140C2A012 |= 1u;
NestedPageProtectionFlags = VslGetNestedPageProtectionFlags();
v5 = NestedPageProtectionFlags;
if( !NestedPageProtectionFlags )
{
LABEL_12:
MiInitializeSystemVa(v2);
return 1;
}
v6 = MiFlags | 0x2000;
MiFlags |= 0x2000u;
if( (v5 & 4) != 0 )
{
v6 |= 0xC000u;
MiFlags = v6;
}
if( (v5 & 1) != 0 )
{
v6 |= 0x50000u;
}
else
{
if( (v5 & 2) == 0 )
{
LABEL_23:
if( (v5 & 0x10) == 0 )
{
v6 |= 0x20000u;
MiFlags = v6;
}
if( (v5 & 0x40) != 0 )
{
v6 |= 0x100000u;
MiFlags = v6;
}
if( v5 < 0 )
MiFlags = v6 | 0x80000;
goto LABEL_12;
}
v6 |= 0x10000u;
}
MiFlags = v6;
goto LABEL_23;
}
if( (_DWORD)Phase )
{
if( (_DWORD)Phase == 1 )
{
if( (unsigned __int16)KeNumberNodes > 1u )
{
NumaGraph = KeQueryNumaGraph();
if( NumaGraph )
{
v8 = (unsigned __int16)KeNumberNodes;
for( i = 0; i < v8; ++i )
{
v10 = 0;
do
{
v11 = i * v8 + v10++;
*(_DWORD *)(*(&stru_140C4DB30 + 21) + 4i64 * (unsigned int)v11) = NumaGraph[v11];
}
while( v10 < v8 );
}
ExFreePoolWithTag(NumaGraph, 0);
}
}
MiFlags = MiFlags & 0xFFFFFFCF | 0x10;
if( MiInitSystem(1ui64, v2) )
{
*(&stru_140C4DB30 + 4332) = 1;
return 1;
}
return 0;
}
if( (_DWORD)Phase == 2 )
{
MiFlags = MiFlags & 0xFFFFFFCF | 0x20;
return MiInitSystem(Phase, LoaderBlock);
}
}
else if( (unsigned __int8)MiInitNucleus(LoaderBlock) )
{
LoaderBlock = v2;
Phase = 0i64;
return MiInitSystem(Phase, LoaderBlock);
}
return 0;
}Referenced by:
InitBootProcessor
KiInitializeBootStructures
Phase1InitializationIoReady