Image

Preniknite do tajov registrov 2.

V úvode druhej časti dokončíme vysvetlenie základných pojmov z úvodného článku a vrhneme sa na registrovú štruktúru.

ANSI a Unicode kódovanie
Prvá významná znaková schéma, ktorá sa ešte aj dnes používa bola ASCII. Každý znak má v nej 8 bitov, čiže jeden byte. Bola určená predovšetkým pre západné jazyky. Jej použitie pre európske jazyky bolo obmedzené, pretože potrebné znaky neboli zahrnuté v 256 znakovom sete podporovanom znakovou schémou ASCII. Riešením bolo vytvorenie nového kódovacieho znakového štandardu Latin-1 medzinárodnou organizáciou International Standards Organization (ISO), ktorý zahŕňal aj európske znaky vo zvyšnom ASCII sete. Neskôr ho Microsoft rozšíril a pomenoval ANSI. Stále tu však bol obmedzujúci limit 256 znakov, čo nebolo postačujúce pre ázijské jazyky, ktoré ich obsahujú tisícky. Preto bol spoločnou spoluprácou spoločnosti Microsoft, Apple Computer Inc. a IBM, vytvorený nový 16-bitový kódovací štandard Unicode. Tento štandard umožňuje vytvorenie 65 536 unikátnych znakov, čo je postačujúce pre všetky jazyky vrátane čísel, interpunkčných znamienok, matematických, grafických a iných symbolov.

Na malom príklade si ukážeme rozdiel pri uložení textu Martin s použitím znakovej sady ANSI a Unicode, kde text uložený pomocou znakovej sady ANSI vyzerá takto 0x4D 0x61 0x72 0x74 0x69 0x6E . Ak je ten istý text uložený s použitím znakovej sady Unicode, bude vyzerať takto 0x4D 0x00 0x61 0x00 0x72 0x00 0x74 0x00 0x69 0x00 0x6E 0x00. Dôvodom je, že znaková sada Unicode je 16−bitová. Windows XP ukladá 16−bitové čísla spôsobom Little−Endian, preto zapíše M do pamäti ako 0x004D nasleduje a ako 0x0061 a zvyšné znaky ako 0x0072, 0x0074, 0x0069 a 0x006E.

Image

Null a Empty Strings (prázdny reťazec)
Pre programátorov pojem Null (alebo 0x00) nie je neznámy. Vo Windows XP znak Null predstavuje koniec reťazca. S podobným pojmom sa stretávame aj v registroch, kde údaj hodnoty kľúča môže byť prázdny (Empty Strings) t.j. neobsahuje žiadny údaj. V registroch ho zvyčajne vidíme ako text hodnota nie je nastavená (value not set). Ak sa v registroch stretnete s hodnotou "" , nemýľte si ju s hodnotou Empty Strings (prázdny reťazec), nie sú to rovnaké hodnoty.

Štruktúra registrov
Ak si otvoríme editor registrov zistíme, že štruktúra registrov je podobná štruktúre systému súborov, ale má svoju vlastnú analógiu.

V Editore databázy Registry v ľavom paneli (panel kľúčov) je vidieť hierarchiu registrov, ktorá je vizuálne podobná systému súborov v ľavom paneli vo Windows Explorery. Kľúče registrov sú všetky „priečinky“ v paneli kľúčov. Ich hodnoty nájdeme v pravom paneli (panel hodnôt) editora registrov, čo pri porovnaní so systémom súborov predstavuje obsah priečinkov v pravom paneli vo Windows Explorery. Všetky disky vo Windows Explorery vidíme pod ikonou Tento počítač, čo je analogický totožné s umiestnením koreňových kľúčov registrov taktiež pod ikonou Tento počítač.

Image

Kľúče
Editor registrov používa pre ne tie isté ikony ako Windows Explorer pre priečinky. Taktiež pre ne platia tie isté pravidlá pomenovávania a vytvárania nových kľúčov t.j. do každého kľúča je možné umiestňovať neobmedzený počet ďalších kľúčov, ale každý s iným názvom.

Podobnosť so systémom súborov nájdeme aj pri zadávaní cesty ku kľúčom. Cesta C:\Windows\System32\spider.exe odkazuje na súbor nazvaný spider.exe umiestnený na disku C v podpriečinku priečinka Windows s názvom System32. Vetva HKCU\Control Panel\Keyboard\KeyboardSpeed odkazuje na hodnotu nazvanú KeyboardSpeed v koreňovom kľúči HKCU v podkľúči kľúča Control Panel s názvom Keyboard.

Image

Kľúče v registroch sú vzájomne prepojené. Napríklad Windows XP ukladá hardwarové profily vo vetve HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\. Každý hardwarový profil je podkľúč ####, kde #### je vzrastajúce číslo začínajúce od 0000. Podkľúč Current odkazuje na kľúče v aktuálnom hardwarovom profile, a koreňový kľúč HKCC odkazuje na Current ako znázorňuje nasledujúci obrázok.

Image

Hodnoty
Každý kľúč musí mať aspoň jednu hodnotu, ale môže ich byť aj viac. Hodnotu Default (Predvolené) typu REG_SZ obsahuje každý kľúč. Ako už bolo opísané vyššie v analógii k Windows Exploreru sa hodnoty dajú prirovnať k súborom v priečinkoch. Typy hodnôt zase môžeme porovnať s príponami súborov. Ak kliknutím označíme kľuč na paneli s kľúčmi, na paneli s hodnotami vidíme tri stĺpce, v ktorých sa nachádza:

• Názov – každá hodnota má názov, pričom sa uplatňujú rovnaké pravidlá pomenovania ako vo Windows Explorery

• Typ – typ hodnoty určuje typ dát, ktoré obsahuje, napr. hodnota REG_DWORD obsahuje číselný údaj, hodnota REG_SZ – reťazec

• Údaj – každá hodnota môže byť prázdna, null alebo obsahovať dáta

Typy
V registroch Windows XP môžeme nájsť nasledujúce typy hodnôt, z ktorých prvé tri REG_SZ, REG_BINARY a REG_DWORD sa používajú na drvivú väčšinu nastavení v registroch.

• REG_SZ – textová hodnota. REG_SZ je najčastejším typom údajov v registroch. Príklad pre REG_SZ – Microsoft Windows XP, Last Username alebo aj Martin Popovec. Každý reťazec končí s nulovým znakom. Programy neexpandujú premenné v REG_SZ hodnotách.

• REG_BINARY – Binárna hodnota. Editor databázy Registry zobrazuje údaj binárnej hodnoty v hexadecimálnom zápise, taktiež ho v hexadecimálnom zápise do registrov vkladáme. Príklad binárnej hodnoty REG_BINARY 0x38 0x02 0xCE 0xA9 0x92 0x38 0xD9 0xAB.

• REG_DWORD – Hodnota DWORD (32−bitová). V registroch nájdeme mnoho hodnôt typu REG_DWORD, používajú sa ako Boolean znaky (0 alebo 1, True alebo False, Yes alebo No). Údaj hodnoty môže byť aj 32−bitové číslo bez znamienok v rozsahu od 0 do 4,294,967,295 alebo 32−bitové číslo so znamienkami od −2,147,483,648 do 2,147,483,647. V REG_DWORD môže byť tiež uložený čas v milisekundách (1000 = 1 sekunda). Nájsť a editovať ich môžeme v desiatkovom a hexadecimálnom zápise. Príklady hodnoty REG_DWORD – 0xFE010002, 0x10010100.

• REG_DWORD_BIG_ENDIAN – hodnota DWORD s bytom najvyššieho rádu na prvom mieste. Poradie bytov je opačné ako sú uložené v REG_DWORD. Napríklad číselná hodnota 0x01020304 je uložená v pamäti ako 0x01 0x02 0x03 0x04. S týmito typom hodnôt sa nestretávame často pri procesoroch založených na architektúre Intel (každý počítač s x86 alebo Pentium mikroprocesorom).

• REG_DWORD_LITTLE_ENDIAN – hodnota DWORD s bytom najnižšieho rádu na prvom mieste (opačné poradie bytov). Tento typ je to isté ako REG_DWORD, a keďže procesory založené na architektúre Intel ukladajú číselné údaje v tomto formáte, je to najbežnejší formát vo Windows XP. Napríklad číslo 0x01020304 je uložené ako 0x04 0x03 0x02 0x01. Editor databázy Registry neponúka možnosť vytvoriť hodnotu REG_DWORD_LITTLE_ENDIAN , pretože je identická s hodnotou REG_DWORD.

• REG_EXPAND_SZ – Variable−length text. Hodnota tohto typu zahrňuje premenné. Programy, ktoré používajú tieto hodnoty expandujú premenné pred ich použitím. Napríklad REG_EXPAND_SZ hodnota, ktorá obsahuje %USERPROFILE%\Templates môže byť expandovaná do C:\Documents and Settings\Martin\Templates predtým, než ju program použije.

• REG_MULTI_SZ – binárna hodnota obsahujúca niekoľko reťazcov. Editor databázy Registry zobrazuje reťazce v riadkoch a umožňuje ich editovanie. V registroch prázdny znak (0x00) oddeľuje reťazce, a dva prázdne znaky označujú ukončenie reťazcov.

• REG_FULL_RESOURCE_DESCRIPTOR – Zoznam zdrojov zariadení alebo ovládačov pre zariadenia. Tento typ dát je dôležitý pre Plug and Play zariadenia, ale nefiguruje príliš v našej práci s Registrom. Editor databázy Registry neumožňuje vytváranie hodnôt tohto typu, ale umožňuje ich zobrazenie. Príklad pre túto hodnotu nájdeme vo vetve HKLM\HARDWARE\DESCRIPTION\Description.

• REG_RESOURCE_LIST – zoznam hodnôt REG_FULL_RESOURCE_DESCRIPTION. Editor databázy Registry zobrazuje tieto hodnoty, ale neumožňuje ich editovanie.

• REG_RESOURCE_REQUIREMENTS_LIST – zoznam potrebných zdrojov zariadení. Editor databázy Registry zobrazuje tieto hodnoty, ale neumožňuje ich editovanie.

• REG_LINK – prepojenie. Editor databázy Registry neumožňuje vytváranie týchto hodnôt.

• REG_NONE – hodnota nedefinovaného typu.

• REG_QWORD – Quadruple−word hodnota (64−bitová). Tento typ je podobný s REG_DWORD ale obsahuje 64 bitov namiesto 32. Tento typ hodnoty podporuje len Windows XP 64−Bit Edition. V Editore databázy Registry sú tieto hodnoty zobrazené a môžete ich editovať v desiatkovom a hexadecimálnom zápise. Príklad REG_QWORD hodnoty je 0xFE02100100010001.

• REG_QWORD_BIG_ENDIAN – Quadruple−word hodnota s bitom najvyššieho rádu na prvom mieste. Poradie bytov je opačné ako sú uložené v REG_QWORD. Viac informácii nájdete v REG_DWORD_BIG_ENDIAN.

• REG_QWORD_LITTLE_ENDIAN – Quadruple−word hodnota s bitom najnižšieho rádu na prvom mieste (opačné poradie bytov). Tento typ je to isté ako REG_QWORD. Viac informácii nájdete v REG_DWORD_LITTLE_ENDIAN. Editor databázy Registry neumožňuje vytvárať hodnoty REG_QWORD_LITTLE_ENDIAN, pretože táto hodnota je identická s hodnotou REG_QWORD.

V budúcom diele si rozoberieme organizáciu registrov.

Space prameň: Windows XP Registry Guide (Jerry Honeycutt)
Pomocník Windows XP (Microsoft Knowledge Base)

{moscomment}