KiDetectAmdNonArchSsbdSupport

VOID __stdcall KiDetectAmdNonArchSsbdSupport(INT64 a1){
  __int32 v2; 
  __int64 v3; 

  if( (KiSpeculationFeatures & 0x80u) == 0i64 )
  {
    if( (unsigned int)EAX(__cpuid(0x80000000, 0)) < 0x80000008 )
      v2 = 0;
    else
      v2 = EBX(__cpuid(-2147483640, 0));
    if( (v2 & 0x2000000) != 0 )
    {
      DWORD1(KiSpeculationFeatures) = -1073676001;
      KiSsbdMsr = -1073676001;
      LODWORD(KiSpeculationFeatures) = KiSpeculationFeatures | 0x80;
      return;
    }
    if( !HviIsAnyHypervisorPresent() )
    {
      switch( *(_BYTE *)(a1 + 64) )
      {
        case 0x15:
          v3 = 0x40000000000000i64;
          break;
        case 0x16:
          v3 = 0x200000000i64;
          break;
        case 0x17:
          v3 = 1024i64;
          break;
        default:
          return;
      }
      LODWORD(KiSpeculationFeatures) = KiSpeculationFeatures | 0x80;
      DWORD1(KiSpeculationFeatures) = -1073672160;
      KiSsbdMsr = -1073672160;
      *((_QWORD *)&KiSpeculationFeatures + 1) = v3;
      KiSsbdBit = v3;
    }
  }
}

Referenced by:

No references.