ホームページ >バックエンド開発 >C++ >プラットフォーム間で Windows 10 のバージョンを確実に検出するにはどうすればよいですか?

プラットフォーム間で Windows 10 のバージョンを確実に検出するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-05 18:32:02222ブラウズ

How to Reliably Detect Windows 10 Version Across Platforms?

クロスプラットフォームの 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。