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