Heim >Backend-Entwicklung >C++ >Wie kann man die Windows 10-Version plattformübergreifend zuverlässig erkennen?

Wie kann man die Windows 10-Version plattformübergreifend zuverlässig erkennen?

DDD
DDDOriginal
2024-11-05 18:32:02214Durchsuche

How to Reliably Detect Windows 10 Version Across Platforms?

Plattformübergreifende Windows 10-Erkennung

Die Bestimmung der Windows 10-Version ist aufgrund der Einschränkungen integrierter Funktionen wie IsWindows10OrGreater( ). Dieses Problem wird noch dringlicher, wenn plattformübergreifende Kompatibilität gewünscht wird.

Eine universelle Lösung

Um diese Hindernisse zu überwinden, wird empfohlen, die RtlGetVersion-Funktion zu verwenden. Diese Funktion umgeht die Kompatibilitäts-Shims und gewährt Zugriff auf die echte Betriebssystemversion. Obwohl es im DDK verfügbar ist, kann es auch durch dynamische Laufzeitverknüpfung mit dem folgenden Code-Snippet aufgerufen werden:

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

Dieses Snippet gibt die tatsächliche Betriebssystemversion unter Windows 10 zurück, auch wenn kein Manifest vorhanden ist.

Ein alternativer Ansatz

Eine alternative Lösung konzentriert sich auf die Nutzung von Funktionen statt auf Betriebssystemversionen. Dies ermöglicht einen flexibleren Ansatz, bei dem unterschiedliche Implementierungen basierend auf den verfügbaren Funktionen bereitgestellt werden.

Das obige ist der detaillierte Inhalt vonWie kann man die Windows 10-Version plattformübergreifend zuverlässig 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