MiGetSystemPage
char *__fastcall MiGetSystemPage(_QWORD *a1, __int64 a2){
unsigned __int32 v3;
UINT64 i;
UINT64 v5;
char *v6;
unsigned __int64 v7;
v3 = *(_DWORD *)(a2 + 8) & _InterlockedExchangeAdd(*(volatile signed __int32 **)a2, 1u) | *(_DWORD *)(a2 + 12);
for( i = MiGetPage((_MI_PARTITION *)a1, v3, 0x302ui64); ; i = MiGetPage((_MI_PARTITION *)a1, v3, 0x302ui64) )
{
if( i != -1i64 )
{
v6 = (char *)MmGetPfnDb() + 48 * i;
v7 = (unsigned __int8)MiLockPageInline((INT64)v6);
*((_QWORD *)v6 + 3) &= 0xC000000000000000ui64;
_InterlockedAnd64((volatile signed __int64 *)v6 + 3, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v7);
return v6;
}
if( KeGetCurrentIrql() == 2 )
break;
MiWaitForFreePage((_MI_PARTITION *)a1, v5);
}
return 0i64;
}Referenced by:
MiGetPageForHeader
MiMapNewSession