WOW64
WOW64 (Windows-On-Windows 64-bit) ist ein Subsystem des Windows-Betriebssystems, das in der Lage ist, 32-Bit-Anwendungen auszuführen. WOW64 ist in allen 64-Bit-Versionen von Windows seit Windows 2000 und Windows XP enthalten. WOW64 berücksichtigt sämtliche Unterschiede zwischen 32-Bit-Windows und 64-Bit-Windows, insbesondere strukturelle Änderungen an Windows selbst.
Übersetzungs-Bibliotheken
Das WOW64-Subsystem ist eine leichtgewichtige Übersetzungsschicht, die auf allen 64-Bit-Versionen von Windows ähnliche Schnittstellen anbietet. Ihr hauptsächlicher Zweck ist die Schaffung einer 32-Bit-Umgebung, welche sämtliche Schnittstellen zur Verfügung stellt, die 32-Bit-Windows-Anwendungen benötigen, um ohne Anpassungen auf einem 64-Bit-System zu laufen. Aus technischer Sicht ist WOW64 in vier Programmbibliotheken (DLLs) implementiert:
Wow64.dll
beinhaltet die Hauptschnittstellen zum Kernel von Windows NT, welche zwischen 32-Bit- und 64-Bit-Aufrufen übersetzen, inklusive Zeiger- und Call-Stack-ManipulationenWow64win.dll
stellt die entsprechenden Einsprungpunkte für 32-Bit-Anwendungen zur VerfügungWow64cpu.dll
berücksichtigt die Umschaltung des Prozessors zwischen 32-Bit- und 64-Bit-ModusNtdll.dll
ist die DLL für NT-Layer
Architekturen
Trotz der äußerlichen Ähnlichkeit auf allen 64-Bit-Versionen von Windows unterscheidet sich die Implementierung von WOW64 aufgrund der Architektur des Ziel-Prozessors. Die 64-Bit-Version von Windows beispielsweise, welche für Intel-Itanium-2-Prozessoren entwickelt wurde (von Intel IA-64 genannt), benutzt die Wow64win.dll
für die Emulation von x86-Anweisungen mittels des Itanium-Befehlssatzes. Diese Emulation ist rechenaufwendiger als die Funktionen der Wow64win.dll
auf der nativen 64-Bit-x86-Architektur „x64“ (die als Erweiterung ein Teil von IA-32 ist), welche lediglich den Prozessor aus dem 64-Bit-Modus in den 32-Bit-Modus schaltet, während ein 32-Bit-Thread ausgeführt wird, und wodurch für WOW64 keinerlei Emulation notwendig ist.
Registrierungsdatenbank und Dateisystem
Während der Programmausführung lädt Wow64.dll die 32-Bit-Version von Ntdll.dll und alle notwendigen 32-Bit-DLLs, die weitgehend unveränderte 32-Bit-Versionen sind.
Das WOW64-Subsystem berücksichtigt auch andere wichtige Aspekte für die Ausführung von 32-Bit-Anwendungen. Das betrifft unter anderem die Verwaltung von Zugriffen auf die Windows-Registrierungsdatenbank (siehe HKEY_LOCAL_MACHINE\Software\WOW6432Node) sowie auf das Dateisystem, welche in den 64-Bit-Versionen von Windows geringfügige Unterschiede aufweisen.
Normalerweise würde man – wie damals beim Schritt von 16 nach 32 Bit – von einem 64-Bit-Windows erwarten, dass sich die neuen 64-Bit-Systemkomponenten im Verzeichnis %SystemRoot%\system64 befinden und Namen wie kernel64.dll, user64.dll usw. tragen. Das wäre relativ unproblematisch, da die entsprechende 64-Bit-Software ohnehin neu kompiliert werden muss.
Zwecks Rückwärts-Kompatibilität nutzt das Betriebssystem jedoch das %SystemRoot%\system32-Verzeichnis und unveränderte DLL-Namen für seine 64-Bit-Komponenten. Bei der Ausführung von 32-Bit-Anwendungen werden Zugriffe auf Bibliotheken aus diesem Verzeichnis nach %SystemRoot%\SysWOW64 umgeleitet, wo sich die entsprechenden 32-Bit-Versionen befinden. Ausgenommen von dieser automatischen Umleitung sind die Verzeichnisse[1]
%SystemRoot%\system32\catroot %SystemRoot%\system32\catroot2 %SystemRoot%\system32\driverstore %SystemRoot%\system32\drivers\etc %SystemRoot%\system32\logfiles %SystemRoot%\system32\spool %SystemRoot%\system32\driverstore (nur bei Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP)
Analog dazu werden Zugriffe auf die Windows-Registrierungsdatenbank von HKEY_LOCAL_MACHINE\Software nach HKEY_LOCAL_MACHINE\Software\WOW6432Node umgeleitet. Durch Referenzierung eines einzig zu diesem Zweck geschaffenen, rein virtuellen Verzeichnisses %SystemRoot%\Sysnative ist es 64-Bit-fähigen Anwendungen jedoch auch unter WOW64 möglich, auf die nativen Bibliotheken zuzugreifen.
Implementierungen außerhalb von Windows
Neben dem in aktuellen Windows-Versionen enthaltenen WOW64-Subsystem von Microsoft gibt es auch Varianten für andere Betriebssysteme. Diese Nachbildungen dienen dazu, Windows-32-Bit-Anwendungsprogramme ohne Windows-Betriebssystem auf einer Win64-API zu nutzen. So entwickelt z. B. das Wine[2]-Projekt eine freie WOW64-Nachbildung, die für Linux- und anderen Unix-Systeme verfügbar ist. Aus rechtlichen Gründen sind nicht alle Funktionen des originalen Subsystems vorhanden, was die Kompatibilität mit Anwendungsprogrammen einschränken kann. Da aber die wenigsten Anwendungsprogramme alle Funktionen der Win32-API benötigen, sind viele trotzdem voll nutzbar.
Siehe auch
Weblinks
- Windows On Windows 64 (englisch)
- Übersicht über Kompatibilitätsfragen für 32-Bit-Programme unter 64-Bit-Versionen von Windows Server 2003 und Windows XP
- WoW64 Wissensartikel (planet3dnow.de 2004) (deutsch)
- WOW64 Implementation Details im MSDN (englisch)
Einzelnachweise
- ↑ https://msdn.microsoft.com/en-us/library/aa384187(VS.85)
- ↑ Shared WoW64. Building Wine. Wine-Project, abgerufen am 6. Mai 2017 (englisch).