Geoff Chappell, Software Analyst
The CPU_VENDORS enumeration is a convenient classification of the vendor string that the cpuid instruction’s leaf 0 produces in the ebx, edx and ecx registers. The recognised vendors and the corresponding values in the enumeration are specific to the processor architecture. This page concerns itself only with 64-bit Windows for the processor architecture that’s variously named amd64 or x64. The x86 CPU_VENDORS is presented separately.
All versions of the x64 kernel save each processor’s vendor string into the processor’s KPRCB as the VendorString member but they also classify the vendor string to a 32-bit number which is then saved into the KPRCB as the 8-bit CpuVendor. The possible values are:
Value | Name | CPU Vendor String | Versions |
---|---|---|---|
0 | CPU_UNKNOWN | all | |
1 | CPU_AMD | AuthenticAMD | all |
HygonGenuine | 1809 and higher | ||
2 | CPU_INTEL | GenuineIntel | all |
3 | CPU_VIA | CentaurHauls | 6.1 and higher |
4 | HygonGenuine | 1803 only |
Curiously, although the x86 enumeration has slipped out as type information in public symbol files (including even for some user-mode modules), the x64 never has. Microsoft’s assembly-language names for three members are known from KSAMD64.INC starting with the Windows Driver Kit (WDK) for Windows 8. That they and CPU_UNKNOWN belong to a C-language enumeration named CPU_VENDORS is confirmed from the NTOSP.H from the Windows Driver Kit (WDK) for the original release of Windows 10 and for Version 1511.
Microsoft’s name for the short-lived case that Version 1803 makes for the vendor string HygonGenuine is not known. Later versions classify it as CPU_AMD.
The value CPU_UNKNOWN represents any processor whose vendor string is not recognised. It can be in the CpuVendor only very briefly. If the vendor is not identified, then 64-bit Windows stops with the UNSUPPORTED_PROCESSOR bug check (0x5D). Before a reworking for the 1803 edition of Windows 10, this is almost immediate.