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