MiCheckLargePageOk
UINT64 __stdcall MiCheckLargePageOk(_LOADER_PARAMETER_BLOCK *LoaderBlock){
INT64 v1;
ULONG_PTR v2;
unsigned int i;
void *v5;
int v6;
unsigned int v7;
__int64 v8;
void *v9;
ULONG_PTR SectionAlignment;
_QWORD *v11;
int v12;
void *v13;
int v15;
v1 = *((_QWORD *)LoaderBlock + 2);
LODWORD(v2) = 0;
for( i = 0; i < 2; ++i )
{
v5 = *(void **)(v1 + 48);
v6 = MI_IS_PHYSICAL_ADDRESS(v5);
v7 = v2 + 1;
if( !v6 )
v7 = v2;
v8 = (__int64)v5 + *(unsigned int *)(v1 + 64);
v2 = v7;
if( i )
{
MxHalDataTableEntry = v1;
PsHalImageBase = v5;
PsHalImageEnd = v8;
}
else
{
qword_140D57720 = v1;
PsNtosImageBase = (ULONG_PTR)v5;
PsNtosImageEnd = v8;
}
v1 = *(_QWORD *)v1;
}
v9 = *(void **)(*((_QWORD *)LoaderBlock + 2) + 48i64);
qword_140C4CA58 = *((_QWORD *)LoaderBlock + 2);
SectionAlignment = RtlImageNtHeader(v9)->OptionalHeader.SectionAlignment;
if( (_DWORD)SectionAlignment != 4096 )
KeBugCheckEx(0x1Au, 0x3030207ui64, (ULONG_PTR)LoaderBlock, SectionAlignment, 0i64);
MiVerifyLargeSectionLayout(v9);
if( !(_DWORD)v2 )
return 0i64;
if( (_DWORD)v2 != 1 )
KeBugCheckEx(0x1Au, 0x3030203ui64, (ULONG_PTR)LoaderBlock, v2, 0i64);
v11 = (_QWORD *)*((_QWORD *)LoaderBlock + 2);
v12 = 0;
do
{
v13 = (void *)v11[6];
if( (unsigned int)MI_IS_PHYSICAL_ADDRESS(v13) != 1 )
{
v15 = MI_IS_PHYSICAL_ADDRESS(v13);
KeBugCheckEx(0x1Au, 0x3030204ui64, (ULONG_PTR)LoaderBlock, (ULONG_PTR)v13, v15);
}
if( (void *)(((unsigned __int64)v13 + 0x1FFFFF) & 0xFFFFFFFFFFE00000ui64) != v13 )
KeBugCheckEx(0x1Au, 0x3030206ui64, (ULONG_PTR)LoaderBlock, (ULONG_PTR)v13, 0i64);
MiCheckLargePageSystemImage(LoaderBlock);
v11 = (_QWORD *)*v11;
++v12;
}
while( !v12 );
MiFlags |= 4u;
return 1i64;
}Referenced by:
MiInitNucleus