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(&rovi) ) { return rovi; } } } RTL_OSVERSIONINFOW rovi = { 0 }; return rovi; }</code>
通过调用此函数,可以检索真实的操作系统版本,无论任何兼容性填充程序或清单设置。
替代方法
考虑从识别支持的功能的角度来解决问题,而不是仅仅依赖操作系统版本。这种方法为未来的更新和增强提供了更大的灵活性和适应性。
以上是如何从跨平台角度准确检测Windows 10版本?的详细内容。更多信息请关注PHP中文网其他相关文章!