首页 >后端开发 >C++ >如何从跨平台角度准确检测Windows 10版本?

如何从跨平台角度准确检测Windows 10版本?

Barbara Streisand
Barbara Streisand原创
2024-11-05 04:16:01687浏览

How Can I Accurately Detect Windows 10 Version From a Cross-Platform Perspective?

Windows 10 版本的跨平台检测

从跨平台角度准确检测 Windows 10 的任务可能具有挑战性,因为不同 Windows 版本之间的版本报告不一致。虽然 IsWindows10OrGreater() 函数很容易使用,但它在早期 Windows 版本中的缺失造成了障碍。

检索真实操作系统版本

有效的解决方案在于绕过兼容性填充程序并直接访问底层操作系统版本信息。这可以使用 Windows 驱动程序开发工具包 (DDK) 中的 RtlGetVersion 函数来实现。

运行时动态链接

为了避免对 DDK 的依赖,运行时动态链接可以如下所示使用:

<code class="C++">typedef LONG NTSTATUS, *PNTSTATUS;
#define STATUS_SUCCESS (0x00000000)

typedef NTSTATUS (WINAPI* RtlGetVersionPtr)(PRTL_OSVERSIONINFOW);

RTL_OSVERSIONINFOW GetRealOSVersion() {
    HMODULE hMod = ::GetModuleHandleW(L"ntdll.dll");
    if (hMod) {
        RtlGetVersionPtr fxPtr = (RtlGetVersionPtr)::GetProcAddress(hMod, "RtlGetVersion");
        if (fxPtr != nullptr) {
            RTL_OSVERSIONINFOW rovi = { 0 };
            rovi.dwOSVersionInfoSize = sizeof(rovi);
            if ( STATUS_SUCCESS == fxPtr(&amp;rovi) ) {
                return rovi;
            }
        }
    }
    RTL_OSVERSIONINFOW rovi = { 0 };
    return rovi;
}</code>

通过调用此函数,可以检索真实的操作系统版本,无论任何兼容性填充程序或清单设置。

替代方法

考虑从识别支持的功能的角度来解决问题,而不是仅仅依赖操作系统版本。这种方法为未来的更新和增强提供了更大的灵活性和适应性。

以上是如何从跨平台角度准确检测Windows 10版本?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn