Struktura Rejestru Windows

Struktura Rejestru Windows

Rejestr zawiera trzy rodzaje obiektów:

  • klucze

  • wartości

  • dane

Klucze Rejestru mogą zawierać jeden lub kilka innych kluczy lub wartości. Każdy klucz lub wartość musi mieć unikalną nazwę wewnątrz danego klucza lub klucza podrzędnego. Wielkość liter w nazwach kluczy jest zapamiętywana ale nie jest rozróżniana. Nazwa klucza może składać się z dowolnych znaków, które dają się wyświetlić, w tym spacji, podkreśleń, symboli. Nie może jednak zawierać znaków lewego ukośnika (\). Znak ten jest używany jako separator w ścieżce definiującej położenie elementu
w Rejestrze. Klucze i klucze podrzędne zawierają jedną wartość o specjalnej nazwie (Domyślna)

Wartości opisują trzy elementy:

  • typ danych

  • nazwa wartości

  • dana wartości

Typ danych jest typem reprezentującym sposób zapisu danych w kluczu. Rejestr wykorzystuje następujące typy danych:

  1. Ciągi znaków: ciąg znaków to mająca zmienną długość tablica znaków, zakończona znakiem o kodzie zero. Mogą być w nim przechowywane słowa, zdania, ścieżki i inne teksty.

  2. Binarne: wartość binarna to mający zmienną długość ciąg cyfr heksadecymalnych (0-9 i A-F). Każdy bajt jest reprezentowany przez dwie heksadecymalne cyfry.

  3. DWORD : wartość DWORD (podwójne słowo) to pojedyncza liczba 32 bitowa reprezentowana przez osiem cyfr heksadecymalnych.

  4. W systemie Windows NT wykorzystuje się jeszcze REG_BINARY, REG_DWORD, REG_EXPAND_SZ, REG_MULTI_SZ, REG_SZ.

2.1 Analiza hierarchii rejestru:

Rejestr zawiera następujące klucze główne :

  • HKEY_CLASSES_ROOT zapewniający wsteczną zgodność obsługi OLE i DDE z Windows 3.x

  • HKEY_CURRENT_USER zapewniający że, Windows i aplikacje zachowują się nie zależnie od tego jaki użytkownik jest obecnie zalogowany do systemu.

  • HKEY_LOCAL_MACHINE przechowuje informacje o konfiguracji sprzętu i oprogramowaniu związanym z danym komputerem. Informacje te są charakterystyczne dla danej maszyny nie zależnie od tego który użytkownik wpisze się do sytemu.

  • HKEY_USERS zawiera informacje o profilu bieżącego użytkownika

  • HKEY_CURRENT_CONFIG wskazuje na klucz podrzędny HKEY_LOCAL_MACHINE\Config, zawierający informacje specyficzne dla danego komputera

  • HKEY_DYN_DATA przechowuje informacje, które muszą przez cały czas znajdować się w pamięci RAM

3 Różnice pomiędzy Rejestrem systemu Windows 9x i NT

Windows NT nie przechowuje wartości rejestru w dwóch plikach. Zamiast tego, zawartość przechowywana jest w plikach reprezentujących poszczególne gałęzie rejestru rozpoczynające się na samej górze hierarchii. Pliki te znajdują się w folderze Windows NT w podkatalogu SYSTEM32\CONFIG. Żaden z plików gałęzi rejestru nie posiada rozszerzenia i jest powiązany z dwoma typami plików o rozszerzeniach SAV oraz LOG. Plik SAV stanowi kopię zapasową pliku gałęzi rejestru i jest tworzony podczas każdej pomyślnie zakończonej sekwencji startowej. Plik LOG natomiast zawiera wszystkie zmiany i modyfikacje, które system dokonuje w zawartości pliku gałęzi rejestru. Windows NT przechowuje konfiguracje specyficzne dla użytkowników w innym miejscu, podobnie jak Windows 9x z włączonymi profilami. Windows NT przechowuje dane konfiguracyjne każdego użytkownika w folderze PROFILES\USERNAME , gdzie USERNAME to nazwa użytkownika podawana podczas logowania. Plik ten nosi nazwę NTUSER.DAT.

Rejestry Windows 9x i Windows NT są pod wieloma względami podobne, szczególnie gałęzie HKEY_CLASSES_ROOT i HKEY_USERS.

Różnią się natomiast tym że:

  • WinNT przechowuje zawartość rejestru w wielu plikach podzielonych na gałęzie rejestru

  • WinNT stosuje pełną ochronę, zarówno samych gałęzi rejestru jak i poszczególnych kluczy

  • struktura klucza HKEY_LOCAL_MACHINE\System znacznie się różni

W dalszej części pracy gałęzie rejestru będą zwane ulami. Jest to termin przyjęty zwyczajowo przez Microsoft.

3.1 Typy plików binarnych w Windows NT:

 

Tabela 1. Znaczenie plików w folderach z ulami

Rozszerzenie pliku

Opis

Brak

Zawiera bieżącą kopię ula

.ALT

Zawiera zapasową kopię ula

.LOG

Zawiera rejestr zmian w ulu

.SAV

Zawiera zapasową kopię ula po instalacji (w trybie tekstowym)

 

Tabela 2. Powiązania plików binarnych uli

Ul

ALT

LOG

SAV

SAM

SAM.LOG

SAM.SAV

Security

Security.LOG

Security.SAV

Software

Software.LOG

Software.SAV

System

SYSTEM.ALT

SYSTEM.LOG

SYSTEM.SAV

 

Tabela nr 1 wyjaśnia znaczenie rozszerzeń plików zawierających dane
o poszczególnych ulach systemu Win NT. Natomiast w tabeli nr 2 zamieszczone są powiązania każdego ula z plikami binarnymi.

4 Powiązania plików

Oprócz innych ustawień systemowych, systemy Win NT i 9x przechowują w rejestrze informacje o powiązaniach plików. Informacje
o rozszerzeniach plików i instrukcjach OLE są zawarte w podkluczach klucza HKEY_CLASSES_ROOT. Każdy typ rozszerzenia jest reprezentowany
w rejestrze przez osobny klucz zaczynający się od kropki (TXT, .BMP itd.). Wewnątrz podklucza rozszerzenia pliku zawarte są zwykle różne rodzaje danych. Mogą to być dane wskazujące na definicje klasy rozszerzenia pliku, nazywane czasem identyfikatorami aplikacji, oprócz tych danych klucz może zawierać informacje instruujące Windows jak powinien otworzyć czy też wydrukować dany dokument.

4.1 Rozszerzenia plików z podkluczami definicji klasy

Do podkluczy rozszerzeń plików, zwierających wskaźniki do podkluczy definicji klasy należą podklucze oraz wartości określające typ pliku powiązany z rozszerzeniem. Na przykład rozszerzenie pliku .TXT jest powiązane z plikiem tekstowym. Wskaźniki w podkluczach rozszerzeń plików nie określają jednak co powinno zostać zrobione z plikiem, wskazują jedynie na inny podklucz rejestru, informujący Windows jak powinien obsłużyć taki plik. Aby ułatwić wyszukiwanie, Windows przechowuje te podklucze w tym samym podkluczu co typy rozszerzeń.

By przybliżyć nieco ten temat należy posłużyć się przykładem. Typowa pozycja rejestru dla pliku JPG może zawierać następujące wartości:

(Domyślna) „jpegfile”

ContentType „image/jpeg”

Wartość (Domyślna) zawiera typ pliku powiązany z plikami o rozszerzeniu JPG. Wartość ContentType zawiera tzw. Typ MIME, czyli rozszerzenie poczty internetowej ogólnego przeznaczenia( ang. Multipurpose Intrnet Mail Extensions). Typ pliku z jakim jest skojarzone dane rozszerzenie to jpegfile
i jest to nazwa klucza zawierającego informacje o aplikacji lub aplikacjach w których ten typ pliku można otworzyć, wydrukować itp.

Budowa takiego klucza dla pliku JPG może być następująca:

Jpegfile DefaultIcon (Domyślna) „c:\Windows\System\jpeg.ico,0”

Shell

Open (Domyślna) „Otwórz”

Command (Domyślna) „c:\Win\paint.exe %1”

Pozycja DefaultIcon zawiera ikonę wyświetlaną w Exploratorze dla danego typu pliku. Pozycja shell jest to podklucz zawierający podklucze tzw. reakcji w momencie dwukrotnego kliknięcia na danym typie pliku. Są to „Open” otwarcie pliku, „Print” wydruk pliku i inne zdefiniowane przez użytkownika.

Jeżeli jest kilka pozycji to wykonywana jest domyślnie pierwsza. By skorzystać z innych opcji należy kliknąć prawym klawiszem i wybrać z menu kontekstowego właściwą reakcję. By nazwać poszczególne pozycje w menu kontekstowym należy wypełnić wartość (Domyślna) dla określonej reakcji. Na przykład:

Open – (Domyślna) „Otwórz”

Print – (Domyślna) „Drukuj”

Niektóre podklucze rozszerzeń plików nie zawierają wartości wskazujących na definicję klasy. Zamiast tego zawierają dane instruujące Windows jak otworzyć lub wydrukować zawartość pliku. Jest to jakby połączenie rozszerzenia pliku z typem pliku w kluczu rozszerzenia pliku.

Istnieje też grupa podkluczy skojarzonych z definicjami klas które zawierają dodatkowe informacje. Te dodatkowe informacje to najczęściej informacje o tym jak stworzyć nowy typ pliku. Informacje te są zawarte w podkluczu ShellNew\Command.

4.2 Podklucze definicji klas

Powodem dla którego w Windows zastosowano w podkluczu rozszerzenia wskaźnik do podklucza definicji klasy, była chęć zachowania pewnej elastyczności. Windows może przechowywać w pojedynczym kluczu wszystkie informacje o typie pliku , łącznie z jego rozszerzeniem
i poleceniami służącymi do jego obsługi. Jednak w ten sposób rejestr byłby pełen powtarzających się informacji. Pojedyncza deklaracja klasy potrafi obsłużyć dwa lub więcej rozszerzeń. Windows obsługuje długie nazwy plików, gdzie rozszerzenia nie są ograniczone do trzech znaków. I tak na przykład pliki formatu JPG miewają rozszerzenia .JPG jak i JPEG. W ten sposób dwa różne rozszerzenia wskazują na tą samą klasę. Innym powodem zastosowania odniesień jest przypadek gdy dana aplikacja obsługuje różne formaty plików. Przykładem może tu być procesor tekstu, przeglądarka plików graficznych itp. Wadą takiego sposobu obsługi plików jest brak możliwości otwarcia tego samego typu pliku przez różne aplikacje. Podklucze definicji klas zawierają także informacje o domyślnych ikonach wyświetlanych przez Windows.

Te informacje są wykorzystywane w celu:

  • wyświetlania ikony na przycisku paska zadań podczas działania aplikacji

  • wyświetlania ikony na pulpicie, gdy tworzysz połączenie lub skrót do pliku bądź aplikacji

  • wyświetlania ikony w Eksploratorze Windows

  • wyświetlania ikony na belce tytułowej aplikacji

  • wyświetlania ikony w Menu Start

Ustawienia rejestru dotyczące ikon znajdują się w podkluczach definicji klas, w zawartych w nich podkluczach „DefaultIcon”.

W podkluczu tym Windows może przechowywać następujące typy wartości:

  • określenie ścieżki oraz nazwy pliku EXE lub DLL zawierającego ikony. Oprócz ścieżki trzeba podać numer ikony w pliku liczony od zera

  • określenie ścieżki oraz nazwy pliku EXE lub DLL zawierającego ikony, dodanie znaku minus oraz identyfikatora zasobu ikony. Aby użyć tej metody, należy znać numer zasobu.

  • określenie ścieżki oraz nazwy pliku obrazka, który Windows może wyświetlić jako ikonę. Mogą to być następujące typy plików:

  1. BMP – plik bitmapy

  2. ICO – plik ikony

  3. CUR – plik kursora

  4. SCR – plik wygaszacza ekranu

  5. ANI – plik animowanego kursora

  6. RLE – spakowana bitmapa

  • dołączenie ciągu %1 instruującego Windows by użył uchwytu ikony, w celu określenia ikony dla danego typu pliku. Ta metoda jest stosowana w przypadku aplikacji EXE. Dzięki temu w przypadku różnych aplikacji nie jest wyświetlana ta sama ikona.

4.3 Szybki podgląd

Wraz z Windows jest dostarczany program Szybki podgląd, który pozwala na przeglądanie niektórych plików bez konieczności uruchamiania aplikacji w których zostały one stworzone. Dla plików dopuszczających szybki podgląd w menu kontekstowym systemu znajduje się pozycja szybki podgląd. Dane na temat szybkiego podglądu znajdują się w podkluczu HKEY_CLASSES_ROOT\QickView. W tym podkluczu znajduje się lista podkluczy definicji klas typów plików wraz z podkluczami, zawierającymi identyfikatory klas (CLSID). Typ pliku który może być przeglądany za pomocą szybkiego podglądu jest zdefiniowany w postaci .XXX , gdzie xxx to nazwa rozszerzenia danego typu pliku. Zaczyna się on od kropki i zawiera podklucz z identyfikatorem klasy która obsługuje dany szybki podgląd; (CLSID) jako wartość domyślą zawiera opis tekstowy przeglądarki dla szybkiego podglądu. Pozwala to na łatwe odczytanie jaka aplikacja obsługuje szybki podgląd danego typu plików.

4.4 Obsługa plików nieznanych typów

Gdy użytkownik dwukrotnie klinie na pliku, Windows szuka w kluczu HKEY_CLASSES_ROOT podklucza zgodnego z rozszerzeniem pliku. Gdy zdarzy się że, nie znajdzie takiego podklucza automatycznie przechodzi do podklucza \Unknown i w jego podkluczu \shell\openas\command szuka instrukcji obsługi takiego pliku. Domyślną wartością tego podklucza jest „C:\Windows\rundll32.exe shaell32.dll,OpenAs_RunDLL %1”, nakazująca wyświetlenie okna dialogowego „Otwórz z” Wewnątrz tego okna użytkownik może wybrać aplikację którą może użyć do otwarcia takiego pliku.

4.5 Pozycje rejestru związane z menu kontekstowym

Bardzo dużym udogodnieniem w Windows 9x i NT są menu kontekstowe. Takie menu jest wyświetlane w momencie kliknięcia prawym przyciskiem na ikonie pliku widzianej w oknie eksploratora. Informacje używane do sterowania menu kontekstowym przechowywane są w kluczu HKEY_CLASSES_ROOT. Windows korzysta z następujących elementów menu kontekstowego:

  • elementy statyczne: Te elementy są oparte na powiązaniach pliku i należą do nich polecenia „Otwórz z”, „Szybki podgląd” itp.

  • elementy dynamiczne: Te elementy zmieniają się na podstawie zawartych w rejestrze procedur obsługi menu kontekstowego. Procedury te to pozycje serwera OLE, określające jakie elementy dynamiczne dodawane są do menu.

  • elementy definiowane przez program: Te elementy obsługiwane są przez eksploratora Windows i nie powinny być modyfikowane. Niektóre z popularnych poleceń tej kategorii to „Wyślij do”, ”Wytnij”, ”Wstaw”, ”Kopiuj” itp.

4.6 Statyczne elementy menu kontekstowego

Proces postępowania podczas budowy menu kontekstowego zaczyna się od zajrzenia do podklucza HKEY_CLASSES_ROOT\*\shell, w celu zlokalizowania statycznych elementów menu. Standardowo ten podklucz nie występuje ale użytkownik może go dodać by wprowadzić pozycję menu kontekstowego występującą nie zależnie od typ pliku. Następnym krokiem jest przejrzenie podkluczy definicji klasy wskazanego pliku i zlokalizowanie podklucza \shell. Windows wie jak obsłużyć standardowe polecenia takie jak open, print i nie trzeba w ich wartości domyślnej umieszczać nazwy pojawiającej się w menu kontekstowym. I tak dla open jest to Otwórz, dla print Drukuj itp. W ten sposób Windows kończy ustalanie statycznych elementów menu i rozpoczyna ustalanie dynamicznych elementów.

4.7 Dynamiczne elementy menu

Podobnie jak w przypadku elementów statycznych, elementy dynamiczne wynikają z typu pliku oraz z bieżącego stanu aplikacji i systemu. Dynamiczne elementy menu kontekstowego są definiowane by uelastycznić obsługę systemu typów plików. Na przykład dla plików typu EXE, COM, DLL, SYS można zdefiniować pozycję sprawdzania wirusów, dla plików spakowanych odpowiednie polecenie rozpakowywania w określonym programie depakującym. Tworząc określoną aplikację można tak zaprogramować element menu kontekstowego by np. dla plików
o określonych atrybutach były wyświetlane pozycje pozwalające na ich zdejmowanie.

Podklucze odpowiedzialne za pozycje dynamiczne menu kontekstowego znajdują się w podkluczach \shellx\ContextMenuHandlers. Tam umieszczane są dopiero podklucze np. WinZip wewnątrz których znajdują się identyfikatory klas pliku DLL, zawierający informacje o procedurze obsługi menu kontekstowego. W oparciu o identyfikator CLSID przeszukiwany jest podklucz HKEY_CLASSES_ROOT\CLSID i pobierana jest nazwa oraz położenie pliku DLL, do którego odnosi się identyfikator w podkluczu procedury obsługi menu. Nazwa DLL’a może zostać zlokalizowana w podkluczu \InProcServer32.

4.8 Identyfikatory CLSID

Podklucz CLSID zawiera identyfikatory klas dla typów plików. Każdy rodzaj obiektu OLE w Windows posiada unikalny identyfikator klasy CLSID, zawarty w tym podkluczu. Identyfikatory te pomagają systemowi
w organizowaniu różnych obiektów OLE, włącznie z plikami DLL, EXE, funkcjami Windows oraz typami plików. Identyfikator klas składa się z ciągu cyfr szesnastkowych, ujętych w nawiasy klamrowe, podzielonego kreskami na grupy:

Osiem cyfr, trzy grupy po cztery cyfry i jedna grupę dwunastu cyfr. Są one tworzone przez programistów podczas pisania programów OLE. Ponieważ CLSID musi być unikalny dla wszystkich aplikacji występujących
w pojedynczym komputerze to numery CLSID są generowane losowo za pomocą specjalnych programów, tak zoptymalizowanych by wygenerowany numer był niepowtarzalny. Takim programem jest guidgen.exe z pakietu Microsoft VC++. W podkluczu CLSID występuje jeden lub kilka podkluczy. Do najczęściej spotykanych należą:

  • DefaultIcon – określa ikonę stosowaną do oznaczenia obiektu, do którego odnosi się dany CLSID

  • InprocHandler – wskazuje na procedurę obsługi obiektu, Plik DLL współpracujący z plikiem EXE przy obsłudze danego typu pliku.

  • InprocServer – Zawiera wskaźnik do In-Process Server obiektu, który jest plikiem DLL obsługującym zdefiniowany typ obiektu CLSID

  • InprocServer32 – Wskazuje na 32 bitowy In-Process Server

  • LocalServer – zawiera ścieżkę i nazwę pliku aplikacji serwera , czyli plik EXE obsługujący obiekty danego typu.

  • ProgID – zawiera czytelny dla człowieka identyfikator CLSID

  • ShellEx – zawiera podklucze definiujące, które DLL’e i polecenia używane są do wywoływania menu kontekstowego obiektu lub okna dialogowego właściwości.

4.9 Podklucz InprocServer32

Podklucze te są tworzone dla 32 bitowych aplikacji i są podkluczami kluczy CLSID. InprocServer32 zawiera wskaźniki do serwera in-process obiektu, czyli odpowiedniej biblioteki DLL obsługującej ten typ obiektów. Aby serwery in-process mogły działać wielowątkowo, podklucz inprocServer32 zawiera także informacje o modelu wielowątkowości serwera. Wartość dla tego typu ustawienia nosi nazwę TheradingModel. Ta pozycja może mieć następujące wartości:

  • Apartment – wskazuje ze używany jest tzw. Apartment therading model. Tryb ten nakazuje aby każdy obiekt utworzony przez serwer OLE mógł istnieć tylko w jednym wątku. W tym typie wielowątkowości możliwe jest tworzenie wielu obiektów, a każdy z nich posiada indywidualną kolejkę komunikatów.

  • Both – Wskazuje, że server OLE obsługuje dwa modele wielowątkowości – apartment oraz free. Tryb free oznacza, że obiekt COM jest dostępny z kilu wątków pojedynczego procesu.

4.10 Podklucz ProgID

Zawiera programowe identyfikatory komponentów OLE.
Te identyfikatory umożliwiają programom i innym obiektom odwoływanie się do obiektu w sposób alternatywny do użycia CLSID. W większości przypadków ProgID jest dużo bardziej czytelny dla człowieka niż numery CLSID. Identyfikatory ProgID są podobne do identyfikatorów znajdujących się w podkluczach definicji klas dla typów plików.

ProgID występuje w dwóch postaciach:

  • niezależnej od wersji – zawierającej dane tylko o producencie i typie bez wersji np. Soft.Paint

  • zależnej od wersji – zawierającej dane o wersji np. SoftPaint.8

Jednym z zastosowań ma miejsce wtedy gdy użytkownik ma wybrać z listy obiekt OLE.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *