BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki

Baza wiedzy











Rejestr systemu Windows XP

19-03-2004 17:57 | m_i_k_e

Rejestr systemu Windows jest specjalną bazą danych o strukturze hierarchicznej, której przeznaczeniem jest przechowywanie danych konfiguracyjnych systemu oraz danych aplikacji. Na pierwszy rzut oka wydaje się, że odgrywa drugorzędną rolę w codziennym użytkowaniu systemu. Jednak rejestr jest wykorzystywany praktycznie podczas wszystkich czynności, które wykonujemy, np. gdy przeglądamy strony WWW, rejestr zapamiętuje adresy odwiedzanych witryn. Po dokładnym poznaniu jego struktury, staje się potężnym narzędziem dla programisty piszącego aplikacje pod Windows, pozwalając wpływać nawet na zachowanie i wygląd systemu. Jak wiele przydatnych funkcji można uruchomić za pomocą rejestru wie każdy, kto spotkał się z programami takimi jak Tweak UI.

Co powinieneś wiedzieć

(Jeżeli chcesz wykorzystywać rejestr tylko w podstawowym zakresie, możesz pominąć tę sekcję i rozpocząć czytanie artykułu od „Dostęp z poziomu C#”)

Rejestr posiada pewne reguły zapisu danych, które na podstawowym poziomie operacji nie są nam potrzebne, jednak przy operacjach na bardziej skomplikowanych kluczach ich znajomość jest konieczna. Oto one:

  • 99% procent danych w rejestrze jest przedstawionych w postaci szesnastkowej,

  • maski bitów, to specjalny sposób zapisu ustawień na pozycjach bitu w słowie. Każdy bit odpowiada za inną funkcję. Np. za pomocą słowa 10-bitowego, możemy zapisać 10 różnych ustawień

  • w rejestrze istnieją 2 sposoby zapisu liczb szesnastkowych – big-endian i little-endian (przekład na polski mógłby być co najmniej śmieszny, więc pozostawię oryginał). Sposób zapisu big-endian, zapisuje bardziej znaczące bity jako pierwsze, little-endian, mniej znaczące. Widząc wartość 0x12 0x34 w wartości binarnej, należy pamiętać o odwróceniu ich kolejności, tak by otrzymać poprawną wartość – 0x3412

  • system Windows używa systemu kodowania znaków Unicode, jednak obsługuje również ANSI. Należy pamiętać, że Unicode stosuje 16-bitową reprezentację za pomocą little-endian, ANSI natomiast big-endian

  • rejestr rozróżnia wartości null i puste łańcuchy, odpowiednio są to null i ””

  • w rejestrze istnieją identyfikatory zasad bezpieczeństwa (SID) – każde konto w systemie ma swój własny, unikalny SID,

  • globalnie unikalny identyfikator (GUID) to liczba, jednoznacznie identyfikująca obiekty, takie jak komputery, urządzenia, komponenty aplikacji. Mogą mieć te same nazwy, ale ich GUID’y zawsze będą różne. Przykładem może być następujący GUID, reprezentujący Kosz widoczny na pulpicie: {645FF040-5081-101B-9F08-00AA002F954E}.

  • Struktura rejestru

    Podstawowym pojęciem jest klucz (Key), który możemy porównać do folderu w strukturze systemu plików, jako, że dokonują klasyfikacji odpowiednich wartości. Drugim typem są wartości klucza(Value) – podobne do plików, przechowujące konkretne dane.

    Wartości klucza składają się z:

    Nazwy – każda wartość posiada nazwę, która jest unikalna na poziomie danego klucza i może składać się 512 (ANSI) lub 256 (Unicode) znaków.

    Typu – każda wartość ma typ, który determinuje przechowywane dane.

    Danych – każda wartość może być łańcuchem pustym, null’em lub zawierać dane. Maksymalnie mogą to być dane o długości 32,676 bajtów, choć praktycznie przyjmuje się ograniczenie do 2KB.

    Więcej o typach

    Najczęściej występujące typy w rejestrze to:

  • REG_BINARY - dane binarne,

  • REG_DWORD - 32-bitowe wartości liczbowe, często używane jako flagi logiczne,

  • REG_SZ – łańcuchy znakowe, najczęściej spotykany typ w rejestrach.

Pozostałe typy są rzadziej spotykane, często są pochodnymi powyższych typów, np. REG_DWORD_LITTLE_ENDIAN (typ DWORD, w którym mniej znaczące bity są zapisywane jako pierwsze) lub zupełnie inny typ - REG_NONE (dane bez zdefiniowanego typu).

Organizacja rejestru

Rejestr na najwyższym poziomie hierarchii zawiera 5 kluczy głównych (gałęzi):

  • HKEY_USERS – informacje o wszystkich kontach na danym komputerze oraz o domyślnych ustawieniach dla użytkowników

  • HKEY_CURRENT_USER – zawiera spersonalizowane ustawienia użytkownika

  • HKEY_LOCAL_MACHINE – dane o konfiguracji komputera

  • HKEY_CLASSES_ROOT – powiązania programów z różnymi typami plików, rejestracja klas dla obiektów COM

  • HKEY_CURRENT_CONFIG – konfiguracja danych dla danego profilu sprzętowego

Całą strukturę rejestru możemy zobaczyć uruchamiając „Edytor rejestru” (menu Start -> Uruchom -> regedit.exe).

Dostęp z poziomu C#

Biblioteka .NET Framework oferuje dwie klasy umożliwiające pracę z rejestrem: Registry i RegisterKey. Klasa Registry posiada metody pozwalające na dostęp do kluczy rejestru, RegisterKey pozwala natomiast na bezpośrednią już manipulację na danych (dodawanie, usuwanie i odczytywanie) reprezentując konkretny węzeł w hierarchii.

Składowe klasy Registry

 

Składowa

Przechowuje

CurrentUser

Preferencje użytkownika

LocalMachine

Konfiguracja komputera

ClassesRoot

Typy, klasy i ich właściwości

Users

Domyślna konfiguracja użytkowników

CurrentConfig

Informacje o sprzęcie

DynData

Dane dynamiczne

PerformanceData

Informacja komponentach oprogramowania

Wybrane metody klasy RegistryKey

Metody

Opis

Close

Zamyka klucz

CreateSubKey

Tworzy nowy klucz gdy taki nie istnieje, w przeciwnym razie otwiera istniejący

DeleteSubKey

Usuwa określony klucz

DeleteSubKeyTree

Usuwa klucz wraz z podkluczami

DeleteValue

Usuwa wartość z klucza

GetValue

Zwraca określoną wartość klucza

OpenSubKey

Otwiera określony klucz

SetValue

Ustawia/tworzy wartość klucza

 

Pełną listę składowych i metod tych klas możemy znaleźć w „MSDN Library for VS .NET 2003”. Obie klasy są zdefiniowane w przestrzeni nazw Microsoft.Win32, pamiętajmy więc, by nasz program zawierał poniższą linijkę:

using Microsoft.Win32;

Zacznijmy od wyświetlenia informacji o procesorze, który mamy w komputerze. Dane te znajdują się w kluczu „HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0” (gdzie HKLM to skrót od HKEY_LOCAL_MACHINE). Wyświetlmy wartość, która przechowuje nazwę procesora – „ProcessorNameString”:

RegistryKey KluczProcesora = Registry.LocalMachine

Wywołujemy składową Registry.LocalMachine, która zwraca typ klucza rejestru (RegistryKey). Jeżeli chcielibyśmy dostać się np. do wartości z klucza głównego HKEY_USERS, wywołalibyśmy składową Register.Users.

Teraz musimy otworzyć interesujący nas podklucz (w naszym przypadku „0”), podając w wywołaniu metody OpenSubKey pełną ścieżkę do niego, pomijąjąc najwyższy klucz HKEY_LOCAL_MACHINE, gdyż w poprzedniej linijce już wskazaliśmy, że będziemy pracować na wartościach z tego klucza głównego.

KluczProcesora = KluczProcesora.OpenSubKey(„HARDWARE\\DESCRIPTION\\System\\CentralProcessor\0”);

Teraz zwracamy do obiektu wartość o nazwie „ProcessorNameString”:

Object procesor = KluczProcesora.GetValue(„ProcessorNameString”);

Pamiętajmy, że zwracana przez metodę GetValue wartość jest obiektem!

Teraz spróbujemy dodać jakiś klucz i wartość do rejestru. Dodamy klucz CodeGuru w HKLM\SOFTWARE. Otwieramy podklucz „Software”, używając przeciążonej metody OpenSubKey (drugi parametr ustawiamy na logiczną wartość „true”, co oznacza, że będziemy uprawnienia do zapisywania wartości w tym kluczu):

RegistryKey klucz = Registry.LocalMachine.OpenSubKey(„Software”,”true”);

Tworzymy nowy podklucz “CodeGuru” w kluczu “Software”:

RestryKey nowy_klucz = klucz.CreateSubKey(“CodeGuru”);

A teraz możemy jeszcze dodać wartość w tym kluczu:

Nowy_klucz.SetValue(„dotnet”,”Dane wartości o nazwie dotnet w kluczu CodeGuru”);

Rejestr po dodaniu klucza „CodeGuru”

Na koniec pokażę jeszcze jak się usuwa klucze i wartości. Usuniemy najpierw wartość o nazwie „dotnet”, a następnie klucz „CodeGuru”. Znowu musimy otworzyć podklucz „HKLM\Software\CodeGuru” by usunąć TYLKO wartość „dotnet”:

RegistryKey usuwana_wartosc_klucza = Registry.LocalMachine.OpenSubKey(„Software\\CodeGuru”);

Teraz wywołujemy metodę DeleteValue, która usunie wartość z klucza:

usuwana_wartosc_klucza.DeleteValue(„dotnet”);

A teraz otworzymy klucz „HKLM\Software” i usuniemy klucz „CodeGuru” wywołując metodę DeleteSubKey:

RegistryKey usuwany_klucz = Registry.LocalMachine.OpenSubKey(„Software”,”true”);
Usuwany_klucz.DeleteSubKey(“CodeGuru”);

Możemy to zrobić jednym poleceniem, gdyż metoda DeleteSubKey usuwa klucz wraz z wartościami.

Oczywiście nie musimy za każdym razem tworzyć nowej zmiennej typu RegistryKey, która pamięta typ klucza. Możemy użyć metody Close, która zamknie otwarty klucz, ale przed ponownym wykorzystaniem tej zmiennej ponownie musimy zwrócić do niej typ klucza. Przykład użycia tej metody jest zawarty w prostej aplikacji, którą dołączam do artykułu.

To praktycznie koniec podstawowych operacji. Znając te zagadnienia możemy już przechowywać dane naszych aplikacji w rejestrze, a także wykorzystywać dane o konfiguracji lub zasobach komputera. Możemy również zgłębić strukturę rejestru i dowiedzieć się za co odpowiadają poszczególne klucze. Mając już taką wiedzę, możemy stworzyć aplikację na wzór Tweak UI, za pomocą której będziemy mogli w sposób wygodny wpływać na zachowanie i wygląd systemu. W poniższej tabelce zamieszczam kilka przykładowych kluczy, przyjmujących wartości 0 lub 1 jako dane.

Funkcja

Nazwa

Typ

Dane

HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer

Pojazuj Moje Dokumenty w klasycznym MenuStart

NoSMMyDocs

REG_DWORD

0x00  lub 0x01

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer

Prefix “Skrót do” przy nowych skrótach

Link

REG_DWORD

0x00 lub 0x01

Prowadzenie historii otwieranych dokumentów

NoRecentDocsHistory

REG_DWORD

0x00 lub 0x01

Podpowiedzi do elementów

EnableBalloonTips

REG_DWORD

0x00 lub 0x01

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel

Pokaż ikonę Mój komputer na pulpicie

{20D04FE0-3AEA-1069-A2D8-08002B30309D}

REG_DWORD

0x00 lub 0x01

 

Są to tylko proste przykłady, artykuł z założenia miał tylko pokazywać podstawowe operacje i możliwości rejestru. Osobom, które zaciekawił ten temat odsyłam do lektury książki „Microsoft Windows XP Registry Guide” Jerry’ego Honeycutt’a. Jest ona napisana w bardzo przystępny sposób, koncentrując się na praktycznej stronie wykorzystania rejestru. Więcej informacji na temat tej pozycji można przeczytać na stronie http://groups.msn.com/MicrosoftWindowsXPRegistryGuide

Załączniki:

tagi: Windows

Podobne artykuły

Komentarze 16

User 79209
User 79209
2 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Troche malo. A do Panow WebMasterow: rysunek nie powinien zajmować 100% szerokosci strony, bo wtedy czytajac artykul trzeba sie calkiem niezle namachac glowa ;)
User 79379
User 79379
9 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
bardzo ciekawy artykul,zawsze chcialem sie dobrac do rejestru - teraz wiem jak:)
s29713712
s29713712
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Dobre, ale za malo...
User 79432
User 79432
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Może niech się autor zdecyduje czy klasa nazywa się RegisterKey czy RegistryKey (oczywiście RegistryKey). A poza tym kilka literówek... Ale generalnie bardzo dobre wprowadzenie dla początkującego, chociaż trochę mało...
User 79341
User 79341
39 pkt.
Poczatkujacy
21-01-2010
oceń pozytywnie 0
dobrze opisane podstawowe operacje na rejestrze
zooly
zooly
1812 pkt.
Guru
21-01-2010
oceń pozytywnie 0
Super: prosto, któtko i na temat.
markos663593
markos663593
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
dobre, ale czegoś jakby brak...
User 79215
User 79215
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Jako wstęp - niezłe. Tak przy okazji: wygląd obrazków skłania do ich unikania w artykułach.
ROBOC!K
ROBOC!K
2 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
same podstawy... przydałoby się coś więcej....
tzielinski561
tzielinski561
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Bardzo dobry artykuł dla kogoś, kto chce zacząc grzebać w rejestrze oraz przydatny opis bilblioteki .NET.
uzytkownik usuniety
uzytkownik usuniety
3556 pkt.
Guru
21-01-2010
oceń pozytywnie 0
Artykul calkiem OK. Brakuje mi w szczegolnosci kodu i troche wiecej informacji. Poza tym w miare dobrze sie czyta.
User 79550
User 79550
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Zwięzłe podstawy zgromadzone w przystępnej formie, bez zbędnych "wodotrysków". To co potrzebne przy budowie programów korzystających z rejestru - dla mnie super.
kgrzelak3523
kgrzelak3523
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Artykuł jest krótki, zwięzły i oddający istotę opisywanego tematu. Jak na pierwszy artykuł to rewelacja!!!
wawelski_rulez3215
wawelski_rulez3215
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Super
emajak1922
emajak1922
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Tytuł Rejestr systemu Windows XP sugeruje zgoła nie zdawkową formę artykułu... Trzeba zmienić tytuł albo zawartość.
tabasco22
tabasco22
21 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Witam,

Potrzenuje kawałek kodu, który przeszuka rejestr znajdując klucze, posiadające w nazwach dane wyrazenie.

z góry dzięki.
pkt.

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.