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