Windows - A Registry felépítése

Registry 1. rész

Ezzel a részel elindítunk egy cikksorozatot a Windows Registry témakörében. Elsőként a rendszerleíró adatbázis felépítésével foglalkozunk, ismertetve a részfák és adattípusok jelentését, feladatát. A regisztrációs adatbázis (Registry) fogalma a Windows 95 óta létezik. Az MS-DOS-ban az operációs rendszer konfigurálásának fő eszközei az "autoexec.bat" és "config.sys" fájlok voltak. Később a Windows 3.1 és társai már használtak ezen kívül más állományokat is (system.ini, win.ini, progman.ini, stb.). A káoszt tovább növelte, hogy egyes programok mellett is megjelentek konfigurációs állományok, mindezt szétszórva, egységes kezelőfelület nélkül. A Windows 95 jelentette az első lépést egy központi adatbázis megteremtésében, ahol tárolható minden rendszerszintű beállítás, azonban nem szakított még teljesen a hagyományos megoldásokkal, tehát léteztek mellette a fenti fájlok. Döntő lépést a Windows 98 sem hozott, tulajdonképpen nincs jelentős eltérés a Registry szerkezetében sem, mérete jelentősen megnövekedett, de az optimalizált kódnak köszönhetően gyorsult a használata. A Windows NT 4.0 megjelenésével történt egy nagy lépés, teljesen nélkülözhetővé váltak a konfigurációs állományok (ez nem azt jelenti, hogy minden alkalmazás élt is ezzel a lehetőséggel), ehhez képest a Window 2000-ben tovább tökéletesedett a rendszer. Minden rendszerszintű beállítás belekerült a Registry-be: a felhasználók, hardver elemek és alkalmazások beállításai is itt találhatók meg. Mérete átlagosan 8-25 MB, de ez nem egy, hanem fizikailag több fájlban tárolódik a merevlemez különböző mappáiban. Az egységes kezelőfelületek miatt gyakorlatilag nem kell azzal foglalkoznunk, hogy melyik beállítás melyik fájlban található. Az NTFS fájlrendszernek és az új védelmi eljárásoknak köszönhetően megoldottá vált a védelem kiépítése, korábban az .INI "korszakban" erről nem beszélhettünk. Szerkezetét tekintve hierarchikus felépítésű úgynevezett faszerkezetet alkot.

Maximális méretére nincs korlátozás, akár az egész merevlemezt betöltheti. Ha ezt nem akarjuk, manuálisan korlátozhatjuk a kiterjedését. Ehhez rendszergazdai jogok birtokában keressük meg a következő helyet: Vezérlőpult > Rendszer > Speciális > Teljesítménybeállítások > Virtuális memória > Módosítás > A rendszerleíró adatbázis mérete (Control Panel > System > Advanced > Performance Options > Virtual Memory > Change > Registry size).
Itt azon túl, hogy beállíthatjuk a maximális kiterjedését MB-ban megadva, megtudjuk jelenlegi méretét is.

Szerkesztésére többféle alkalmazás készült grafikus és parancssori egyaránt. A Windows-hoz is kapunk néhányat, ezek közül most indítsuk el a REGEDIT.EXE nevűt a Start > Futtatás (Start > Run) mezőbe beírva a nevét. Az ablak bal oldalán látható a faszerkezet az öt részfával (subtree):

HKEY_CLASSES_ROOT (HKCR):
Alapvetően kétféle adatot tárol:
  • A fájlkiterjesztésekhez rendelt alkalmazásokat.
  • A COM objektumok konfigurációs adatait.
Ténylegesen nem egy önálló ágról van szó, hanem a HKEY_LOCAL_MACHINE\SOFTWARE\Classes és a HKEY_CURRENT_USER\SOFTWARE\Classes alágak másolatáról. Bármelyik helyen módosított adat átkerül a másik ágba is. Két egymásnak ellentmondó változtatás esetén az utóbbit veszi át.

HKEY_CURRENT_USER (HKCU):
Az aktuálisan bejelentkezett felhasználó beállításait tartalmazza, tulajdonképpen a felhasználói profil egy része. Az itt található információ az NTUSER.DAT fájlból töltődik be a bejelentkezést követően - amely a profilokban helyezkedik el (alapértelmezés szerint a \Documents and Settings\felhasználónév mappában). Az alkalmazások beállításait, képernyő színeket, biztonsági adatokat és egyéb egyéni beállításokat foglal magába. A klasszikus WIN.INI fájl továbbfejlesztésének tekinthető. Hasonló adatok találhatók a HKEY_LOCAL_MACHINE ágban is, de a HKEY_CURRENT_USER beállításai elsőbbséget élveznek, például a felhasználó által definiált környezeti változók felülírják a rendszerváltozókat (különben nem lehetne őket megváltoztatni).

HKEY_LOCAL_MACHINE (HKLM):
A számítógép konfigurációs beállításait foglalja magába. Itt tárolódik a felhasználó lista, a hardverelemek illesztőprogramjai és a szoftverek konfigurációs adatai. A merevlemez %systemroot%\system32\config mappájában lévő fájlokban találhatók meg mindezek.

HKEY_USER:
Az alapértelmezett felhasználói profil (default profile) és a HKEY_CURRENT_USER egy részének másolatát foglalja magába. Az itt található almappák között a nevükbe foglalt felhasználói biztonsági azonosító (SID) szerint lehet különbséget tenni.

HKEY_CURRENT_CONFIG:
Az aktuálisan használt hardverprofilt tartalmazza. Ismét nem egy önálló ágról, hanem a HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardvare Profiles\Current másolatáról van szó. Megtalálhatók benne a rendszer illesztőprogramjainak és használandó szolgáltatásainak (services) konfigurációs paraméterei.

Ha rákattintunk a faszerkezetet kibontó + jelekre, megnyílnak az adatok és további mappák. A mappákat kulcsnak (key) nevezzük, létrehozásukhoz kattintsunk a Szerkesztés > Új > Kulcs (Edit > New > Key) menüpontra vagy egy üres ablakterületen a jobb oldali egérgombbal és a megjelenő menüben az Új > Kulcs (New > Key) sorra. Adatot létrehozni ugyanígy lehet. Az alábbi típusok felhasználásával:

REG_SZ = Karakterlánc (String Value):
Egy egyszerű sztring (1 sor).

REG_BINARY = Bináris érték (Binary Value):
Bármilyen hexadecimális (vagy karakteres) formában megadott bitsorozat.

REG_DWORD = Kétszó (DWORD):
Kétszó vagy más néven duplaszó. 4 bájtból azaz 32 bitből álló decimális vagy hexadecimális szám.

REG_EXPAND_SZ:
0 végű tömörített karakterlánc a környezeti változók tárolására (pl. %PATH%). A feloldást az "ExpandEnvironmentStrings" Windows függvénnyel lehet elvégezni.

REG_MULTI_SZ :
Több soros karakterlánc.

REG_DWORD_LITTLE_ENDIAN:
Ugyanaz, mint a REG_DWORD csak "Little Endian" formátumban tárolva: 4 byte-os szám, ahol a legalacsonyabb byte a legalacsonyabb címen kap helyet, a következő előtte és így tovább - a 0x12345678 érték így tárolódik: 0x78 0x56 0x34 0x12.

REG_DWORD_BIG_ENDIAN:
4 byte-os szám "Little Endian" formátumban tárolva, ez az előző fordítottja: a legmagasabb byte van a legalacsonyabb címen - a 0x12345678 érték így tárolódik: 0x12 0x34 0x56 0x78.

REG_LINK:
Unicode szimbolikus link, belső használatra. Az alkalmazások nem használhatják ezt a típust.

REG_NONE:
Nem definiált értékű típus.

REG_QWORD:
64 bites szám.

REG_QWORD_LITTLE_ENDIAN:
64 bites szám " Little Endian" formátumban.

REG_RESOURCE_LIST:
Eszközmeghajtó program lista a hardver erőforrások számára vagy egy fizikai eszközvezérlő a \ResourceMap ágból.

REG_RESOURCE_REQUIREMENTS_LIST:
A lehetséges hardver erőforrások eszközmeghajtó listája vagy egy fizikai eszközvezérlő a rendszer által készített \ResourceMap ágból.

REG_FULL_RESOURCE_DESCRIPTOR:
Hardver erőforráslista a felismert, használt és \HardvareDescription ágban a rendszer által írt fizikai eszközökről.




Registry cikksorozat