PspValidateMitigationOptions
NTSTATUS __stdcall PspValidateMitigationOptions(UINT64 MitigationOptions, UINT64 DisallowedOptions){
int v2;
char v4;
char *v5;
__int64 v6;
int v7;
__int64 v8;
__int64 v9;
__m128i v10;
int v11;
__m128i v13;
__int64 v14;
int v15[3];
char v16;
__m128i si128;
int v18;
int v19;
v15[0] = 0;
v2 = 9;
v15[1] = 1;
v4 = DisallowedOptions;
v15[2] = 2;
v5 = &v16;
v6 = 4i64;
do
{
*(_DWORD *)v5 = v2++;
v5 += 4;
--v6;
}
while( v6 );
v7 = 0;
v8 = *(_QWORD *)(MitigationOptions + 16);
v9 = 0i64;
si128 = _mm_load_si128((const __m128i *)&_xmm);
v18 = 32;
v10 = *(__m128i *)MitigationOptions;
v11 = 38;
v13 = *(__m128i *)MitigationOptions;
v19 = 33;
v14 = v8;
while( v4
|| (((unsigned __int64)v13.m128i_i64[(unsigned __int64)(unsigned int)(4 * v7) >> 6] >> ((4 * v7) & 0x3F)) & 4) == 0 )
{
if( (unsigned int)v9 < 0xD && v15[v9] == v7 )
{
v9 = (unsigned int)(v9 + 1);
}
else if( (((unsigned __int64)v13.m128i_i64[(unsigned __int64)(unsigned int)(4 * v7) >> 6] >> ((4 * v7) & 0x3F)) & 0xF) == 3 )
{
return -1073741811;
}
if( (unsigned int)++v7 >= 0x26 )
{
v13 = v10;
v14 = v8;
while( (((unsigned __int64)v13.m128i_i64[(unsigned __int64)(unsigned int)(4 * v11) >> 6] >> ((4 * v11) & 0x3F)) & 0xF) == 0 )
{
if( (unsigned int)++v11 >= 0x30 )
{
if( ((_mm_srli_si128(v10, 8).m128i_u64[0] >> 12) & 3) != 0 )
return -1073741811;
return 0;
}
}
return -1073741811;
}
}
return -1073741811;
}Referenced by:
PspBuildCreateProcessContext
PspInitPhase0
PspReadIFEOMitigationOptions