Maison >développement back-end >C++ >Comment puis-je détecter avec précision la version de Windows 10 d'un point de vue multiplateforme ?

Comment puis-je détecter avec précision la version de Windows 10 d'un point de vue multiplateforme ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-05 04:16:01685parcourir

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

Détection multiplateforme de la version de Windows 10

La tâche de détection précise de Windows 10 d'un point de vue multiplateforme peut être difficile en raison de incohérences dans les rapports de version entre les différentes versions de Windows. Bien que la fonction IsWindows10OrGreater() soit facilement disponible, son absence dans les versions antérieures de Windows crée un obstacle.

Récupération de la véritable version du système d'exploitation

Une solution efficace consiste à contourner les cales de compatibilité et accéder directement aux informations de version du système d'exploitation sous-jacentes. Ceci peut être réalisé à l'aide de la fonction RtlGetVersion du Kit de développement de pilotes Windows (DDK).

Lien dynamique d'exécution

Pour éviter la dépendance au DDK, la liaison dynamique d'exécution peut être utilisé comme démontré ci-dessous :

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

En appelant cette fonction, la véritable version du système d'exploitation peut être récupérée, quels que soient les cales de compatibilité ou les paramètres du manifeste.

Approche alternative

Envisagez d'aborder le problème du point de vue de l'identification des fonctionnalités prises en charge plutôt que de vous fier uniquement aux versions du système d'exploitation. Cette approche offre une plus grande flexibilité et adaptabilité aux futures mises à jour et améliorations.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn