MmFreeBootRegistry
VOID __stdcall MmFreeBootRegistry(){
UINT64 *v0;
UINT64 *v1;
UINT64 v2;
UINT64 *v3;
UINT64 i;
_MMPTE *PteAddress;
UINT64 v6;
__int64 v7;
UINT64 v8;
_MMPTE *v9;
INT64 *v10;
UINT64 v11;
UINT64 v12;
v0 = (UINT64 *)_InterlockedCompareExchange64((_QWORD *)&stru_140C4DB30 + 540, 1i64, 0i64);
v1 = v0;
if( v0 )
{
v2 = *v0;
v3 = v0 + 1;
qsort((UINT64)(v0 + 1), *v0, 8ui64, (INT64)MiRegistryVaSort, v10, v11, v12);
for( i = 0i64; i < v2; ++i )
{
PteAddress = MiGetPteAddress((VOID *)*v3);
v8 = (UINT64)PteAddress;
if( i == v2 - 1 || v7 + 4096 != v3[1] )
{
if( v6 == 1 )
{
v6 = 1i64;
v9 = PteAddress;
}
else
{
v8 = (UINT64)&PteAddress[-v6];
v9 = (_MMPTE *)(v8 + 8);
}
MiDeleteBootRange(v9, v6, v8);
}
++v3;
}
ExFreePoolWithTag(v1, 0);
*(&stru_140C4DB30 + 540) = 0i64;
}
}Referenced by:
CmpFreeBootRegistry
HvpDropPagedBins
MmFreeLoaderBlock