MiGetSystemPage
_MMPFN *__stdcall MiGetSystemPage(ULONG_PTR *Partition, _MI_COLOR_BASE *ColorBase){
unsigned __int32 v3;
__int64 v4;
UINT64 v5;
_MMPFN *v6;
unsigned __int64 v7;
v3 = ColorBase[2] & _InterlockedExchangeAdd(*(volatile signed __int32 **)ColorBase, 1u) | ColorBase[3];
for( LODWORD(v4) = MiGetPage(Partition, v3, 0x302ui64); ; LODWORD(v4) = MiGetPage(Partition, v3, 0x302ui64) )
{
if( v4 != -1 )
{
v6 = &MmGetPfnDb()[v4];
v7 = MiLockPageInline(v6);
v6->u2._bf_0 &= 0xC000000000000000ui64;
_InterlockedAnd64(&v6->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v7);
return v6;
}
if( KeGetCurrentIrql() == 2 )
break;
MiWaitForFreePage((_MI_PARTITION *)Partition, v5);
}
return 0i64;
}Referenced by:
MiGetPageForHeader
MiMapNewSession