MiReturnPartitionPagesToParent
VOID __stdcall MiReturnPartitionPagesToParent(_MI_PARTITION *FromPartition){
void *MmPartition;
unsigned __int8 v3;
_RTL_BALANCED_NODE *Root;
_QWORD *Children;
unsigned __int64 v6;
_QWORD *v7;
__int64 v8;
_QWORD *v9;
__int128 v10;
__int128 v11;
__int128 v12;
__int64 v13;
v10 = 0i64;
v11 = 0i64;
v12 = 0i64;
v13 = 0i64;
MmPartition = FromPartition->Core.PartitionObject->ParentPartition->MmPartition;
MiDrainZeroLookasides(FromPartition, 0i64, 0i64, 0i64);
*(_QWORD *)&v10 = MmPartition;
*((_QWORD *)&v10 + 1) = FromPartition;
v3 = ExAcquireSpinLockExclusive((INT64 *)&FromPartition->Core.DynamicMemoryLock);
Root = FromPartition->Core.PageRoot.Root;
Children = 0i64;
v6 = v3;
LOBYTE(v11) = v3;
while( Root )
{
Children = Root->Children;
Root = Root->Children[0];
}
while( Children )
{
v7 = (_QWORD *)Children[1];
v8 = (__int64)Children;
v9 = Children;
if( v7 )
{
do
{
Children = v7;
v7 = (_QWORD *)*v7;
}
while( v7 );
}
else
{
while( 1 )
{
Children = (_QWORD *)(Children[2] & 0xFFFFFFFFFFFFFFFCui64);
if( !Children || (_QWORD *)*Children == v9 )
break;
v9 = Children;
}
}
MiActOnPartitionNodePages(v8, 4u, (_RTL_AVL_TREE **)&v10);
}
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&FromPartition->Core.DynamicMemoryLock);
__writecr8(v6);
MiReleasePartitionHugeIoSpace(FromPartition);
}Referenced by:
MiFreePartitionPhysicalPages