MiUpdatePartitionLargePfnBitMap
NTSTATUS __stdcall MiUpdatePartitionLargePfnBitMap(_MI_PARTITION *TargetPartition, _RTL_AVL_TREE *PageRoot){
_ETHREAD *CurrentThread;
NTSTATUS v4;
_RTL_BALANCED_NODE *Root;
_QWORD *Children;
_QWORD **v8;
__int64 v9;
_QWORD *v10;
_QWORD *v11;
__int128 v13;
__int128 v14;
__int128 v15;
__int64 v16;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v13 = 0i64;
v14 = 0i64;
v4 = 0;
v15 = 0i64;
v16 = 0i64;
*(_QWORD *)&v13 = TargetPartition;
MiLockDynamicMemoryExclusive(TargetPartition, CurrentThread);
Root = PageRoot->Root;
Children = 0i64;
while( Root )
{
Children = Root->Children;
Root = Root->Children[0];
}
while( Children )
{
v8 = (_QWORD **)Children[1];
v9 = (__int64)Children;
v10 = Children;
if( v8 )
{
v11 = *v8;
for( Children = (_QWORD *)Children[1]; v11; v11 = (_QWORD *)*v11 )
Children = v11;
}
else
{
while( 1 )
{
Children = (_QWORD *)(Children[2] & 0xFFFFFFFFFFFFFFFCui64);
if( !Children || (_QWORD *)*Children == v10 )
break;
v10 = Children;
}
}
MiActOnPartitionNodePages(v9, 3u, (_RTL_AVL_TREE **)&v13);
if( (SDWORD1(v14) & 0x80000000) != 0 )
{
v4 = DWORD1(v14);
break;
}
}
MiUnlockDynamicMemoryExclusive(TargetPartition, CurrentThread);
return v4;
}Referenced by:
MiAllocatePartitionPhysicalPages
MiHotAddPartitionMemory