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