Register (Registry)
- Introductie
- Structuur van het register
- Zoeken in (en evt. bewerken van) het register
- Wijzigingen aanbrengen in het register
- Wat verandert een actie in het register?
- Monitoren van wat er in een bepaalde sleutel gebeurt
- Wijzigingen in het register aanbrengen met Visual Basic
- CCleaner, een tool om het register te schonen
- Tools
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:
- REG_SZ
SZ staat voor String Zero. Het gaat om een tekenreeks, die altijd eindigt met een '0' (dat is de manier waarop in de programmeertaal C(++) tekenreeksen worden afgesloten). De tekenreeks zou bv. de naam van een bedrijf kunnen zijn, zoals 'Microsoft'; - REG_DWORD
Dit zijn getallen van 32 bits. Je kan de getallen bewerken en bekijken als decimale of als hexadecimale getallen. Ze worden o.a. vaak gebruikt om waar/onwaar (true/false, 1/0) aan te geven, of de tijd in milliseconden. - REG_BINARY
Dit zijn binaire getallen, maar je bewerkt ze als hexadecimale getallen. - REG_EXPAND_SZ
Net als bij REG_SZ gaat het hier om een string, maar het middelste stuk zegt wat het verschil is: expansie. Op het moment dat een programma een dergelijke waarde in het register benadert worden eventuele omgevingsvariabelen (environment variables) omgezet in hun waarde van dat moment. - REG_MULTI_SZ
Een array van strings.
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
.
Zoeken in het register
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:
- de betreffende sleutel exporteren naar een bestand met extensie
REG
.
In geval van problemen hoef je dan alleen maar te dubbelklikken op dat bestand, en alles is weer bij het oude. - het hele register exporteren.
- een herstelpunt maken.
Wat verandert een actie in het register?
In o.a de volgende situaties wil ik soms weten wat er in het register gebeurt:
- Als je een programma installeert;
- Als je een hele kleine actie uitvoert, zoals het plaatsen van een vinkje in een aankruisvakje. Je kan er op die manier achterkomen waar een programma zijn instellingen in het register bewaart, wat in sommige troubleshooting situaties heel handig kan zijn.
Ik doe dat als volgt:
- Ik exporteer voordat ik de actie uitvoer het complete register als tekstbestand;
- Ik voer de actie uit;
- Ik exporteer het register nog een keer (naar een ander bestand natuurlijk);
- 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
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.
Reageer via E-mail (dalmolen@xs4all.nl)
Deze pagina is voor het laatst gewijzigd op: 09-02-23 14:31:35