KiGetProcessorSignature

INT64 __fastcall KiGetProcessorSignature(_BYTE *a1, INT64 *a2, INT64 *a3, _DWORD *a4){
  char CpuVendor; 
  INT64 result; 
  int v10; 
  int v11; 
  CpuVendor = KiGetCpuVendor();
  LODWORD(result) = EAX(__cpuid(1, 0));
  v10 = BYTE1(result) & 0xF;
  if( v10 == 15 )
  {
    v10 = (unsigned __int8)((unsigned int)result >> 20) + 15;
    v11 = (unsigned __int64)(result & 0xF0 | ((unsigned int)result >> 8) & 0xF00) >> 4;
  }
  else
  {
    v11 = (unsigned __int8)result >> 4;
  }
  if( (CpuVendor == 2 || CpuVendor == 3) && v10 == 6 )
    v11 |= ((unsigned int)result >> 12) & 0xF0;
  if( a1 )
    *a1 = CpuVendor;
  if( a2 )
    *(_DWORD *)a2 = v10;
  if( a3 )
    *(_DWORD *)a3 = v11;
  if( a4 )
    *a4 = result & 0xF;
  return(unsigned int)result;
}

Referenced by:

KiInitializeBootStructures
KiSetFeatureBits