Heim >Backend-Entwicklung >C++ >Wie kann ich die Windows 10-Version aus plattformübergreifender Sicht genau erkennen?

Wie kann ich die Windows 10-Version aus plattformübergreifender Sicht genau erkennen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-05 04:16:01719Durchsuche

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

Plattformübergreifende Erkennung der Windows 10-Version

Die Aufgabe, Windows 10 aus einer plattformübergreifenden Perspektive genau zu erkennen, kann aufgrund von schwierig sein Inkonsistenzen in der Versionsberichterstattung über verschiedene Windows-Versionen hinweg. Während die Funktion IsWindows10OrGreater() leicht verfügbar ist, stellt ihr Fehlen in früheren Windows-Versionen eine Hürde dar.

Abrufen der wahren Betriebssystemversion

Eine effektive Lösung liegt in der Umgehung von Kompatibilitäts-Shims und direkter Zugriff auf die zugrunde liegenden Betriebssystemversionsinformationen. Dies kann mit der RtlGetVersion-Funktion aus dem Windows Driver Development Kit (DDK) erreicht werden.

Dynamische Laufzeitverknüpfung

Um eine Abhängigkeit vom DDK zu vermeiden, kann eine dynamische Laufzeitverknüpfung erfolgen wie unten gezeigt eingesetzt werden:

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

Durch Aufrufen dieser Funktion kann die wahre Betriebssystemversion abgerufen werden, unabhängig von Kompatibilitäts-Shims oder Manifest-Einstellungen.

Alternativer Ansatz

Erwägen Sie, das Problem aus der Perspektive der Identifizierung unterstützter Funktionen anzugehen, anstatt sich ausschließlich auf Betriebssystemversionen zu verlassen. Dieser Ansatz bietet eine größere Flexibilität und Anpassungsfähigkeit an zukünftige Updates und Erweiterungen.

Das obige ist der detaillierte Inhalt vonWie kann ich die Windows 10-Version aus plattformübergreifender Sicht genau erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn