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