Mar*_*ver 5 windows registry processor simd
我在安装程序中使用一些基本的处理器检测,以确定用户应该可以使用哪个版本的软件包。目前,我正在通过 WMI 获取一些基本信息,但我发现这样做时,我经常会得到不可靠的 CPU 功能结果(显然,许多移动处理器对 CPUID 的支持很差)。
为了避免此类问题并加快速度,我一直在考虑从 Windows 注册表获取处理器功能 - 毕竟,所有信息都应该在那里可用,位于HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor下{n} 从注册表中读取密钥使安装程序的代码更加简单,无需调用 WMI(速度很慢并且可能会失败,因为我必须依赖于调用具有 WMI 访问权限的 VBScript 等语言,虽然注册表操作在我的开发脚本语言中作为标准支持),并且应该避免通过它从 CPU 值问题中获取不正确的信息。
当然,我找到了大量信息,但最重要的部分,即存储在那里的“ FeatureSet ”值,我认为它是一个 DWORD,包含有关可用处理器功能(如 SIMD 指令集等)的标志,但没有在任何地方记录。我花了很长时间在网上搜索,试图找到有关此注册表值的任何类型的文档,但无济于事。
有人有概述或描述该注册表值中的位的文档吗?
返回的字节对应FeatureSet于KCPRBFeatureSet结构的字段。
虽然它们没有在任何地方具体记录,但该站点列出了映射到各种标头的相应位:
\n\n\nKPRCB 中的功能位
\nMicrosoft\xe2\x80\x99s 的一些功能位名称可从各种开发工具包中的汇编语言标头 KS386.INC 和 KSAMD64.INC 中获知,从 Windows Server 2003 SP1 的设备驱动程序工具包 (DDK) 开始。许多特征位的名称可以很容易地被假设,因为大多数特征位直接对应于一个或另一个 cpuid 叶的输出中的单个位。
\n
Windows SDK 中的这些文件(ks386.inc和ksamd.inc)包含 7 个标志,但注释给出了内部变量名称KeFeatureBits,您可以使用该名称在 SDK 中搜索其他位的许多其他测试。
向下滚动列表,这些位似乎在很大程度上与 CPUID 中的标志子集匹配,但顺序不同,而且它们似乎都不能识别 SIMD。
\n