MiActOnLargeKernelHalPages
__int64 __fastcall MiActOnLargeKernelHalPages(char *a1, __int64 (__fastcall *a2)(char *, char *)){
IMAGE_NT_HEADERS *v4;
__int64 *v5;
int v6;
IMAGE_NT_HEADERS *v7;
char *v8;
int v9;
unsigned int v10;
char *v11;
unsigned int v12;
unsigned __int64 v13;
__int64 result;
__int64 v15;
unsigned int SizeOfHeaders;
int v17;
unsigned int v18;
__int128 v19;
int v20;
v4 = RtlImageNtHeader(a1);
v15 = 0i64;
v5 = &v15;
v17 = 0;
v6 = 0x40000000;
v20 = 0x40000000;
v7 = v4;
v8 = a1;
v9 = v4->FileHeader.NumberOfSections + 1;
SizeOfHeaders = v4->OptionalHeader.SizeOfHeaders;
v19 = 0i64;
v18 = SizeOfHeaders;
do
{
v10 = *((_DWORD *)v5 + 4);
v11 = &a1[*((unsigned int *)v5 + 3)];
if( v10 < *((_DWORD *)v5 + 2) )
v10 = *((_DWORD *)v5 + 2);
v12 = *((_DWORD *)v5 + 9) & 0xE0000000;
v13 = ((v10 + 4095i64) & 0xFFFFFFFFFFFFF000ui64) + 0x1FFFFF;
if( v12 != v6 )
{
if( v8 < v11 )
{
result = a2(v8, &a1[*((unsigned int *)v5 + 3)]);
if( (int)result < 0 )
return result;
}
v6 = v12;
v8 = v11;
}
if( v5 == &v15 )
v5 = (__int64 *)((char *)&v7->OptionalHeader + v7->FileHeader.SizeOfOptionalHeader);
else
v5 += 5;
--v9;
}
while( v9 );
return a2(v8, (char *)((unsigned __int64)&v11[v13] & 0xFFFFFFFFFFE00000ui64));
}Referenced by:
MiCreateSlabAllocationsFromKernelHal
MiInitializeBootLoadedDriverPfns
MiProtectSystemImage