跨平台 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中文网其他相关文章!