MiCreateAweInfoBitMap

NTSTATUS __stdcall MiCreateAweInfoBitMap(_EX_CALLBACK_ROUTINE_BLOCK *CallBackBlock){
  _EPROCESS *Process; 
  __int64 v3; 
  __int64 v4; 
  _EWOW64PROCESS *WoW64Process; 
  unsigned __int16 Machine; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  void *Pool; 
  NTSTATUS result; 
  int v11; 

  Process = KeGetCurrentThread()->ApcState.Process;
  LODWORD(v3) = MiGetAweInfoPartition((INT64)CallBackBlock);
  v4 = *(_QWORD *)(v3 + 6920);
  WoW64Process = Process->WoW64Process;
  if( WoW64Process )
  {
    Machine = WoW64Process->Machine;
    if( (Machine == 332 || Machine == 452) && (unsigned __int64)(v4 + 1) > 0x100000000i64 )
      v4 = 0xFFFFFFFFi64;
  }
  ExGetCallBackBlockRoutine(CallBackBlock);
  if( v7 == 1 )
    v8 = v4 + 1;
  else
    v8 = (~(v7 - 1) & (v4 + v7 - 1)) / v7;
  Pool = MiAllocatePool(64i64, 8 * ((v8 >> 6) + ((v8 & 0x3F) != 0)), 0x4C646156ui64);
  if( !Pool )
    return -1073741670;
  if( (*CallBackBlock & 1) != 0
    && (v11 = PsChargeProcessNonPagedPoolQuota(Process, 8 * ((v8 >> 6) + ((v8 & 0x3F) != 0))), v11 < 0) )
  {
    ExFreePoolWithTag(Pool, 0);
    return v11;
  }
  else
  {
    *((_QWORD *)CallBackBlock + 2) = v8;
    result = 0;
    *((_QWORD *)CallBackBlock + 3) = Pool;
  }
  return result;
}

Referenced by:

MiAllocateAweInfo
MiResizeAweBitMap