MiMakePartitionMemoryBlock
VOID __stdcall MiMakePartitionMemoryBlock(_MI_PARTITION *Partition){
_RTL_BALANCED_NODE *Root;
_QWORD *Children;
_QWORD **v4;
__int64 v5;
_QWORD *v6;
_QWORD *v7;
unsigned __int64 v8;
unsigned int v9;
PHYSICAL_MEMORY_DESCRIPTOR *Pool;
PHYSICAL_MEMORY_DESCRIPTOR *v11;
_QWORD *j;
_RTL_BALANCED_NODE *i;
_QWORD **v14;
__int64 v15;
_QWORD *v16;
_QWORD *v17;
_MI_INSERT_PAGES InsertInfo[2];
__int128 v19;
__int64 v20;
__int128 v21[2];
__int128 v22;
__int64 v23;
__int128 v24[3];
PHYSICAL_MEMORY_DESCRIPTOR *v25;
*(_QWORD *)InsertInfo = 0i64;
v20 = 0i64;
v25 = 0i64;
v23 = 0i64;
Root = Partition->Core.PageRoot.Root;
Children = 0i64;
memset(v24, 0, sizeof(v24));
memset(v21, 0, sizeof(v21));
v22 = 0i64;
while( Root )
{
Children = Root->Children;
Root = Root->Children[0];
}
while( Children )
{
v4 = (_QWORD **)Children[1];
v5 = (__int64)Children;
v6 = Children;
if( v4 )
{
v7 = *v4;
for( Children = (_QWORD *)Children[1]; v7; v7 = (_QWORD *)*v7 )
Children = v7;
}
else
{
while( 1 )
{
Children = (_QWORD *)(Children[2] & 0xFFFFFFFFFFFFFFFCui64);
if( !Children || (_QWORD *)*Children == v6 )
break;
v6 = Children;
}
}
MiActOnPartitionNodePages(v5, 5u, (_RTL_AVL_TREE **)v21);
}
v8 = *((_QWORD *)&v22 + 1);
v19 = 0i64;
if( *((_QWORD *)&v22 + 1) )
{
v9 = v22;
if( (unsigned __int64)v22 <= 0x7FFFFFFFFFFFFFFi64 )
{
Pool = (PHYSICAL_MEMORY_DESCRIPTOR *)MiAllocatePool(64i64, 16 * (v22 + 1), 0x6C4D6D4Dui64);
v11 = Pool;
if( Pool )
{
Pool->NumberOfRuns = v9;
j = 0i64;
v25 = Pool;
Pool->NumberOfPages = v8;
for( i = Partition->Core.PageRoot.Root; i; i = i->Children[0] )
j = i->Children;
while( j )
{
v14 = (_QWORD **)j[1];
v15 = (__int64)j;
v16 = j;
if( v14 )
{
v17 = *v14;
for( j = (_QWORD *)j[1]; v17; v17 = (_QWORD *)*v17 )
j = v17;
}
else
{
while( 1 )
{
j = (_QWORD *)(j[2] & 0xFFFFFFFFFFFFFFFCui64);
if( !j || (_QWORD *)*j == v16 )
break;
v16 = j;
}
}
MiActOnPartitionNodePages(v15, 6u, (_RTL_AVL_TREE **)v24);
}
*(_QWORD *)&v19 = MiConvertInitialMemoryBlock(Partition, v11);
ExFreePoolWithTag(v11, 0);
if( (_QWORD)v19 )
{
*((_QWORD *)&v19 + 1) = MiCreateNodeLists(Partition, (PHYSICAL_MEMORY_DESCRIPTOR *)v19);
if( !*((_QWORD *)&v19 + 1) )
{
MiDereferencePageRunsEx(v19, 0i64);
v19 = 0ui64;
}
}
}
}
}
MiUpdatePartitionMemory(Partition, InsertInfo);
}Referenced by:
MiDeletePartitionResources
MiGetPhysicalMemoryRanges
MiInsertPartitionPages