32-bit programma in 64-bit Windows: informatie bij probleemoplossing

Daniel Dupré
0

Inhoudsopgave

Wist je dat een 32-bit programma alleen in 64-bit Windows werkt dankzij een subsysteem? En dat dit de oorzaak is van veel van de irritante dingen die je tegenkomt bij het beheer of probleemoplossing? We laten je zien op welke plekken je hier tegenaan kunt lopen.

Hoewel de clientedities van Windows Home, Pro, Enterprise enzovoort tot nu toe ook als 32-bit edities verkrijgbaar zijn, zal iemand die een nieuwe Windows-pc koopt in bijna alle gevallen een 64-bit versie van het besturingssysteem krijgen. Dit komt deels omdat de 32-bit adresruimte is beperkt tot 4 GB . Meer dan 4 GB werkgeheugen gebruiken kan alleen kan worden geregeld met trucs en dan ook nog eens alleen met ernstige beperkingen. Ter vergelijking: bij de 64-bit architectuur is de theoretische limiet 16 exabyte. Daarom bestaan de Windows Server-­edities al geruime tijd alleen als 64-bit varianten.

32-bit programma in 64-bit Windows

Afbeelding: Jan Bintakies

32-bit programma

Er zijn echter nog talloze Windows-programma’s waar alleen 32-bit versies van bestaan. En waarom ook niet? Elk 32-bit programma heeft zijn eigen 4 GB aan adresruimte, en dat is meestal ruim voldoende. Bovendien hoeven ontwikkelaars slechts één programma voor beide Windows-architecturen te ontwikkelen en te onderhouden. Want terwijl 32-bit toepassingen onder 64-bit Windows werken, is het omgekeerde niet het geval.

Dat een 32-bit programma onder 64-bit Windows werkt, is niet vanzelfsprekend. Dat is te danken aan een subsysteem waarvan veel gebruikers niet eens weten dat het bestaat. Niet alleen doet het zijn werk zonder problemen, maar ook zo snel, dat 32-bit ­toepassingen die onder 64-bit Windows draaien net zo snel zijn als onder 32-bit Windows, zowel volgens Micro­soft als volgens onze eigen ervaringen.

Slechts af en toe krijg je te maken met het subsysteem, bijvoorbeeld bij toepassingen die dicht op het systeem zitten. Beheerders en ontwikkelaars zullen het subsysteem wel wat vaker tegenkomen. Daarom staan we in dit artikel stil bij de plekken waar dit het geval is. Als voorbeeld nemen we de 64-bit versie van Windows 10, versie 1903.

Identificatie

Hoe weinig je over het algemeen te maken hebt met de architectuur van een programma onder 64-bit Windows, is al een indicatie hoe verrassend moeilijk die te identificeren is. Met Windows-programma’s lukt dat het eenvoudigste als het programma al actief is.

Open Taakbeheer (bijvoorbeeld met Ctrl+­Shift+Esc), klik eventueel op ‘Meer details’ onder in het venster en selecteer het tabblad Details. Klik met de rechtermuisknop op een van de kolom­koppen (Naam, PID …) en kies ‘Kolommen selecteren’ in het contextmenu. Plaats in het volgende dialoogvenster een vinkje voor Platform. Als je dan de naam van het programma opzoekt in de proceslijst, wordt in de kolom Platform de architectuur getoond.

32-bit of 64-bit programma Taakbeheer

Op de proceslijst van Taakbeheer kun je de architectuur van de actieve programma’s aflezen in de kolom Platform.

Van een programma dat nog niet actief is, kun je de architectuur ook met een standaardprogramma achterhalen, namelijk met de browser. Open daarin de pagina https://virustotal.com. Deze website, beheerd door Google, staat er met name om bekend dat je er uitvoerbare bestanden kunt uploaden voor een analyse door meer dan 60 virusscanners.

Wat minder bekend is, is dat je na het voltooien van de analyse op de webpagina kunt klikken op ‘Details’ en vervolgens in de sectie ‘Basic Properties’ in de regels ‘File type’ en ‘Magic’ meer informatie kunt vinden over het bestand, inclusief de architectuur. Maar let op, dit kan misleidend zijn. Want .NET-toepassingen hebben bijvoorbeeld helemaal geen architectuur, maar worden doorgaans identiek uitgevoerd in .NET-omgevingen van beide architecturen.

In dergelijke gevallen verschijnt hetzelfde uitvoerbare bestand in 32-bit Windows als een 32-bit proces in Taakbeheer en in 64-bit Windows als een 64-bit proces.

Met een andere truc kun je een 64-bit programma ook identificeren zonder een online verbinding. Klik op Eigenschappen in het contextmenu van het uitvoerbare bestand, vink tijdelijk ‘Dit programma uitvoeren in compatibiliteitsmodus voor’ aan op het tabblad Compatibiliteit en open het keuzemenu daaronder.

16-bit ook?

Als de lijst alleen Windows Vista, 7 en 8 bevat, is het een 64-bit programma. Bij een 32-bit programma verschijnen ook Windows 95, 98 en ME in de lijst. Deze verschijnen overigens ook bij 16-bit toepassingen. Die laatste kun je herkennen aan het feit dat een dubbelklik erop het volgende foutbericht ­oplevert: ‘Deze app kan niet worden uitgevoerd op uw pc’. 16-bit programma’s werken namelijk niet onder 64-bit Windows. Als je ze nog steeds wilt gebruiken, kan dat bijvoorbeeld via de opensource-emulator DOSBox.

Je zou kunnen inbrengen dat er 32-bit programma’s zijn met een 16-bit installatieprogramma dat probleemloos werkt onder 64-bit Windows. Dat klopt echter niet. Dat lukt alleen met speciale 16-bit installers, namelijk met verschillende versies van ‘ACME Setup’ en ‘InstallShield 5’. De truc is, dat Windows deze installers herkent wanneer je ze probeert te starten en in plaats daarvan eigen programma’s gebruikt. Welke vervanger gebruikt wordt, staat in het register onder HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\­NtVdm64 (vanaf hier korten we HKEY_LOCAL_MACHINE zoals gebruikelijk af tot HKLM).

Systeemmappen

De in de NtVdm64-sleutel genoemde vervangingsprogramma’s bevinden zich allemaal op de harde schijf/ssd in de map C:\Windows\SysWOW64. Dat is een onderdeel van het 32-bit subsysteem en bevat 32-bit systeembestanden. Daar komt de naam ook vandaan. De eerste drie letters staan voor ‘Systeem’, de rest voor ‘Windows on Windows 64’. Dit is de naam van het 32-bit subsysteem.

SysWOW64 is exclusief bedoeld voor 32-bit programma’s. Die kunnen namelijk niets beginnen met 64-bit systeembestanden. Dus zodra een 32-bit programma toegang probeert te krijgen tot een bestand in de map C:\Windows\System32, schuift Windows in plaats daarvan de 32-bit tegenhanger in C:\Windows\SysWOW64 ertussen (niet alleen bij DLL’s).
Als je je afvraagt of we hier de getallen door elkaar aan het halen zijn, is dat niet zo. De map System32 bevat echt de 64-bit systeembestanden en de map SysWOW64 de 32-bit tegenhangers.

Als gebruiker merk je zelden iets van de omleidingen, maar soms toch wel. Als voorbeeld gebruiken we de freewaretool csdiff 5.0 uit 2005, die bestanden en hele mappen vergelijkt. Als je daarmee de bestanden ‘C:\Windows\System32\notepad.exe’ en ‘C:\Windows\SysWOW64\notepad.exe’ vergelijkt, ziet het programma deze bestanden als identiek, hoewel de verschillende bestandsgroottes duidelijk maken dat ze dat niet zijn.

WOW64 regelt de omleiding zo transparant, dat csdiff je vertelt dat het System32\notepad.exe met SysWOW64\notepad.exe heeft vergeleken, terwijl de tool in feite in beide gevallen dezelfde SysWOW64\notepad.exe te pakken had.

Als je het programma de volledige mappen System32 en SysWOW64 laat vergelijken, kan het resultaat irritant zijn. Het concludeert van hele stapels bestanden dat ze identiek zijn, maar niet de hele map. In plaats daarvan merkt het dat SysWOW64 verschillende bestanden mist die in System32 voorkomen.

De oorzaak hiervan zijn de door Microsoft gedefinieerde uitzonderingen: 32-bit programma’s die System32-submappen catroot, catroot2, ­driverstore, drivers\etc, logfiles en spool benaderen, leidt Windows niet om, in tegenstelling tot de rest.

systeemmap Windows 32-bit 64-bit

Omdat Windows toegangspogingen van 32-bit programma’s naar de map System32 omleidt naar de map SysWOW64, beschouwen dergelijke programma’s beide mappen als identiek, althans grotendeels.

Omleidingsproblemen

De omleiding kan ook op andere plaatsen onverwachte problemen tot gevolg hebben. Als je bijvoorbeeld het hosts-bestand in de map C:\Windows\System32\drivers\etc wilt bewerken met een oude 32-bit teksteditor, mislukt dit omdat je om te beginnen niet eens het bestand kunt zien in het dialoog­venster Openen. Dat komt omdat de map ‘etc’ ontbreekt, want die bestaat in SysWOW64 niet. Overigens maakt het voorbeeld duidelijk dat ook de 32-bit variant van Verkenner wordt beïnvloed door de omleiding; uiteindelijk zijn dialoogvensters voor Openen en Opslaan ook gewoon Verkenner-vensters.

En als je je nu afvraagt of we een stukje terug niet zeiden dat drivers\etc niet werd omgeleid en de toegang tot het hosts-bestand eigenlijk zou moeten werken, dan heb je gelijk, maar dat is hier niet het probleem. Want drivers\etc wordt inderdaad niet omgeleid, maar de map drivers zelf wel. En in de map SysWOW64\drivers staat helemaal geen map met de naam etc.

Doorlezen is gratis, maar eerst even dit:

Dit artikel is met grote zorg samengesteld door de redactie van c’t magazine – het meest toonaangevende computertijdschrift van Nederland en België. Met zeer uitgebreide tests en praktische workshops biedt c’t de diepgang die je nergens online vindt.

Bekijk de abonnementen   Lees eerst verder

Omleidingstrucs

Dat leidt tot twee mogelijke trucs om het bestand toch te kunnen openen met de 32-bit editor. Als je een submap met de naam ‘etc’ maakt onder SysWOW64\drivers, dan zie je deze ook in het dialoog­venster Openen en heb je zo toegang tot de niet-­omgeleide inhoud.

Of je typt het volledige pad van het bestand in het veld van het dialoogvenster Openen, dat meestal alleen de bestandsnaam bevat: C:\Windows\System32\drivers\etc\hosts. Zo kun je het bestand toch benaderen.

Toch kun je (er is altijd iets) het bestand nog steeds niet bewerken en opnieuw op dezelfde plaats opslaan. Maar dit is geen WOW64-probleem maar een kwestie van ontbrekende toegangsrechten, dus daar gaan we hier verder niet op in.

Gebruikers van 32-bits alternatieve  bestandsbeheerders kunnen niet alleen struikelen over dergelijke omleidingen, maar ook over iets anders. Als je bijvoorbeeld de 32-bits versie van de tool ‘FreeCommander XE’ start, daarna onder ‘Extra’ klikt op ‘Uitvoeren’ en cmd intikt, wordt er weliswaar een opdrachtprompt gestart, maar dat betreft dan hun 32-bits versie.

Ook batch-scripts die vanuit deze bestands­beheerder worden aangeroepen, worden dan uitgevoerd in een 32-bit opdrachtprompt. Dat kan bijvoorbeeld leiden tot ‘File not found’-fouten als het script toegang probeert te krijgen tot 64-bit systeem­bestanden waar geen 32-bit tegenhanger voor bestaat.

Systeemvariabelen

Wat de opdrachtprompt betreft: je kunt de opdracht set gebruiken om erachter te komen welke architectuur die heeft.

Die laat verschillende voorgedefinieerde variabelen zien, waaronder die voor de processorarchitectuur, PROCESSOR_ARCHITECTURE. Bij een 32-bit opdrachtprompt heeft de variabele de waarde ‘x86’, maar bij 64-bit ‘AMD64’. Aan de systeemvariabelen voor de standaard-programmamappen kun je de architectuur ook aflezen. 64-bits Windows heeft twee standaardmappen: ‘C:\Program Files’ is voor 64-bit programma’s en ‘C:\Program Files (x86)’ voor ­32-bit programma’s. De bijbehorende variabelen heten ProgramFiles en ProgramFiles(x86). In een 64-bit prompt verwijst de eerste naar C:\Program Files en de tweede naar de 32-bit tegenhanger. In een ­32-bit prompt wijzen beide echter naar ‘C:\Program Files (x86)’.

opdrachtprompt set

64-bit opdrachtprompt set

Systeemvariabelen laten zien of een programma wordt uitgevoerd als een 32- of 64-bit variant, zoals in dit geval Opdrachtprompt.

Verder is er nog een variabele met de naam­­ ProgramW6432. Die verwijst in prompts van beide architecturen altijd naar ‘C:\Program Files’ en is ook voor niet-ontwikkelaars het zichtbare bewijs dat ­32-bit programma’s niet noodzakelijk hoeven leven met de omleidingen, maar ze ook kunnen omzeilen.

Ontwikkelaars beschikken ook over dergelijke mogelijkheden op andere plekken, maar dat zou hier te ver voeren. Ontwikkelaars vinden meer informatie in de WOW64-online-documentatie van Microsoft.

Analoog aan de ProgramFiles-variabelen wijzen ook de variabelen CommonProgramFiles, CommonProgramFiles(x86) en CommonProgramW6432 ­of naar de 64-bit map ‘C:\Program Files\Common Files’ of naar de 32-bit tegenhanger, met ‘(x86)’-­toevoeging.

Register

WOW64 leidt ook enkele registeringangen om, op een vergelijkbare manier als bij de map SysWOW64. De omleidingen zijn van toepassing op de sleutel HKLM\Software. Wanneer 32-bit programma’s deze benaderen, krijgen ze in plaats daarvan de inhoud van de subsleutel HKLM\Software\Wow6432Node te zien.

Ook hier zijn er uitzonderingen bij afzonderlijke subsleutels zoals Classes, en in het algemeen zijn er bij de uitgesloten subsleutels weer dieperliggende sleutels die opnieuw worden omgeleid, bijvoorbeeld Classes\CLSID.

Register editor

64-bit Register editor

32-bit programma’s zien registersleutels op andere plaatsen dan 64-bit programma’s, vanwege omleidingen.

Als je al ten tijde van Vista met WOW64 hebt gewerkt: let dan goed op, want wat wordt omgeleid en wat niet, is sindsdien veranderd. Details hierover vind je in de online documentatie van Microsoft.

Omleidingen kunnen je dwarszitten als je registervermeldingen uit de sleutel Wow6432Node in ­64-bit Windows wilt exporteren en in 32-bit Windows wilt importeren. Je moet dan handmatig de sleutelpaden in het .reg-bestand aanpassen, dus HKLM\Software\Wow6432Node inkorten tot HKLM\Software. Bij het opruimen van opstartprogramma moet je ook een kijkje nemen in HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run.

De register-editor staat ook in twee varianten op de schijf. Je kunt ze echter alleen met een truc parallel oproepen. Druk op de Windows-toets en typ regedit om de 64-bit register-editor te openen. Druk vervolgens opnieuw op de Windows-toets en typ

%systemroot%\syswow64\regedit -m

om de 32-bit tegenhanger te starten. Overigens werkt de truc met het toegevoegde -m ook als je twee reg­edit-instanties met dezelfde architectuur wilt openen.

Enkele tips

Nog een paar tips. WOW64 is alleen verantwoordelijk voor programma’s. Stuurprogramma’s moeten altijd dezelfde architectuur hebben als het besturings­systeem. In de loop der jaren is dit probleem echter veranderd van een 64-bit in een 32-bit probleem. Vooral fabrikanten van grafische kaarten leveren al lang geen 32-bit stuurprogramma’s meer.

Overigens is het WOW64-subsysteem niet vanzelfsprekend bij 64-bit Windows. Alle client- en server­versies hebben dat wel, maar Windows PE niet. Dat is het mini-besturingssysteem waaronder een Windows-­installatie verloopt (PE staat voor Preinstallation Environment).

En tot slot nog een vraag die niets te maken heeft met WOW64, maar met 32-bit en Windows altijd weer opduikt: nee, je kunt een 32-bit installatie van Windows niet veranderen in een 64-bit installatie. Dit is alleen mogelijk door Windows opnieuw te installeren, maar dat kan dan wel met de reeds aanwezige licentie.

(Axel Vahldiek en Daniel Dupré, c’t magazine)

 


Blijf op de hoogte van de nieuwste informatie en tips!
Schrijf je in voor de nieuwsbrief:


 

Lees uitgebreide achtergrondinfo en reviews op je gemak in c't okt/2020

Meer over

Software

Deel dit artikel

Lees ook

Online DNA testen en analysewebsites in de praktijk

Voor online DNA testen wordt veel reclame gemaakt. Externe analyseplatforms beloven nog meer inzichten. We bekijken resultaten en risico's.

Flash geheugen – SLC, QLC, 3D-NAND en andere technieken

NAND-flashgeheugen is inmiddels standaard voor ssd's, smartphones en andere apparaten. We gaan in op SLQ, QLC, 3D-NAND en andere technieken voor flas...

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er