MiFreeInitializationCode
void __fastcall MiFreeInitializationCode(_QWORD *a1, unsigned __int64 a2, __int64 a3, int a4){
_QWORD *v6;
_QWORD *v7;
_QWORD *v8;
__int64 v9;
unsigned __int64 v10;
MMPTE *PteAddress;
_MI_PARTITION *ControlAreaPartition;
_SECTION *v13;
_CONTROL_AREA *v14;
CHAR *AnyMultiplexedVm;
__int64 v16;
UINT64 v17;
INT64 v18;
_MMPFN *PfnDb;
INT64 v20;
UINT64 v21;
__int128 v22;
__int128 v23;
__int128 v24;
v6 = a1;
v22 = 0i64;
v23 = 0i64;
v24 = 0i64;
if( a4 )
{
v8 = 0i64;
v7 = 0i64;
}
else
{
v6 = (_QWORD *)a1[6];
v7 = a1 + 20;
v8 = a1;
}
v9 = (__int64)((a2 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
v10 = (__int64)(a3 - a2 + 8) >> 3;
if( !a4 )
{
MiLockLoaderEntry((INT64)v7, 0i64);
PteAddress = MiGetPteAddress(v6);
RtlClearBits((RTL_BITMAP *)v7[14], (__int64)(a2 - (_QWORD)PteAddress) >> 3, (unsigned int)v10);
MiUnlockLoaderEntry((INT64)v7, 0i64);
}
ControlAreaPartition = (_MI_PARTITION *)&MiSystemPartition;
if( (unsigned int)MI_IS_PHYSICAL_ADDRESS((PVOID)v9) )
{
for( ; v10; v10 -= v21 )
{
v18 = MiVaToPfn((PVOID)v9);
PfnDb = MmGetPfnDb();
v20 = (INT64)PfnDb + 48 * v18;
if( *(_WORD *)(v20 + 32) != 1 )
MiBadRefCount((_MMPFN *)v20, (UINT64)PfnDb);
v21 = v10;
if( 512 - (unsigned __int64)(v18 & 0x1FF) <= v10 )
v21 = 512 - (v18 & 0x1FF);
MiFreeLargeInitializationCodePages(v20, v18, v21);
v9 += v21 << 12;
}
}
else if( a4 )
{
MiFreeBootDriverPages((_DWORD)v6, a2, v10, 1, 0i64);
if( v6 == (_QWORD *)PsNtosImageBase )
MxKernelFreedGapCharges += v10;
else
MxHalFreedGapCharges += v10;
}
else
{
v13 = (_SECTION *)v8[14];
if( v13 )
{
v14 = MiSectionControlArea(v13);
ControlAreaPartition = MiGetControlAreaPartition(v14);
}
AnyMultiplexedVm = MiGetAnyMultiplexedVm(1i64);
MiDeleteSystemPagableVm((__int64)AnyMultiplexedVm, v16, a2, v10, 1, &v22);
}
v17 = *((_QWORD *)&v23 + 1);
if( *((_QWORD *)&v23 + 1) )
{
v7[5] -= *((_QWORD *)&v23 + 1);
v7[6] -= v17;
if( v6 == PsHalImageBase || v6 == (_QWORD *)PsNtosImageBase )
qword_140C4ECF0 -= *((_QWORD *)&v23 + 1);
else
_InterlockedExchangeAdd(&dword_140C4ED10, -(int)v17);
MiReturnResident((INT64)ControlAreaPartition, v17);
MiReturnCommit(ControlAreaPartition, v17 - *((_QWORD *)&v22 + 1));
}
}Referenced by:
MiFreeDriverInitialization
MiFreeKernelPadSections
MmDiscardDriverSection