MiValidateAllocationType
INT64 __fastcall MiValidateAllocationType(INT64 a1, INT64 a2, UINT64 a3){
int v3;
int v5;
int ProtectionMask;
int v7;
v3 = a1;
if( (a1 & 0x9E038FFF) != 0 || (a1 & 0x1083000) == 0 )
return 3221225485i64;
if( (a1 & 0x61EC4000) == 0 )
return 0i64;
if( (a1 & 0x80000) != 0 && (_DWORD)a1 != 0x80000
|| (a1 & 0x1000000) != 0 && (_DWORD)a1 != 0x1000000
|| (a1 & 0x200000) != 0 && ((a2 & 0x90000000) != 0 || (a1 & 0x2000) == 0 || (a1 & 0x840000) != 0) )
{
return 3221225485i64;
}
v5 = a1 & 0x20400000;
if( (a1 & 0x20400000) == 541065216 )
{
if( (a1 & 0x40800000) != 0 )
return 3221225485i64;
}
else if( v5 == 0x20000000 && (a1 & 0x40C00000) != 0 )
{
return 3221225485i64;
}
if( (a1 & 0x800000) != 0 )
{
if( (a1 & 0x40400000) != 0 )
return 3221225485i64;
if( (a3 & 0xFFFFF9F9) == 0 )
goto LABEL_16;
}
else
{
if( v5 != 0x400000 )
{
if( (a1 & 0x40000000) == 0 || (a1 & 0x100000) == 0 )
goto LABEL_16;
return 3221225485i64;
}
if( (a1 & 0x2000) == 0 || (a1 & 0xFF8F9FFF) != 0 )
return 3221225485i64;
ProtectionMask = MiMakeProtectionMask((unsigned int)a3);
if( ProtectionMask != -1 && (ProtectionMask & 0xFFFFFFF8) != 16 )
{
v7 = ProtectionMask & 7;
if( v7 == 4 || v7 == 1 )
{
LABEL_16:
if( (v3 & 0x40000) != 0 )
{
if( (v3 & 0x2000) != 0 && (v3 & 0xBFEBDFFF) == 0 && (_DWORD)a3 == 1 )
return 0i64;
}
else if( (v3 & 0x4000) == 0 || (v3 & 0x2000) != 0 && (v3 & 0xDF9F8FFF) == 0 )
{
return 0i64;
}
return 3221225485i64;
}
}
}
return 3221225541i64;
}Referenced by:
MiAllocateVirtualMemoryPrepare