MiAllocateAweInfo

INT64 __fastcall MiAllocateAweInfo(){
  int v0; 
  __int64 v1; 
  char v2; 
  INT8 v3; 
  INT8 v4; 
  char v5; 
  char v6; 
  __int64 v7; 
  INT64 v9; 
  _DWORD *v10; 
  unsigned int v11; 
  int AweInfoBitMap; 
  INT64 v13; 
  _QWORD *v14; 
  v4 = v3;
  v5 = v2;
  v6 = v0;
  v7 = v1;
  *v14 = 0i64;
  if( (v0 & 0xFFFFFFFE) != 0 )
    return 3221225711i64;
  LODWORD(v9) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
  v10 = (_DWORD *)v9;
  if( !v9 )
    return 3221225626i64;
  if( (v5 & 2) != 0 )
    *(_QWORD *)(v9 + 8) = 512i64;
  else
    *(_QWORD *)(v9 + 8) = (v5 & 1) != 0 ? 16i64 : 1i64;
  if( (v6 & 1) != 0 )
    *(_DWORD *)v9 |= 1u;
  if( (v5 & 0x10) != 0 )
    *(_DWORD *)(v9 + 72) = 0;
  else
    *(_DWORD *)(v9 + 72) = ((v5 & 8) != 0) + 1;
  *(_QWORD *)(v9 + 40) = 0i64;
  *(_QWORD *)(v9 + 32) = v7;
  if( (v5 & 4) != 0 )
  {
    if( (*(_DWORD *)(MiGetAweInfoPartition(v9) + 4) & 0x40) == 0 )
    {
      v11 = -1073741637;
LABEL_18:
      ExFreePoolWithTag(v10, 0);
      return v11;
    }
    if( !SeSinglePrivilegeCheck(*(_QWORD *)&SeTcbPrivilege, v4) )
    {
      v11 = -1073741727;
      goto LABEL_18;
    }
    *v10 |= 4u;
  }
  AweInfoBitMap = MiCreateAweInfoBitMap((INT64)v10);
  if( AweInfoBitMap < 0 )
  {
    MiDeleteAweInfo(*((_QWORD *)KeGetCurrentThread() + 23), v10, v13);
  }
  else
  {
    ExInitializeAutoExpandPushLock((_EX_PUSH_LOCK_AUTO_EXPAND *)(v10 + 14), 1ui64);
    *v10 |= 2u;
    if( v7 )
    {
      *(_DWORD *)(v7 + 92) |= 0x20000u;
      *(_QWORD *)(v7 + 8) = v10;
    }
    *v14 = v10;
  }
  return(unsigned int)AweInfoBitMap;
}

Referenced by:

MiCreatePagingFileMap
MiCreateProcessDefaultAweInfo