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