MiCreateAweInfoBitMap

INT64 __fastcall MiCreateAweInfoBitMap(INT64 a1){
  __int64 v2; 
  __int64 v3; 
  __int64 v4; 
  __int16 v5; 
  unsigned __int64 v6; 
  unsigned __int64 v7; 
  void *v8; 
  void *v9; 
  INT64 result; 
  int v11; 
  v2 = *((_QWORD *)KeGetCurrentThread() + 23);
  v3 = *(_QWORD *)(MiGetAweInfoPartition(a1) + 6920);
  v4 = *(_QWORD *)(v2 + 1408);
  if( v4 )
  {
    v5 = *(_WORD *)(v4 + 8);
    if( (v5 == 332 || v5 == 452) && (unsigned __int64)(v3 + 1) > 0x100000000i64 )
      v3 = 0xFFFFFFFFi64;
  }
  v6 = ExGetCallBackBlockRoutine(a1);
  if( v6 == 1 )
    v7 = v3 + 1;
  else
    v7 = (~(v6 - 1) & (v3 + v6 - 1)) / v6;
  LODWORD(v8) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
  v9 = v8;
  if( !v8 )
    return 3221225626i64;
  if( (*(_DWORD *)a1 & 1) != 0
    && (v11 = PsChargeProcessNonPagedPoolQuota(v2, 8 * ((v7 >> 6) + ((v7 & 0x3F) != 0))), v11 < 0) )
  {
    ExFreePoolWithTag(v9, 0);
    return(unsigned int)v11;
  }
  else
  {
    *(_QWORD *)(a1 + 16) = v7;
    result = 0i64;
    *(_QWORD *)(a1 + 24) = v9;
  }
  return result;
}

Referenced by:

MiAllocateAweInfo
MiResizeAweBitMap