Heim >Backend-Entwicklung >C++ >Wie kann man die Windows 10-Version plattformübergreifend zuverlässig erkennen?
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!