在过去的几周里,互联网上一直在热议 Windows 11 24H2 系统要求可能即将发生的变化,其中微软似乎希望在下一版 Windows 11(24H2 版)中强制使用基于 SSE 4.2 的指令 PopCnt。这意味着较旧的 CPU 无法启动 Canary build 25905,而且像使用单一命令技巧这样的绕过方法也不起作用。
虽然当时还不知道,但PopCnt似乎也是Windows 10上微软应用商店应用程序被破坏的罪魁祸首,旧处理器无法在这些系统上启动,往往会导致 "文件系统错误(-2147219196)"。
微软工程师马哈茂德-G-萨利赫(Mahmoud G Saleh)是 MSVC(微软 Visual C++)的首席软件工程经理,他后来证实,该问题与一个存在漏洞的 Visual C++ 库(VCLibs)软件包有关。他们写道:
您好,Visual C++ 团队已确认该问题是照片应用程序和其他应用程序所依赖的 vclibs 框架包中的一个回归。该问题会影响使用较旧硬件(不支持 SSE 4.2 指令)的计算机。微软目前正在验证解决方案,预计很快就会向受影响的用户推出。
早在去年 11 月,Masahiro Takegami 就发现了英特尔酷睿 2 Quad Q6600 上与 PopCnt 相关的错误。这个问题似乎是在 Visual Studio 17.8.0 更新版本中出现的。
Visual Studio 2022 的最新版本(17.9.1 版)修复了这个问题和其他一些错误。完整的更新日志如下:
此次发布的 Visual Studio 2022 17.9.1 版新增内容概要
- 为在 VS 17.9 中使用 16.11 C++ 工具集的客户将 16.11 MSVC 工具集更新到 16.11.34 (14.29.30154.0)。
- 修正了一个 Bug,即静态链接时使用的 libconcrt.lib 可能包含 SSE 4.2 指令,而该指令在旧版 X64 系统上是非法的。
- 通过 /clr,为 C++20 添加了 char8_t 作为内置类型的支持。
虽然这应该能解决 VS 代码问题以及应用程序在旧处理器上无法运行的问题,但旧芯片似乎不太可能在 Windows 11 24H2 上运行。当用户试图在此类系统上安装 24H2 版本时,Windows 11 版本的设置文件显然开始显示 "此 PC 的处理器不支持关键功能 (PopCnt)" 的信息。该信息表明,微软可能有意识地引入了这一变化。