MiMakePartitionMemoryBlock
VOID __fastcall MiMakePartitionMemoryBlock(_MI_PARTITION *Partition){
_QWORD *v2;
_QWORD *i;
_QWORD **v4;
__int64 v5;
_QWORD *v6;
_QWORD *v7;
__int64 v8;
int v9;
int v10;
__int64 v11;
PHYSICAL_MEMORY_DESCRIPTOR *v12;
_QWORD *k;
_QWORD *j;
_QWORD **v15;
__int64 v16;
_QWORD *v17;
_QWORD *v18;
__int64 v19;
__int64 v20;
__int128 v21;
__int64 v22;
__int128 v23[2];
__int128 v24;
__int64 v25;
__int128 v26[3];
__int64 v27;
v20 = 0i64;
v22 = 0i64;
v27 = 0i64;
v25 = 0i64;
v2 = (_QWORD *)*((_QWORD *)Partition + 3);
i = 0i64;
memset(v26, 0, sizeof(v26));
memset(v23, 0, sizeof(v23));
v24 = 0i64;
while( v2 )
{
i = v2;
v2 = (_QWORD *)*v2;
}
while( i )
{
v4 = (_QWORD **)i[1];
v5 = (__int64)i;
v6 = i;
if( v4 )
{
v7 = *v4;
for( i = (_QWORD *)i[1]; v7; v7 = (_QWORD *)*v7 )
i = v7;
}
else
{
while( 1 )
{
i = (_QWORD *)(i[2] & 0xFFFFFFFFFFFFFFFCui64);
if( !i || (_QWORD *)*i == v6 )
break;
v6 = i;
}
}
MiActOnPartitionNodePages(v5, 5u, (__int16 **)v23);
}
v8 = *((_QWORD *)&v24 + 1);
v9 = 1;
v21 = 0i64;
if( *((_QWORD *)&v24 + 1) )
{
v10 = v24;
if( (unsigned __int64)v24 > 0x7FFFFFFFFFFFFFFi64 )
goto LABEL_33;
LODWORD(v11) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
v12 = (PHYSICAL_MEMORY_DESCRIPTOR *)v11;
if( !v11 )
goto LABEL_33;
*(_DWORD *)v11 = v10;
k = 0i64;
v27 = v11;
*(_QWORD *)(v11 + 8) = v8;
for( j = (_QWORD *)*((_QWORD *)Partition + 3); j; j = (_QWORD *)*j )
k = j;
while( k )
{
v15 = (_QWORD **)k[1];
v16 = (__int64)k;
v17 = k;
if( v15 )
{
v18 = *v15;
for( k = (_QWORD *)k[1]; v18; v18 = (_QWORD *)*v18 )
k = v18;
}
else
{
while( 1 )
{
k = (_QWORD *)(k[2] & 0xFFFFFFFFFFFFFFFCui64);
if( !k || (_QWORD *)*k == v17 )
break;
v17 = k;
}
}
MiActOnPartitionNodePages(v16, 6u, (__int16 **)v26);
}
*(_QWORD *)&v21 = MiConvertInitialMemoryBlock(Partition, v12);
ExFreePoolWithTag(v12, 0);
if( !(_QWORD)v21 )
goto LABEL_33;
MiCreateNodeLists(Partition, (_PHYSICAL_MEMORY_DESCRIPTOR *)v21);
*((_QWORD *)&v21 + 1) = v19;
if( !v19 )
{
MiDereferencePageRunsEx(v21, 0i64);
v21 = 0ui64;
LABEL_33:
v9 = 0;
}
}
MiUpdatePartitionMemory((__int64)Partition, (__int64)&v20, v9);
}Referenced by:
MiDeletePartitionResources
MiGetPhysicalMemoryRanges
MiInsertPartitionPages