KB » Computer » Register (Registry)

Register (Registry)

    Tweeten

Introductie

Bijna elk programma dat je op de PC installeert of gebruikt wil bepaalde instellingen bewaren.

Stel bv. dat je het venster van een programma een andere afmeting geeft. De meeste programma's bewaren de nieuwe coördinaten van het venster, zodat het programma dezelfde plek op het scherm inneemt als het de volgende keer gestart wordt.

Verder moet een browser weten waar de wachtwoorden staan die hij voor een gebruiker heeft opgeslagen, moet een mailprogramma weten waar de mailmappen staan, etc.

Vroeger had elk programma zijn eigen bestand met instellingen. Die bestanden hadden vaak als extensie .INI, en waren gewoon te lezen met een tekstverwerker. Overigens waren er ook een paar gecentraliseerde Windows-bestanden met instellingen.

Tegenwoordig zijn er een paar cruciale bestanden in Windows waarin (vrijwel) alle programma's hun instellingen opslaan. Die bestanden vormen samen het register. Het register is alleen met speciale programma's te benaderen. (Portable programma's, die in principe geen sporen op het systeem mogen achterlaten, maken vaak weer gebruik van .INI-bestanden).

Helaas is het register een nogal ongeorganiseerde bende. Het is natuurlijk niet zo dat er helemaal geen structuur in zit, maar de structuur is doorgaans verre van logisch. En met elkaar samenhangende waardes staan vaak op heel veel verschillende plaatsen.

Het register is van *zo* groot belang in Windows, dat kleine corrupties erin tot gevolg zouden kunnen hebben dat Windows niet meer wil starten. Het is dan ook bepaald niet aan te raden dat een leek hier zelf in gaat knoeien. Persoonlijk ben ik ook tegenstander van programma's die zogenaamd het register schonen, zelfs als ze een zeer goede naam hebben.


Structuur van het register

Je kan het register op veel vlakken vergelijken met de structuren die je ziet als je Verkenner (Explorer) opent. De vergelijkbare tool voor het bekijken en bewerken van het register is regedit.

Klik op Start - Uitvoeren (Run), en tik dan in regedit, gevolgd door Enter

Root (wortel)

In Verkenner heb je schijven. Het hoogste mapniveau binnen zo'n schijf wordt root genoemd.
In het register heb je een aantal root keys, basissleutels.

2 voorbeelden zijn HKEY_LOCAL_MACHINE en HKEY_CURRENT_USER.

Keys (sleutels)

Binnen de root keys heb je gewone keys, net zoals je binnen een schijf mappen en submappen hebt. Als je het hebt over een key binnen een key A, noem je dat een subkey van key A.

Een key bevat andere keys en/of gegevens (values). Net zoals een map andere mappen en/of bestanden bevat.

Values (waardes)

Values hebben een naam (net als die van een bestand), hebben een type (de extensie van het bestand) en een waarde (de inhoud van het bestand).

Er zijn ongeveer 15 verschillende types van value mogelijk, maar de meest belangrijke en meest voorkomende zijn:

Pad

Een bestand heeft een padnaam, bv. C:\WINDOWS\SYSTEM32
Zo heeft ook een value een pad, bv. HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices

Net als met bestanden en mappen, is het soms niet helemaal duidelijk of het pad eindigt met een key of een value. In dit geval is het een key, en ik zal vanaf nu dat steeds aangeven door een '\' aan het eind te zetten.


Zoeken in (en evt. bewerken van) het register

N.B. Zoals ik in de Introductie ook al heb gezegd: knoeien in het register kan tot gevolg hebben dat je de PC om zeep helpt. Niet doen dus als je niet behoorlijk veel kennis van zaken hebt. Zoeken kan in principe geen kwaad.

Het programma regedit is in elke versie van Windows standaard aanwezig. Maar er zijn tools die veel handiger zijn, zoals RegScanner en Registry Commander.

Klik op Bewerken (Edit) - Zoeken... (Find...) (of gebruik de toetscombinatie Ctrl+F), en voer dan je zoekterm in.

Als je wilt kijken of de zelfde term meerdere keren voorkomt, kan je steeds op F3 drukken, of klikken op Bewerken (Edit) - Volgende zoeken (Find Next)

Hier zie je meteen het grote nadeel van dit programma: je kan maar 1 plek tegelijk zien waar de waarde voorkomt. De volgende tool is veel mooier.

RegScanner (versie 1.90)

Dit programma is gratis, hoef je niet te installeren en is hier te downloaden. Er zijn aparte versies voor 32- en 64-bits Windows.

Het belangrijkste verschil met regedit is dat je alle plekken in het register waar de waarde voorkomt in 1 lange lijst voorgeschoteld krijgt.

Je kan zelf bepalen welke kolommen je wilt zien (via View - Choose Columns), je kan de lijst exporteren in de vorm van een webpagina (View - HTML Report), en nog veel meer.

De uitvoer is te breed voor je scherm als je het standaard aantal kolommen hebt geselecteerd, en wordt nog breder als je kiest voor View - Auto Size Columns
Het voordeel daarvan is wel dat je de complete inhoud van elke kolom ziet. En je kan ook met toetsen makkelijk naar links en rechts scrollen, via Ctrl + pijltje naar links/rechts


Wijzigingen aanbrengen in het register

Als je bestanden weggooit heb je nog een Prullenbak (Recycle Bin) waaruit je ze met enig geluk nog terug kan halen. Helaas bestaat zoiets niet voor het register. Weg is weg.

Voordat je wijzigingen aanbrengt in een sleutel kan je daarom het beste 1 van de volgende dingen doen:


Wat verandert een actie in het register?

In o.a de volgende situaties wil ik soms weten wat er in het register gebeurt:

Ik doe dat als volgt:

  1. Ik exporteer voordat ik de actie uitvoer het complete register als tekstbestand;
  2. Ik voer de actie uit;
  3. Ik exporteer het register nog een keer (naar een ander bestand natuurlijk);
  4. Ik vergelijk de 2 bestanden met WinMerge

De verschillen zijn vaak niet makkelijk te interpreteren. Bovendien horen ze meestal niet allemaal bij de actie die je hebt uitgevoerd. Er kunnen in de tussentijd ook andere programma's veranderingen in het register hebben aangebracht.

Exporteren van het register als tekstbestand

Start regedit

Klik op Bestand (File) - Exporteren (Export)

Klik in de lijst achter Opslaan als: (Save as type:) op Tekstbestanden (*.txt) (Text Files (*.txt)).
Bepaal verder zelf waar je het bestand wilt bewaren.


Monitoren van wat er in een bepaalde sleutel gebeurt

Misschien wil je weten waar een bepaalde sleutel of waarde voor dient. Of weet je wel waar de sleutel voor dient, maar snap je niet waarom hij gewijzigd wordt en door welk programma.

In deze gevallen kan je een tool gebruiken om alleen dat stukje van het register te monitoren. Je kan ook het complete register monitoren, met een tool als Process Monitor, maar dat is in dit geval schieten met een kanon op een mug.

Registry Live Watch

Een veel mooier tooltje is Registry Live Watch, dat ook nog eens portable is (installatie niet nodig).

In het linkervakje (onder Root Key) kies je 1 van de 6 basissleutels uit een drop down list.

In het rechtervak vul je de rest van het pad in. In de registry editor die je gebruikt (bv. regedit) kan je vaak dat pad wel kopiëren, zodat je het daarna in deze tool kan plakken.

Door te klikken op Start Monitor begint het loggen.

Uit de beschrijving van het programma krijg ik de indruk dat het niet alleen logt dat er wat gebeurt, maar ook wat er gebeurt. Maar tot nu toe is mij dat nog niet gelukt.


Wijzigingen in het register aanbrengen met Visual Basic

Met Visual Basic scripts kan je heel gemakkelijk uit het register lezen en naar het register schrijven.

Visual Basic scripts zijn gewoon tekstbestanden met extensie .VBS, en je kan ze uitvoeren door er in Verkenner (Explorer) op te dubbelklikken.

Creëer een object

Ten eerste moet je script (voordat je gaat lezen en schrijven) de volgende regel hebben:
Set WSHShell = WScript.CreateObject("Wscript.Shell")

De naam WSHShell voor het '='-teken mag je kiezen zoals je wilt, de rest is verplicht. (Als je een andere naam kiest moet je daar in de rest van het programma natuurlijk ook rekening mee houden.)

Wat hier gebeurt is dat je een nieuw object aanmaakt met de zelf gekozen naam. Dit object bevat o.a. de functies (methods) om te lezen en te schrijven.

Lezen en schrijven

Lezen

Lezen doe je met het volgende commando:
resultaat = WSHShell.RegRead(padnaam)

Ik heb hierboven uitgelegd dat je in het register net als met mappen en bestanden een pad gebruikt om bij het doel uit te komen. In het register bestaat dat pad uit een sleutel en een waarde.

In onderstaande voorbeeldcode geef ik eerst regKey en regValue (weer zelf gekozen namen) een waarde. Vervolgens ga ik kijken wat daar in het register staat met het volgende commando (met het '&'-teken verbindt je in VB 2 tekenreeksen met elkaar):
currentValue = WSHShell.RegRead(regKey & regValue)

Het resultaat komt dus in de variabele (zelf gekozen naam) currentValue

Schrijven

Het idee is hetzelfde, alleen moet je nu ook opgeven wat voor type waarde je in het register wil schrijven, en wat de inhoud moet zijn.

Je gebruikt het volgende commando:
Call WSHShell.RegWrite(padnaam, waarde, "type")

In onderstaand voorbeeld wordt dat bv.:
Call WSHShell.RegWrite(regKey & regValue, 1, "REG_DWORD")

Verklaring van het programmaatje

Je kan onderstaande code gewoon knippen en in een .VBS-bestand plakken.

Als je het uitvoert krijg je de waarde te zien van DEVMGR_SHOW_NONPRESENT_DEVICES voordat het programma iets heeft gedaan, en de vraag of je de waarde aan of uit wilt zetten (1 = aan, 0 = uit).

Je kan vervolgens de waarde switchen of hem gewoon hetzelfde laten, wat je maar wilt. En tenslotte krijg je de waarde achteraf te zien.

Ik ga de code niet verder uitleggen, maar als je ziet wat het doet en dat vergelijkt met de code en bovenstaande uitleg, dan moet het redelijk te begrijpen zijn, zelfs voor niet zo ervaren programmeurs.

Ik weet voor 99% zeker dat dit programma geen kwaad kan onder Windows XP, Vista en Windows 7, maar garantie tot de deur :-).

Set WSHShell = WScript.CreateObject("Wscript.Shell") On Error Resume Next regKey = "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\" regValue = "DEVMGR_SHOW_NONPRESENT_DEVICES" textDesc = "Device manager show nonpresent devices" currentValue = WSHShell.RegRead(regKey & regValue) If Err.Number <> 0 Then Ans=WSHShell.Popup(textDesc & _ vbCrLf & "was nog niet gedefinieerd!" & _ vbCrLf & "Wil je " & textDesc & " aan zetten?", _ vbCrLf & 30, "Aanpassen " & textDesc, vbYesNoCancel) Else Ans=WSHShell.Popup("Waarde van " & textDesc & " vooraf is " & currentValue & _ vbCrLf & "Wil je " & textDesc & " aan zetten?", _ vbCrLf & 30, "Aanpassen " & textDesc, vbYesNoCancel) End If If Ans = vbYes Then Call WSHShell.RegWrite(regKey & regValue, 1, "REG_DWORD") ElseIf Ans = vbNo Then Call WSHShell.RegWrite(regKey & regValue, 0, "REG_DWORD") End If newValue = WSHShell.RegRead(regKey & regValue) Call WSHShell.Popup("Waarde van " & textDesc & " achteraf is: " & newValue)

CCleaner, een tool om het register te schonen

CCleaner is een al zeer lang bestaand programma, vaak een indicatie van hoe betrouwbaar en populair het is.

Het is gratis, er is zelfs een portable versie, en ik weet dat het door zeer veel mensen gebruikt wordt.

Maar... ik zou het persoonlijk niet in mijn hersens halen om een automatische tool in mijn registry te laten rommelen, zelfs al zou ik een backup hebben gemaakt.

En er komen ongelukken voor. Ik las over iemand met een kleine 2000 problemen bij de registerscan (lijkt veel, maar is niet ongewoon), en toen hij die automatisch liet repareren was de PC niet meer te starten. Dat verbaast mij niks.

Ik vind deze tool vooral interessant om meer van het register te leren begrijpen. Ik ga dan ook geleidelijk op verschillende PC's de verschillende categorieën bij langs, en probeer alle mogelijke fouten te doorgronden. Dat zal wel een meerjarenproject worden, maar elk item is er 1.

Downloaden van de portable versie

Die is hier te downloaden.

Unused file extensions

Hoewel ik het compressieprogramma 7-Zip op mijn systeem heb, is de bijbehorende extensie (.7Z) volgens CCleaner unused (niet in gebruik).

Als je via het programma naar de plek in het register toegaat, zie je in de sleutel HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.7z\OpenWithList inderdaad dat er geen waarde gedefinieerd is.

Je kan natuurlijk ook even een .7Z-bestand maken, en kijken wat er gebeurt als je er op dubbelklikt. Je krijgt dan de bekende dialoog
(Windows can't open this file)

CCleaner heeft het dus bij het rechte eind. Ik laat het programma deze ene entry verwijderen.

Daarna kan ik de entry in het register niet meer benaderen, hoewel hij nog wel zichtbaar is. Misschien moet je eerst regedit sluiten of de PC herstarten.

Ik ga ook proberen of ik de entry weer opnieuw kan aanmaken, en nu wel gevuld. Dat doe ik door opnieuw te dubbelklikken op het .7Z-bestand, en dan op te geven met welk programma dit bestand geopend moet worden.

Het was even gokken, omdat er in de map van 7-Zip 3 uitvoerbare progamma's staan (1 voor de commandoregel, en 2 grafisch), en natuurlijk koos ik eerst de 2 verkeerde. Maar na de goede te hebben geselecteerd is de sleutel in het register goed gevuld, met alle 3 programma's (hoewel er maar 1 de standaard is) en een MRUList (Most Recently Used list).


Tools

Registry Commander (versie 12.01.24)

Dit programma is gratis, hoef je niet te installeren en is hier te downloaden.

Dit programma onderscheidt zich van een hoop andere programma's die het register kunnen bewerken, doordat er maar 1 lijst wordt getoond. De andere programma's hebben een structuur vergelijkbaar met Verkenner, waarbij je links mappen (registersleutels = registry keys) hebt, en rechts bestanden (registerwaarden).

Bovenaan in beeld zie je in een balk in welke registersleutel je zit. Doordat je de hele breedte van het beeld hebt zie je veel meer informatie van sleutels en waarden. In het algemeen vindt ik de layout zeer plezierig en overzichtelijk.

Handige dingen zijn dat je makkelijk naar 1 van de hoofdsleutels kan gaan (via Show - Registry Roots), dat je bookmarks kan gebruiken (rechtsklikken op een sleutel of waarde, en dan klikken op Bookmark), en dat je die bookmarks in een venster onderin kunt laten zien (via Bookmarks - User Bookmarks ).

Ik moet dit programma echter nog wat beter leren kennen.



    Tweeten

© Henk Dalmolen
Reageer via E-mail (dalmolen@xs4all.nl)

Deze pagina is voor het laatst gewijzigd op: 22-9-2016 13:33:39