ホームページ  >  記事  >  バックエンド開発  >  クロスプラットフォームの観点から Windows 10 のバージョンを正確に検出するにはどうすればよいですか?

クロスプラットフォームの観点から Windows 10 のバージョンを正確に検出するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-05 04:16:01623ブラウズ

How Can I Accurately Detect Windows 10 Version From a Cross-Platform Perspective?

Windows 10 バージョンのクロスプラットフォーム検出

クロスプラットフォームの観点から Windows 10 を正確に検出するタスクは、次の理由により困難な場合があります。異なる Windows バージョン間でのバージョン レポートの不一致。 IsWindows10OrGreater() 関数はすぐに利用できますが、以前の Windows バージョンにはこの関数が存在しないため、ハードルが生じます。

真の OS バージョンの取得

効果的な解決策は、互換性シムをバイパスすることです。基礎となる OS バージョン情報に直接アクセスします。これは、Windows Driver Development Kit (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(&amp;rovi) ) {
                return rovi;
            }
        }
    }
    RTL_OSVERSIONINFOW rovi = { 0 };
    return rovi;
}</code>

この関数を呼び出すと、互換性シムやマニフェスト設定に関係なく、実際の OS バージョンを取得できます。

代替アプローチ

OS のバージョンだけに依存するのではなく、サポートされている機能を特定するという観点から問題に対処することを検討してください。このアプローチにより、将来のアップデートや機能拡張に対する柔軟性と適応性が向上します。

以上がクロスプラットフォームの観点から Windows 10 のバージョンを正確に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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