Allgemeines
Die Registry ist die Systemdatenbank von Windows, die alle Einstellungen von Programmen und von Windows selbst beinhaltet. Äußerlich besteht die Registry aus den beiden Dateien USER.DAT und SYSTEM.DAT, die damit wohl die beiden wichtigsten Systemdateien unter Windows darstellen. Die Hardwareeinstellungen und die Registrierung der installierten Software bleiben bei verschiedenen Profilen gleich; deshalb kommen diese Einträge in eine Datei, die SYSTEM.DAT. Andere Merkmale, wie beispielsweise das aktuelle Hintergrundbild, variieren von Benutzer zu Benutzer bzw. von Profil zu Profil. Diese variablen Einstellungen werden in einer zweiten Datei gespeichert, der USER.DAT. Die SYSTEM.DAT bleibt für alle Benutzer bzw. Profile gleich, denn sie arbeiten ja mit demgleichen Computer. Jeder Benutzer hat dagegen eine eigene USER.DAT mit seinen benutzerspezifischen Einstellungen.
- HKEY_CLASSES_ROOT – Verwaltet alle Dateitypen; beschreibt wie eine Datei mit einer bestimmten Dateierweiterung geöffnet wird
- HKEY_USERS – verwaltet alle Benutzereinstellungen
- HKEY_CURRENT_USER – Teil von HKEY_USERS der die Einstellungen des aktuellen Benutzers beinhaltet (Spiegelungsprinzip)
- HKEY_LOCAL_MACHINE – Informationen über installierte Hardware
- HKEY_LOCAL_MACHINE\SOFTWARE – Informationen über die installierte Software
- HKEY_LOCAL_MACHINE\SOFTWARE\Windows\CurrentVersion – beinhaltet die Einstellungen der aktuellen Windows-Version
- HKEY_CURRENT_CONFIG – Teil von HKEY_LOCAL_MACHINE\Config\0001 der die aktuelle Hardware-Konfiguration beinhaltet. (Speigelungsprinzip)
Eigene Einträge in die Registry: Microsoft empfiehlt Softwareherstellern, ihre Registrierungen für moderne Windows-Softwareimmer nach dem Schema HKEY_LOCAL_MACHINE\Software\Herstellername\Produktname\Version in die Registrierdatenbank einzutragen.
Datentypen
Aufbau einer .REG-Datei
- Heading:
- REGEDIT4 = für Windows 95/98/ME and NT 4.0
- Windows Registry Editor Version 5.00 = für Windows 2000/XP und danach
- aus Kompatiblitätsgründen sollte man REGEDIT4 verwenden
- Leerzeile
- Ast / Branch [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies]
- “Eintrag”=Typ:Inhalt zB: “NoClose”=dword:00000001
Registry und Sicherheit
Seit Windows 7 besteht die Möglichkeit für einzelne Registry-Äste bzw. Einträge Berechtigungen zu setzen.
siehe dazu:
Literatur
Links
Bücher:
- Immler, Christian – Windows 7 Registry-Tuning (versteckte und undokumentierte Funktionen nutzen, Tipps für mehr Sicherheit und Fehlersuche) [Amazon | GoogleBooks | Zusammenfassung]
- Honeycutt, Jerry – Microsoft Windows Server 2003 Registrierung: Die technische Referenz [Amazon]
- Born, Günter – Arbeiten mit der Registrierung von Windows 2000 [Amazon]
- Karp, David A. – Windows 7 Annoyances [Amazon]
Programmierung
vbscript / VBA
Unter VBA gibt es drei Möglichkeiten auf die Registry zuzugreifen:
- Registry Zugriffe ohne API
- Registry Zugriffe mittels API (advapi32.dll)
- Registry Zugriffe mittels WMI
- Scripts to manage Registry
- WMI Tasks: Registry (Windows)
- Managing Windows Registry with Scripting [Part 1 | Part 2 | Part 3]
- WMI StdRegProv
Sub ListAllSubBranches(sPart As String, sPath As String, Optional brecursive As Boolean = False, Optional Levels As Integer = 0, Optional currentlevel As Integer = 0) Dim oReg: Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") Dim oShell: Set oShell = CreateObject("WScript.Shell") Dim aSub, sKey, aSubToo, sKeyToo, dwValue Select Case sPart Case "HKEY_CLASSES_ROOT" oReg.EnumKey &H80000000, sPath, aSub Case "HKEY_CURRENT_USER" oReg.EnumKey &H80000001, sPath, aSub Case "HKEY_LOCAL_MACHINE" oReg.EnumKey &H80000002, sPath, aSub Case "HKEY_USERS" oReg.EnumKey &H80000003, sPath, aSub Case "HKEY_CURRENT_CONFIG" oReg.EnumKey &H80000005, sPath, aSub End Select If Not IsNull(aSub) Then For Each sKey In aSub Dim tmpVar As String If Not Right(sPath, 1) = "\" Then tmpVar = sPath & "\" & CStr(sKey) Else tmpVar = sPath & CStr(sKey) End If Debug.Print tmpVar & " [Level: " & currentlevel & "]" If brecursive = True Then If Levels > 0 And currentlevel < Levels Then Call ListAllSubKeys(sPart, tmpVar, brecursive, Levels, currentlevel + 1) End If End If Next End If End Sub
VB.NET
C#
BATCH
Registry-Permissions
lokal:SetACL.exe -on “hkcu” -ot reg -actn ace -ace “n:domain1\user1;p:full”
remote:SetACL.exe -on “\\machine2.domain1.local\hklm\software\microsoft\policies” -ot reg -actn ace -ace “n:domain1.local\user1;p:full”