MiFreeKernelPadSections
VOID __fastcall MiFreeKernelPadSections(_KLDR_DATA_TABLE_ENTRY *DataTableEntry, INT64 a2){
int v2;
__int64 v4;
int v5;
_MMPTE *PteBase;
__int64 v7;
int v8;
_DWORD *v9;
_MMPTE *v10;
int v11;
unsigned int v12;
__int64 v13;
unsigned int v14;
unsigned int v15;
int v16;
v16 = a2;
v2 = a2;
if( dword_140CFA1D8 != 2 )
{
LODWORD(v4) = RtlImageNtHeader((UINT64)DataTableEntry);
v5 = 0;
PteBase = MmGetPteBase();
v7 = 0x7FFFFFFFF8i64;
v8 = *(unsigned __int16 *)(v4 + 6);
v9 = (_DWORD *)(*(unsigned __int16 *)(v4 + 20) + v4 + 24);
if( *(_WORD *)(v4 + 6) )
{
v10 = PteBase;
do
{
LOBYTE(v11) = MiIsKernelHalPadSection((INT64)v9);
if( v11 )
{
v12 = v9[4];
v13 = (unsigned int)v9[3];
if( v12 < v9[2] )
v12 = v9[2];
++v5;
v14 = (v12 + 4095) & 0xFFFFF000;
v15 = v14 + v13;
if( v5 != 1 || dword_140CFA1D8 != 1 )
{
if( (MiFlags & 0x8000) != 0 )
{
VslReserveProtectedPages(0i64, (INT64)DataTableEntry + v13, v14 >> 12, 2ui64);
v7 = 0x7FFFFFFFF8i64;
}
MiFreeInitializationCode(
DataTableEntry,
(char *)v10 + (v7 & (((unsigned __int64)DataTableEntry + v13) >> 9)),
(char *)v10 + (v7 & (((unsigned __int64)&DataTableEntry[-1].TimeDateStamp + v15 + 3) >> 9)));
v7 = 0x7FFFFFFFF8i64;
}
}
v9 += 10;
--v8;
}
while( v8 );
v2 = v16;
PteBase = MmGetPteBase();
}
if( (MiFlags & 4) != 0 && (*(_QWORD *)&v2 & 0x1FFFFFi64) != 0 )
MiFreeInitializationCode(
DataTableEntry,
(char *)PteBase + (v7 & (((unsigned __int64)DataTableEntry + (unsigned int)(v2 - (_DWORD)DataTableEntry)) >> 9)),
(char *)PteBase
+ (v7 & (((unsigned __int64)&DataTableEntry[-1].TimeDateStamp
+ ((v2 - (_DWORD)DataTableEntry + 0x1FFFFF) & 0xFFE00000)
+ 3) >> 9)));
}
}Referenced by:
MiInitializeDriverImages