W Windows opartych na architekturze x64 nadal możemy uruchamiać
oprogramowanie 32 bitowe. Dowiedzmy się jak to jest możliwe oraz, czy starsze
programy działają tak samo wydajnie, jak na systemach 32 bitowych.
Wstęp
Oprogramowanie 64 bitowe wymaga zmiany kodu w celu dostosowania go do pracy w
nowym środowisku. Więc, aby wykorzystać pełnię możliwości naszego systemu bazującego na
architekturze x64 powinniśmy posiadać odpowiednio przekompilowane aplikacje. Niestety nie
wszystkie programy do tej pory doczekały się swoich 64 bitowych odpowiedników
przeznaczonych do pracy pod kontrolą nowych systemów operacyjnych. Jednakże w 64
bitowych OS'ach z rodziny Windows został zaimplementowany mechanizm
umożliwiający uruchamianie starszych aplikacji. Microsoft jednakże całkowicie
zrezygnował z podsystemu 16 bitowego, także w Windows Vista 32 bit.
Za możliwość uruchamiania programów 32 bitowych w Windows x64 odpowiada
zaimplementowana,
specjalnie do tego celu, warstwa translacyjna o nazwie WoW64
(WindowsOnWindows64).
Budowa emulatora WoW64
Pliki emulatora zlokalizowane są w katalogu Windows\System32\WOW64 na
partycji systemowej. W skład mechanizmu WoW64 wchodzą następujące biblioteki:
- Wow64.dll - odpowiada za strukturę emulacji środowiska.
- Wow64Win.dll - odpowiada za funkcję punktów wejścia dla pliku
Win32k.sys.
- Wow64Cpu.dll - odpowiada za emulację instrukcji x86 w
procesorach Intel Itanium (ia64), które nie posiadają wbudowanej obsługi
instrukcji 32 bitowych x86. Nie jest wykorzystywana przez procesory bazujące
na architekturze x64, gdyż są one zgodne wstecznie, a obsługa 64 bitowych
instrukcji jest jedynie rozszerzeniem ich możliwości.
- Ntdll.dll - w systemach x64 bitowych znajduje się 64
bitowa wersja tej biblioteki i nie możliwe jest jej wykorzystanie podczas
uruchamiania oprogramowania 32 bitowego. Służy do tego, ładowana podczas
startu, 32 bitowa odmiana tej biblioteki.
Jak to działa?
Podczas uruchamiania systemu WoW64 ładuje 32 bitową bibliotekę Ntdll.dll,
następnie inicjowany jest jej kod, który uruchamia niezbędne, pozostałe 32 bitowe
pliki. Większość z nich jest kopią pochodzącą z Windows 32 bit. Niektóre
jednakże zostały napisane od nowa, gdyż wymagała tego zgodność z translatorem Windows on
Windows 64. Pamiętajmy jednak, iż w wypadku uruchomienia starszego programu
nadal panują narzuty znane ze środowiska Windows 32 bit.
Programy, które instalujemy w środowisku Windows są umieszczane domyślnie w
katalogu Program Files na dysku systemowym. Jednakże w Windows x64 odnajdziemy
dwa tego typu foldery - pierwszy, wspomniany, gdzie znajdziemy oprogramowanie
64 bitowe oraz drugi, mianowicie Program Files x86, w którym to instalowane są
starsze programy - 32 bitowe. Pamiętajmy, aby nie instalować aplikacji 32
bitowych w folderze Program Files, gdyż może to wpłynąć na stabilność
funkcjonowania programu
oraz samego środowiska Windows.

Podczas uruchamiania programu 32 bitowego tworzona jest sekwencja odwoławcza.
Jednakże proces ten w trybie użytkownika nie może być zrealizowany przez system 64
bitowy. I tutaj wkracza do akcji emulator WindowsOnWindows64. Sekwencja jest przechwytywana przez
komponent Wow64.dll i polecenie jest wykonywane przez procesor w natywnym
środowisku 64 bitowym. Dokładny schemat działania aplikacji 32 bitowej w
systemie Windows x64 pokazuje grafika poniżej.

Ograniczenia WoW64
Emulator WindowsOnWindows64 posiada jednakże pewne ograniczenia. Poniżej
możemy zobaczyć listę przedstawiającą restrykcje, które narzuca ten mechanizm
podczas wykonywania kodu 32 bitowego: