クロスプラットフォームの Windows 10 検出
Windows 10 のバージョンの判別は、IsWindows10OrGreater( などの組み込み関数の制限のため、問題が発生することがよくあります) )。クロスプラットフォーム互換性が必要な場合、この問題はさらに緊急になります。
ユニバーサル ソリューション
これらの障害を克服するには、RtlGetVersion 関数を使用することをお勧めします。この機能は互換性シムをバイパスし、実際の OS バージョンへのアクセスを許可します。これは 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 の実際の OS バージョンを返します。
代替アプローチ
代替ソリューションは、OS のバージョンではなく機能の利用に焦点を当てています。これにより、利用可能な機能に基づいてさまざまな実装が提供される、より柔軟なアプローチが可能になります。
以上がプラットフォーム間で Windows 10 のバージョンを確実に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。