MiFreeKernelPadSections
void __fastcall MiFreeKernelPadSections(_QWORD *a1, int a2){
int v2;
IMAGE_NT_HEADERS *v4;
int v5;
_MMPTE *PteBase;
__int64 v7;
int NumberOfSections;
_DWORD *v9;
_MMPTE *v10;
unsigned int v11;
__int64 v12;
unsigned int v13;
unsigned int v14;
v2 = a2;
if( dword_140CFA1D8 != 2 )
{
v4 = RtlImageNtHeader(a1);
v5 = 0;
PteBase = MmGetPteBase();
v7 = 0x7FFFFFFFF8i64;
NumberOfSections = v4->FileHeader.NumberOfSections;
v9 = (_DWORD *)((char *)&v4->OptionalHeader.Magic + v4->FileHeader.SizeOfOptionalHeader);
if( v4->FileHeader.NumberOfSections )
{
v10 = PteBase;
do
{
if( MiIsKernelHalPadSection((INT64)v9) )
{
v11 = v9[4];
v12 = (unsigned int)v9[3];
if( v11 < v9[2] )
v11 = v9[2];
++v5;
v13 = (v11 + 4095) & 0xFFFFF000;
v14 = v13 + v12;
if( v5 != 1 || dword_140CFA1D8 != 1 )
{
if( (MiFlags & 0x8000) != 0 )
{
VslReserveProtectedPages(0i64, (INT64)a1 + v12, v13 >> 12, 2ui64);
v7 = 0x7FFFFFFFF8i64;
}
MiFreeInitializationCode(
a1,
(unsigned __int64)v10 + (v7 & (((unsigned __int64)a1 + v12) >> 9)),
(__int64)v10 + (v7 & (((unsigned __int64)a1 + v14 - 1) >> 9)),
1);
v7 = 0x7FFFFFFFF8i64;
}
}
v9 += 10;
--NumberOfSections;
}
while( NumberOfSections );
v2 = a2;
PteBase = MmGetPteBase();
}
if( (MiFlags & 4) != 0 && (*(_QWORD *)&v2 & 0x1FFFFFi64) != 0 )
MiFreeInitializationCode(
a1,
(unsigned __int64)PteBase + (v7 & (((unsigned __int64)a1 + (unsigned int)(v2 - (_DWORD)a1)) >> 9)),
(__int64)PteBase + (v7 & (((unsigned __int64)a1 + ((v2 - (_DWORD)a1 + 0x1FFFFF) & 0xFFE00000) - 1) >> 9)),
1);
}
}Referenced by:
MiInitializeDriverImages