WoW64 automatische Ordnerumleitung
Sind C:\windows\system32 und C:\windows\SysWow64 dasselbe?
Nein.
Es gibt beide Ordner nur auf 64-bit Windows Versionen.
Unter Windows 64-bit leben ja echte 64-bit Programme und 32-bit Programme zusammen. 64-bit Programme brauchen echte 64-bit DLLs. 32-bit Programme brauchen echte 32-bit DLLs. Die 64-bit und die 32-bit DLLs heißen oft genau gleich, dürfen sich aber niemals in die Quere kommen. Man muß sie also sauber trennen und in verschiedenen Ordnerbäumen ablegen.
Der Ordner C:\Windows\System32 und seine Unterordner enthält bei 64-bit Windows Versionen ironischerweise die 64-bit DLLs, Treiber und Executables (ausführbare Dateien).
Der Ordner C:\Windows\SysWow64 und seine Unterordner enthält bei 64-bit Windows Versionen die 32-bit DLLs, Treiber und Executables (ausführbare Dateien).
Darum sind beide Ordnerbäume gleich aufgebaut und enthalten so viele gleichnamige Dateien. Allerdings sind es einmal die 64-bit Versionen und einmal die 32-bit Versionen. Die Dateigrößen werden i.d.R. auch nicht übereinstimmen.
Warum gibt es C:\windows\System32 und C:\windows\SysWow64?
Microsoft hatte folgende geniale Idee:
Wir benutzen für die 64-bit Teile vom 64-bit Windows den alten Ordnernamen C:\windows\system32 weiter und legen dort 64-bit DLLs, Treiber und Executables (ausführbare Dateien) ab.
Für die 32-bit Programme erfinden wir als Ersatz C:\windows\SysWOW64 (Windows auf Windows 64) und legen dort 32-bit DLLs, Treiber und und Executables (ausführbare Dateien) ab.
Jetzt hatte Microsoft ein kleines Problem:
64-bit Programme suchen DLLs in C:\windows\system32. Aber auch 32-bit Programme suchen DLLs in C:\windows\System32. Dort liegen aber schon gleichnamige 64-bit DLLs, die die 32 bit Programme auf keinen Fall benutzen können.
Und nun kommt die automatische Ordnerumleitung ins Spiel:
Wenn ein 32-bit Programm DLLs, Treiber oder Executables aus C:\Windows\System32 anfragt, dann sucht 64-bit Windows diese Dateien stattdessen in C:\Windows\SysWow64. Es erzählt dem 32-bit Programm jedoch, es habe die Dateien aus C:\Windows\System32 geholt.
Wenn ein 32-bit Programm in den Ordner C:\Windows\System32 wechseln will, dann schickt das 64-bit Windows das 32-bit Programm stattdessen in den Ordner C:\Windows\SysWow64.
Es erzählt dem 32-bit Programm jedoch, es stehe jetzt im Pfad C:\windows\system32. Und so wird das 32-bit Programm es auch anzeigen.
Im Klartext Wow64 belügt 32-bit Programme:
Das 64-bit Windows belügt 32-bit Programme über manche Ordnernamen. Genauer gesagt ist dafür das WoW64 Subsystem zuständig, das 32-bit Programme auf 64-bit Windows betreibt.
Deshalb wird ein 32-bit Programm in C:\windows\system32 und darunter die gleichen Dateien und Ordner finden wie in C:\Windows\sysWow64, weil es in Wirklichkeit immer nach C:\Windows\SysWow64 geschickt wird.
Das Hintertürchen SysNative:
Irgendwann ist auch Microsoft das Licht aufgegangen, dass es Gelegenheiten gibt, in denen 32-bit Programme den echten Ordner C:\windows\system32 und seine Dateien und Unterordner sehen und darauf zugreifen müssen. (Z.B. Datei Manager beim Kopieren, Verschieben, Ordnerinhalt einfach auflisten)
Da ist Microsoft auf die Idee verfallen: Wir stellen 32-bit Programmen einfach einen unsichtbaren Aliasnamen sysnative zur Verfügung. Wenn ein 32-bit Programm nun verlangt, Zugang zu bekommen auf C:\windows\system32, indem es dessen Aliasnamen sysnative benutzt, also C:\Windows\Sysnative, dann wird es nicht nach C:\Windows\SysWow64 umgeleitet und darüber belogen. Dann darf es in den echten Ordner C:\Windows\System32.
Verfehlter Ansatz:
Man hätte die verwirrende automatische Ordnerumleitung vermeiden können, wenn man bei der Erfindung des 64-bit Windows sich entschieden hätte, 64-bit DLLs, Treiber und ausführbare Dateien in C:\Windows\System64 und Unterordnern abzulegen.