首页 >后端开发 >C++ >如何跨平台可靠检测Windows 10版本?

如何跨平台可靠检测Windows 10版本?

DDD
DDD原创
2024-11-05 18:32:02214浏览

How to Reliably Detect Windows 10 Version Across Platforms?

跨平台 Windows 10 检测

由于 IsWindows10OrGreater( 等内置函数的限制,确定 Windows 10 版本通常会出现问题)。当需要跨平台兼容性时,这个问题变得更加紧迫。

通用解决方案

为了克服这些障碍,建议使用 RtlGetVersion 函数。此功能绕过兼容性填充程序并授予对真实操作系统版本的访问权限。虽然它在 DDK 中可用,但也可以使用以下代码片段通过运行时动态链接来调用:

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(&rovi) ) {
                return rovi;
            }
        }
    }
    RTL_OSVERSIONINFOW rovi = { 0 };
    return rovi;
}

此片段返回 Windows 10 上的实际操作系统版本,即使没有清单也是如此。

替代方法

替代解决方案侧重于利用功能而不是操作系统版本。这允许更灵活的方法,根据可用功能提供不同的实现。

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

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