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