Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengesan Versi Windows 10 Merentasi Platform dengan Amanah?

Bagaimana untuk Mengesan Versi Windows 10 Merentasi Platform dengan Amanah?

DDD
DDDasal
2024-11-05 18:32:02222semak imbas

How to Reliably Detect Windows 10 Version Across Platforms?

Pengesanan Windows 10 Cross-Platform

Menentukan versi Windows 10 selalunya bermasalah kerana batasan fungsi terbina dalam seperti IsWindows10OrGreater( ). Isu ini menjadi lebih mendesak apabila keserasian merentas platform diingini.

Penyelesaian Universal

Untuk mengatasi halangan ini, dicadangkan untuk menggunakan fungsi RtlGetVersion. Fungsi ini memintas shims keserasian dan memberikan akses kepada versi OS sebenar. Walaupun ia tersedia dalam DDK, ia juga boleh digunakan melalui pemautan dinamik masa jalan menggunakan coretan kod berikut:

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;
}

Coretan ini mengembalikan versi OS sebenar pada Windows 10, walaupun tanpa manifes.

Pendekatan Alternatif

Penyelesaian alternatif memfokuskan pada penggunaan ciri dan bukannya versi OS. Ini membolehkan pendekatan yang lebih fleksibel di mana pelaksanaan berbeza disediakan berdasarkan keupayaan yang ada.

Atas ialah kandungan terperinci Bagaimana untuk Mengesan Versi Windows 10 Merentasi Platform dengan Amanah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn