MiAllocateAweInfo
NTSTATUS __stdcall MiAllocateAweInfo(WCHAR *SourceString){
int v1;
char v2;
INT8 v3;
INT8 v4;
char v5;
char v6;
_DWORD *Pool;
_DWORD *v10;
__int64 v11;
NTSTATUS v12;
int AweInfoBitMap;
_QWORD *v14;
v4 = v3;
v5 = v2;
v6 = v1;
*v14 = 0i64;
if( (v1 & 0xFFFFFFFE) != 0 )
return -1073741585;
Pool = MiAllocatePool(64i64, 0x50ui64, 0x77416D4Dui64);
v10 = Pool;
if( !Pool )
return -1073741670;
if( (v5 & 2) != 0 )
*((_QWORD *)Pool + 1) = 512i64;
else
*((_QWORD *)Pool + 1) = (v5 & 1) != 0 ? 16i64 : 1i64;
if( (v6 & 1) != 0 )
*Pool |= 1u;
if( (v5 & 0x10) != 0 )
Pool[18] = 0;
else
Pool[18] = ((v5 & 8) != 0) + 1;
*((_QWORD *)Pool + 5) = 0i64;
*((_QWORD *)Pool + 4) = SourceString;
if( (v5 & 4) != 0 )
{
LODWORD(v11) = MiGetAweInfoPartition((INT64)Pool);
if( (*(_DWORD *)(v11 + 4) & 0x40) == 0 )
{
v12 = -1073741637;
LABEL_18:
ExFreePoolWithTag(v10, 0);
return v12;
}
if( !SeSinglePrivilegeCheck(*(_QWORD *)&SeTcbPrivilege, v4) )
{
v12 = -1073741727;
goto LABEL_18;
}
*v10 |= 4u;
}
AweInfoBitMap = MiCreateAweInfoBitMap(v10);
if( AweInfoBitMap < 0 )
{
MiDeleteAweInfo((ULONG_PTR)KeGetCurrentThread()->ApcState.Process, v10);
}
else
{
ExInitializeAutoExpandPushLock((_EX_PUSH_LOCK_AUTO_EXPAND *)(v10 + 14), 1ui64);
*v10 |= 2u;
if( SourceString )
{
*((_DWORD *)SourceString + 23) |= 0x20000u;
*((_QWORD *)SourceString + 1) = v10;
}
*v14 = v10;
}
return AweInfoBitMap;
}Referenced by:
MiCreatePagingFileMap
MiCreateProcessDefaultAweInfo