Vaak lees je dat een bepaald Windows-probleem kunt oplossen via een item in het Windows-register. Maar wat is dat register eigenlijk en hoe pas je het aan?
Onder redactie van Rob Coenraads
Windows is het meest gebruikte besturingssysteem voor computers. Zoals velen hebben ondervonden, treden er weleens problemen op. Die kun je op allerlei manieren oplossen en daarvan is voor ervaren Windows-geruikers het Windows-register een goede oplossing. Dit is de centrale database die de toestand en configuratie van het systeem en de geïnstalleerde software beheert.
Er bestaan allerlei mythes over het Windows-register: er iets mee doen, is alleen wat voor ervaren professionals, en elke onvoorzichtige klik leidt onvermijdelijk tot een systeemcrash. Toegegeven, ermee werken is niet erg gebruiksvriendelijk, en ja, er zijn acties die je beter kunt vermijden als je om je Windows-installatie geeft. Met een beetje basiskennis is er geen belemmering om ermee aan de slag te gaan, maar ben je geen ervaren Windows-gebruiker, dan raden we je af om zomaar aan de slag te gaan met het register.
AAN DE SLAG
Net als een bestandssysteem op een opslagmedium, is het register hiërarchisch gestructureerd. De rol van mappen wordt overgenomen door zogenaamde sleutels. Die sleutels kunnen weer andere sleutels (subsleutels) bevatten en daarnaast waarden opslaan. Waarden zijn als het ware de kernitems van het register, die worden altijd als volledig item gelezen of geschreven.
Aan een waarde wordt altijd een type toegekend. De meest voorkomende types zijn strings (tekenreeksen) met het kenmerk REG_SZ en gehele getallen (REG_DWORD, een 32-bit geheel getal tussen 0 en 4.294.967.295). In binaire waarden (REG_BINARY) kunnen toepassingen willekeurige byte-reeksen opslaan, die ze vervolgens zelf moeten interpreteren. Volledigheidshalve moet ook het gegevenstype REG_QWORD voor 64-bit gehele getallen vermeld worden, en de enigszins omslachtig benoemde ‘waarden van een meervoudige tekenreeks’ (REG_MULTI_SZ), waarin meerdere strings tegelijk kunnen worden opgeslagen, en ‘waarden van een uitbreidbare tekenreeks’ (REG_EXPAND_SZ). Ingebedde omgevingsvariabelen worden bij dat laatste type vervangen door hun waarde als ze uitgelezen worden, %SYSTEMROOT%\System32 wordt bijvoorbeeld uitgelezen als C:Windows\System32.
Sleutels en waarden hebben namen die uniek moeten zijn binnen de betreffende sleutel. Daarbij wordt geen onderscheid gemaakt tussen kleine letters en hoofdletters. Elke sleutel bevat ook een standaardwaarde zonder naam, van het type string. Die waarde kan leeg zijn.
Net als mappen en bestanden in het NTFS-bestandssysteem worden registersleutels beschermd door toegangsrechten. De rechten van een sleutel gelden automatisch voor alle waarden die deze bevat.
REGEDIT
Windows heeft standaard de tool Register-editor om het register te verkennen en de inhoud ervan te wijzigen. Je vindt dat programma in het Startmenu op de lijst met alle software binnen de map Windows Systeembeheer. Als je het programma vaak gebruikt, kun je het vastmaken aan het Startmenu of de Taakbalk, zoals elk ander Windows-programma. Als alternatief kun je het starten door regedit in te typen in het dialoogvenster dat je opent met de toetsencombinatie Windows + R.
Als je Register-editor start met een gebruikers-account dat lid is van de groep Administrators, krijgt hij volledige beheerdersrechten via de gebruikersaccount-controle. Hij werkt echter ook met een beperkt account, maar dan kun je bepaalde sleutels en waarden niet veranderen.
Register-editor toont een venster met twee delen, vergelijkbaar met Verkenner: aan de linkerkant staat de hiërarchie van sleutels en subsleutels in een boomstructuur. Als je een sleutel selecteert, verschijnt rechts een lijst met alle waarden in die sleutel. Sleutels en waarden kunnen worden hernoemd met F2 – als de toegangsrechten dat toestaan – en gewist met Delete. Waarden kunnen worden geopend om te bewerken door te dubbelklikken op de naam. De opdrachten voor het maken van nieuwe sleutels en waarden staan in het contextmenu, dat je opent door met de rechtermuisknop te klikken op een sleutel of op een lege ruimte in het deelvenster met de waarden. Al die opdrachten zijn ook te vinden in het menu Bewerken. In tegenstelling tot de Verkenner kan Register-editor (kortweg Regedit) geen bewerkingen uitvoeren om sleutels of waarden te kopiëren of te verplaatsen.
Als je een rechtstreekse aanpassing in het register wil uitproberen die je hebt gevonden op een betrouwbare website, is de invoerregel direct onder de menubalk heel praktisch. Je kunt daar een elders gekopieerde sleutelnaam plakken en direct naar die sleutel springen door op Enter te drukken. Van Regedit hoeft de naam niet te beginnen met Computer, zoals je ziet bij navigeren met een muisklik. Regedit kan overweg met zowel de uitgeschreven namen van de hoofdsleutels als de verkorte waar we het zo over hebben.
Regedit-alternatievenBehalve Register-editor met een grafische gebruikersinterface biedt Windows ook twee tekstgebaseerde tools waarmee je het register kunt bewerken. Liefhebbers van Opdrachtprompt gebruiken het programma reg. Met bijbehorende opdrachten als reg query, reg add en reg delete kun je sleutels en waarden uitlezen, toevoegen en verwijderen. Met sommige opdrachten biedt reg zelfs meer mogelijkheden dan Register-editor. Je kunt met reg copy bijvoorbeeld complete registersleutels kopiëren en met reg compare verschillen tussen sleutels opsporen. Details over de beschikbare opdrachten krijg je via reg /?. PowerShell behandelt registersleutels alsof het mappen in een bestandssysteem zijn. Standaard biedt het de twee ‘stations’ HKCU: en HKLM: waarin je kunt navigeren met SetLocation of cd. Met GetChildItem of dir kun je sleutels laten weergeven en met NewItem en RemoveItem sleutels maken en verwijderen. Waarden worden daarbij echter niet als bestanden beschouwd, maar als eigenschappen van de sleutels, die je benadert met opdrachten als GetItemProperty en SetItemProperty. . |
WAT ZIT WAAR?
Wanneer je Register-editor voor het eerst opent, zie je daarin vijf hoofdsleutels op het eerste niveau onder het overkoepelende item Computer. Onder HKEY_CLASSES_ ROOT (hierna afgekort tot HKCR) staan de items die applicaties toewijzen aan bekende bestandstypen en extensies, en aan de in het systeem geregistreerde COM-klassen (Component Object Model, een mechanisme voor communicatie tussen processen). De sleutel HKEY_CURRENT_USER (afgekort HKCU) hoort bij de gebruiker onder wiens account Regedit momenteel draait. Binnen die sleutel kunnen het systeem en de toepassingen gebruikersspecifieke instellingen en andere gegevens opslaan.
Algemene toepassings- en systeeminstellingen, en ook de configuratie van stuurprogramma’s en systeemdiensten staan in de subsleutels van HKEY_LOCAL_MACHINE (afgekort HKLM). HKEY-USERS (HKU bevat de huidige gebruikerssleutels van alle gebruikersaccounts die op dat moment zijn ingelogd, en ook die van de systeemaccounts System (S-1-5-18), Local Service (S-1-5¬19) en Network Service (S-1-5-20). Tot slot wordt in de tak onder HKEY_CURRENT_CONFIG (HKCC) informatie opgeslagen over de huidige hardwareconfiguratie.
Interessant is dat drie van die hoofdsleutels helemaal geen echte registersleutels zijn, maar slechts verwijzingen naar andere locaties in het register. Het item HKCC bevindt zich in werkelijkheid in HKLM\System\CurrentControlSet\Hardware Profiles\Current.
HKCU is een afkorting voor de sleutel in HKU waarvan de naam overeenkomt met de SID van de huidige gebruiker. SID staat voor Security Identifier en identificeert
gebruikersaccounts overal in het systeem waar het gaat om toegangsrechten. Een heel bijzonder geval is daarbij de sleutel HKCR, die is samengesteld uit de inhoud van
HKLM\Software\Classes en HKCU\Software\Classes. Voor items die bestaan in beide sleutels heeft HKCU voorrang, maar nieuwe sleutels of waarden komen terecht in HKLM.
MEER EN MINDER TOELICHTING
Het beschrijven van de inhoud van alle sleutels en subsleutels die in het register bekend zijn, is om redenen van ruimtegebrek niet mogelijk. Bovendien hangen de aanwezige gegevens af van de exacte Windows-versie, de geactiveerde systeemfuncties en de geïnstalleerde software die niet van Microsoft afkomt. Enkele bijzondere gebieden van het register verdienen echter meer toelichting.
Zo is daar de structuur van de subsleutels van HKCR: alle sleutels waarvan de naam met een punt begint beschrijven een bestandstype, maar meestal niet direct. In plaats daarvan verwijzen ze meestal naar een andere sleutel, die weer beschrijft hoe Windows met dat bestandstype moet omgaan. We illustreren dat met een voorbeeld. Standaard bevat de waarde van de sleutel HKCR\.txt, oftewel de vermelding die verantwoordelijk is voor bestanden met de extensie .txt, de waarde txtfile. Die verwijst naar de sleutel HKCR\txtfile, die in verdere subsleutels bijvoorbeeld het Verkenner-pictogram definieert dat bij dat bestandstype hoort (DefaultIcon) en bepaalt welke toepassing wordt geopend wanneer je op een dergelijk bestand dubbelklikt (shell\open\ command).
\SOFTWARE
De meeste instellingen worden door Windows en door meegeleverde en extra software opgeslagen in de sleutels HKCU\Software en HKLM\Software. De subsleutels daarvan worden standaard benoemd volgens het schema \Producent\Programmanaam. Bij de verdere indeling volgt elke producent zijn eigen recept. Microsoft gebruikt bijvoorbeeld de sleutels in ...\Software\Microsoft\Windows\CurrentVersion voor de configuratie van Windows, maar sommige vermeldingen staan ook in ...\Software\Microsoft\Windows NT\ CurrentVersion. Dat heeft waarschijnlijk meer een historische dan een technische reden.
Zoals eerder reeds kort vermeld, staan gegevens voor het hele systeem in HKLM. Vanuit goede redenen hebben alleen administrators schrijfrechten voor die sleutel: één ondoordachte wijziging daarin kan een applicatie of zelfs Windows zelf onbruikbaar maken. Windows reserveert zelfs enkele bijzonder veiligheids-kritische instellingen voor het systeemaccount of het gebruikersaccount TrustedInstaller. Die mag bijvoorbeeld als enige systeembestanden overschrijven in het kader van updates.
De tak HKCU behoort daarentegen toe aan de huidige gebruiker. Die mag alles lezen, wijzigen en wissen. Maar ook daar is enige voorzichtigheid geboden, want sommige software reageert nogal allergisch op onverwachte of ontbrekende items. De gevolgen blijven in elk geval beperkt tot de huidige gebruikersaccount – als iemand inlogt onder een ander account, krijgen ze hun eigen versie van HKCU.
UITVOER EN INVOER
Een effectieve manier om jezelf te beschermen tegen ongewenste neveneffecten van aanpassingen in het register, is het maken van reservekopieën van de sleutels waarin je iets wilt wijzigen. Register-editor biedt daar het menu-item Bestand / Exporteren voor. Je moet dan een bestandsnaam opgeven om de inhoud van de huidige geselecteerde sleutel en alle subsleutels te bewaren in een bestand met de extensie .reg.
Als na het experimenteren met registervermeldingen blijkt dat ze niet het gewenste effect hebben of zelfs nadelig zijn, kun je het REG-bestand opnieuw importeren met het menu-item Bestand / Importeren of eenvoudigweg dubbelklikken op het bestand in Verkenner om de wijzigingen ongedaan te maken.
Er zijn echter een paar kleine details om in gedachten te houden. REG-bestanden worden vrij groot als je het exporteren hoog in de boomstructuur begint. Bewaar alleen de takken waarvan je echt een reservekopie nodig hebt. Als je een sleutel wil verwijderen, moet je de reservekopie juist een niveau hoger in de hiërarchie starten. Een back-up maken van bijvoorbeeld de volledige HKCU-tak is om een andere reden niet aan te raden: Windows heeft vaak toegang tot verschillende registervermeldingen, bijvoorbeeld om processen in het systeem te loggen. Als je die bij het importeren terugzet, kun je daarmee een systeemfunctie verstoren. Het importeren van een REG-bestand herstelt immers verwijderde en gewijzigde items, maar laat sleutels en waarden die sinds de back-up zijn toegevoegd zoals ze zijn.
Dat kun je verhelpen met een truc. REG-bestanden bestaan uit zuivere tekst, zodat ze kunnen worden bewerkt met elke redelijk moderne teksteditor. Die moet wel met Unicode kunnen omgaan, omdat de bestanden UTF-16 gecodeerd zijn. Windows’ eigen Kladblok is daar bijvoorbeeld geschikt voor. Een geëxporteerde sleutel ziet er bijvoorbeeld uit als de volgende tekst:
|
De kopregel, waaraan Register-editor het bestand als geldig herkent, wordt gevolgd door de sleutels tussen vierkante haken, te beginnen met de bovenste sleutel van de geëxporteerde hiërarchie en met de waarden in de sleutels direct onder elke sleutel. Bij het importeren verwerkt Register-editor de regels ook in die volgorde. Je kunt dan het begin van het bestand als volgt wijzigen:
|
Je kopieert dus de eerste sleutelnaam, plakt die er net boven, gevolgd door een lege regel, en voegt een minteken toe na het eerste vierkante haakje. Dat instrueert Register-editor om de sleutel met die naam te verwijderen en daarmee ook alle waarden en subsleutels die hij bevat. Daarna volgt de oorspronkelijke inhoud, die nu wel de geëxporteerde structuur vanaf nul opnieuw opbouwt.
Register-editor is de standaard tool voor maken en bewerken |
WAARDEN VERWIJDEREN
REG-bestanden kunnen ook regels bevatten die waarden verwijderen. Die zijn opgebouwd volgens het patroon "deleteme"=, waarbij aan de waarde eenvoudigweg een minteken zonder omsluitende aanhalingstekens wordt toegewezen.
REG-bestanden zijn niet alleen nuttig als back-up voor riskante experimenten, maar ook voor documentatie en probleemoplossing. Als je een sleutel exporteert waarin je een foute configuratie vermoedt, eenmaal op een perfect draaiende Windows-installatie en eenmaal op een defecte, dan kun je die twee versies naast elkaar openen in een programma voor tekstvergelijking zoals WinMerge en verschillen snel opsporen. Dezelfde procedure werkt om register-aanpassingen van problematische installatieprogramma’s te achterhalen. Om dat te doen, exporteer je belangrijke delen zoals de eerder beschreven CurrentVersion-sleutels eenmaal vóór en eenmaal ná de verdachte installatie. Die twee vergelijken vergt echter een beetje inzicht: in de meeste gevallen zul je verschillen vinden die niets te maken hebben met het eigenlijke proces dat onderzocht wordt. Daarom is er een andere procedure die in dergelijke gevallen kan worden gebruikt: download het gratis programma Process Monitor van Microsoft en stel de filters zo in dat je alleen toegang tot het register ziet die afkomstig is van het programma waarover je je zorgen maakt.
BESTANDEN
Wat het maken van back-ups betreft, zou je ook het idee kunnen krijgen om gewoon een back-up te maken van de bestanden waarin het register fysiek op de harde schijf wordt bewaard. Dat is om verschillende redenen niet praktisch. Ten eerste bestaat het register niet uit één of vijf bestanden, maar uit nog een aantal andere zoals je ziet in de tabel bij dit artikel. Ten tweede staan de meeste bestanden in de map C:Windows:systeem32:config, die niet toegankelijk is zonder administratorrechten, zelfs niet om te lezen. En ook al zou je de nodige rechten hebben, dan mislukt het kopiëren van sommige bestanden omdat Windows ze openhoudt terwijl het draait. Lezen, laat staan overschrijven, is niet mogelijk.
Ook al zou je al die mogelijke problemen omzeilen, bijvoorbeeld met een tweede parallel geïnstalleerde Windows-versie of een Windows-rescue-systeem, rijst de vraag wat het nut is. De in het register opgeslagen informatie is zo nauw verweven met de toestand van het systeem, de geïnstalleerde software, de updates en patches, dat herstellen van een oude back-up meer problemen oplevert dan het oplost.
Als je regelmatig een volledige back-up van het register wil hebben, moet je aan de slag gaan en een back-up maken van de systeemschijf met een systeemimage. Een image beschermt zelfs als het register zo erg beschadigd is dat Windows niet meer start. Een REG-bestand zal niet helpen, omdat zonder Windows de register-editor die nodig is voor het importeren niet zal draaien.
HIVE-BESTANDEN
Toch kan het geen kwaad om te weten in welke bestanden – Microsoft noemt ze Hive-bestanden – het register op de harde schijf opgeslagen is. Om van een trojan of een op hol geslagen driver af te komen, kan het zinvol zijn om het register te bewerken terwijl de betreffende Windows-installatie niet draait. Om dat te doen, start je een parallel geïnstalleerde Windows, open je daarin Register-editor en markeer je een van de sleutels HKLM of HKU. Open het gewenste Hive-bestand met de menuopdracht Bestand / Component laden. Regedit vraagt dan om een sleutelnaam. Je kunt elke naam kiezen die je wil. Onder die naam voegt Regedit vervolgens het bestand toe aan het bestaande register en kun je de inhoud bewerken. Als je klaar bent, vergeet dan niet om de bijgevoegde sleutel weer te ontkoppelen via Bestand / Component verwijderen. Dat zorgt ervoor dat alle wijzigingen daadwerkelijk in het bestand terechtkomen en dat de gekoppelde tak geen neveneffecten meer kan hebben in de actieve Windows.
CONCLUSIE
Ook al ziet de gebruikersinterface van Register-editor er op het eerste gezicht niet bijzonder uitnodigend uit, er is niets om bang voor te zijn als je het gebruikt. Wees echter erg voorzichtig met achteloos aan het register sleutelen, want je kunt je systeem dan al gauw zo slecht geconfigureerd hebben dat niets meer zal werken. Het is daarom verstandig om vooraf back-ups te maken van de betrokken registertakken, of beter nog een volledige imageback-up, alvorens je begint te experimenteren.
Zogenaamde registercleaners en dergelijke tools die beloven het register op te schonen en daarmee het systeem te versnellen met een bepaalde factor, zijn net zo dubieus als zelf wat in het wilde weg experimenten. Ongebruikte registervermeldingen vertragen Windows niet merkbaar of zelfs meetbaar: wat het systeem niet leest, kost ook geen tijd.