PspHardenMitigationOptions
NTSTATUS __stdcall PspHardenMitigationOptions(UINT64 *MitigationOptions){
UINT64 v2;
UINT64 v3;
UINT64 v4;
unsigned __int64 v5;
unsigned __int8 v6;
UINT64 v7;
__m128i v9;
v2 = MitigationOptions[2];
v3 = *MitigationOptions;
v4 = *MitigationOptions - PspHardenedMitigationOptionsMap;
v9 = *(__m128i *)MitigationOptions;
if( *MitigationOptions == (_QWORD)PspHardenedMitigationOptionsMap )
{
v5 = _mm_srli_si128(*(__m128i *)MitigationOptions, 8).m128i_u64[0];
v4 = v5 - *((_QWORD *)&PspHardenedMitigationOptionsMap + 1);
if( v5 == *((_QWORD *)&PspHardenedMitigationOptionsMap + 1) )
v4 = MitigationOptions[2] - qword_140CFBC78;
}
if( v4 )
{
v6 = *(_OWORD *)MitigationOptions;
if( (v9.m128i_i8[0] & 3) != 1 )
{
v3 = v3 & 0xFFFFFFFFFFFFFFFCui64 | 1;
v9.m128i_i64[0] = v3;
v6 = v3;
}
if( (BYTE1(v3) & 3) != 3 )
{
v3 |= 0x300ui64;
v9.m128i_i64[0] = v3;
v6 = v3;
}
if( ((v3 >> 12) & 3) != 1 )
{
v3 = v3 & 0xFFFFFFFFFFFFCFFFui64 | 0x1000;
v9.m128i_i64[0] = v3;
v6 = v3;
}
if( ((v6 >> 4) & 3) != 1 )
{
v3 = v3 & 0xFFFFFFFFFFFFFFCFui64 | 0x10;
v9.m128i_i64[0] = v3;
}
if( (BYTE2(v3) & 3) != 1 )
{
v3 = v3 & 0xFFFFFFFFFFFCFFFFui64 | 0x10000;
v9.m128i_i64[0] = v3;
}
v7 = v3 >> 20;
LOBYTE(v7) = ((v3 >> 20) & 3) - 1;
if( (unsigned __int8)v7 > 1u )
{
v7 = (unsigned __int64)PspSystemMitigationOptions >> 20;
LOBYTE(v7) = ((unsigned __int64)PspSystemMitigationOptions >> 20) & 3;
if( (_BYTE)v7 != 2 )
v9.m128i_i64[0] = v3 & 0xFFFFFFFFFFCFFFFFui64 | 0x100000;
}
*(__m128i *)MitigationOptions = v9;
MitigationOptions[2] = v2;
}
return v7;
}Referenced by:
PspAllocateProcess