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