AutoIt/Rejestr systemowy
Co to jest rejestr systemowy?
[edytuj]Rejestr jest centralną bazą danych przeznaczoną do przechowywania w ujednolicony sposób wszystkich informacji konfiguracyjnych systemu operacyjnego i aplikacji. Zawiera on kompletny zestaw wpisów dotyczących ustawień takich elementów, jak programy obsługi (sterowniki) urządzeń, pamięć czy programy obsługi sieci. Narzędzia systemu operacyjnego pozwalają na dostęp do niego zarówno z komputera, którego dotyczy, jak również poprzez sieć.
Rejestr ma hierarchiczną organizację, zbliżoną do organizacji folderów na dysku, gdzie ich odpowiednikiem są klucze rejestru.
Na szczycie hierarchii znajdują się klucze główne. Jest ich dokładnie pięć:
HKEY_CLASSES_ROOT - klasy obiektów HKEY_CURRENT_USER - bieżąca konfiguracja użytkownika HKEY_LOCAL_MACHINE - konfiguracja systemu HKEY_USERS - profile użytkowników HKEY_CURRENT_CONFIG - profil sprzętowy
Klucze główne zawierają swoje podklucze, te natomiast posiadać mogą kolejne podklucze z dowolnie długim zagnieżdżeniem. Pojęciem gałęzi określać będziemy klucz główny wraz z jego wszystkimi podkluczami.
Każdy klucz zawiera zawsze przynajmniej jedną wartość, którą określa się jako wartość domyślna. Poza wartością domyślną klucz może zawierać dowolną ilość innych wartości identyfikowanych poprzez nazwę.
Dane przypisane do danej wartości w kluczu mogą być jednego z poniższych typów:
REG_SZ - ciąg o zmiennej długości zakończony zerami, czyli w momencie modyfikacji tej wartości, autoit automatycznie zakończy wartość bajtem 00.
Typ ten używany jest zarówno dla danych numerycznych jak i tekstowych. Domyślne wartości większości kluczy są właśnie tego typu.
REG_MULTI_SZ - typ zawierający grupy ciągów zakończonymi zerami przypisanych do pojedynczych wartości.
REG_EXPAND_SZ - typ, będący ciągiem zakończonym zerami i zawierającym zmienną środowiskową, np. %PATH%.
REG_BINARY - typ zawierający ciąg zer i jedynek.
REG_DWORD - typ danych double word, będący 32-bitową wartością numeryczną.
Można dodawać własne klucze i wartości, zmieniać nazwy istniejących oraz je usuwać.
Funkcje operujące na rejestrze systemowym
[edytuj]UWAGA:
1. Operowanie na rejestrze jest potencjalnie niebezpieczne dla stabilności systemu. Należy zachować szczególną ostrożność!
2. Klucz rejestru musi zaczynać się od "HKEY_LOCAL_MACHINE" ("HKLM"), "HKEY_USERS" ("HKU"), "HKEY_CURRENT_USER" ("HKLM"), "HKEY_CLASSES_ROOT" ("HKCR") lub "HKEY_CURRENT_CONFIG" ("HKCC").
3. Podczas pracy w systemie Windows 64-bitowym, jeśli chcesz usunąć konkretny klucza lub wartości do 64-bitowego środowiska, trzeba dodać przyrostek ...64, np.: HKLM64.
4. Aby uzyskać dostęp do domyślnej wartości należy użyć pustego stringu "" jako nazwy wartości.
5. Możliwy jest zdalny dostęp do rejestrów za pomocą nazwy klucza w postaci "\\nazwa_komputera\nazwa_klucza". Aby korzystać z tej funkcji, trzeba mieć odpowiednie prawa dostępu.
RegDelete
[edytuj]RegDelete ( "Nowy klucz #1" [, "nazwa_wartości"] )
Funkcja usuwa klucz lub wartość z rejestru. Zwraca 1 gdy sukces, 0 gdy klucz lub wartość nie istnieją, 2 jeżeli wystąpił błąd przy usuwaniu. W tym przypadku makro @error przyjmuje wartość:
1 - nie można otworzyć żądanego klucza 2 - nie można otworzyć głównego klucza 3 - nie można zdalnie połączyć się z rejestrem -1 - nie można usunąć żądanej wartości -2 - nie można usunąć żądanego klucza / wartości
"Nowy klucz #1" - nazwa klucz (cała gałąź).
"nazwa_wartości" - nazwa wartości, dla wartości domyślnej string pusty ("").
RegEnumKey
[edytuj]RegEnumKey ( "HKEY_LOCAL_MACHINE\SOFTWARE\Panda Security\PavShld\Products", instancja )
Funkcja zwraca nazwę podklucza o danej instancji w podanym kluczu lub string pusty jeżeli wystąpił błąd. W tym przypadku makro @error przyjmuje wartość:
1 - nie można otworzyć żądanego klucza 2 - nie można otworzyć głównego klucza 3 - nie można zdalnie połączyć się z rejestrem -1 - nr instancji większy niż ilość podkluczy
"nazwa_klucza" - nazwa klucz (cała gałąź).
instancja - instancja (wystąpienie), nr podklucza w danym kluczu.
Przykład:
For $i = 1 To 10
$skey = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE", $i)
If @error <> 0 Then ExitLoop
MsgBox(4096, "Test RegEnunKey:", "Podklucz nr: " & $i & " w kluczu HKLM\Software: " & @LF & $skey, 2)
Next
RegEnumVal
[edytuj]RegEnumVal ( "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Panda Software\Rola", 7 )
Funkcja zwraca nazwę wartości o danej instancji w podanym kluczu. Dodatkowo w makrze @extended zwracany jest typ wartości:
Kod | Nazwa wg Constants.au3 ----------------------------- 1 | $REG_SZ 2 | $REG_EXPAND_SZ 3 | $REG_BINARY 4 | $REG_DWORD 7 | $REG_MULTI_SZ
Jeżeli wystąpił błąd funkcja zwraca string pusty "", a makro @error przyjmuje wartość:
1 - nie można otworzyć żądanego klucza 2 - nie można otworzyć głównego klucza 3 - nie można zdalnie połączyć się z rejestrem -1 - nr instancji większy niż ilość wartości
"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Panda Software\Rol" - nazwa klucz (cała gałąź).
500 - instancja (wystąpienie), nr wartości w danym kluczu.
Przykład:
For $i = 1 To 10
$var = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", $i)
If @error <> 0 Then ExitLoop
MsgBox(0,"Test RegEnumVal:", "Nazwa wartości nr " & $i & " w kluczu AutoIt-> " & _
$var & @LF & "Typ danych-> " & @extended)
Next
RegRead
[edytuj]RegRead ( "HKEY_LOCAL_MACHINE\SOFTWARE\Panda Security\PavShld\Products" [, "Panda Retail 2014"] )
Funkcja zwraca dane wartości odczytane z rejestru. Dodatkowo w makrze @extended zwracany jest typ danych:
Kod | Nazwa wg Constants.au3 ----------------------------- 1 | $REG_SZ 2 | $REG_EXPAND_SZ 3 | $REG_BINARY 4 | $REG_DWORD 7 | $REG_MULTI_SZ
Jeżeli wystąpił błąd funkcja zwraca string pusty "", a makro @error przyjmuje wartość:
1 - nie można otworzyć żądanego klucza 2 - nie można otworzyć głównego klucza 3 - nie można zdalnie połączyć się z rejestrem -1 - nie można odczytać żądanej wartości -2 - nieobsługiwany typ danych
nazwa_klucza - nazwa klucz (cała gałąź).
"nazwa_wartości" - nazwa wartości, dla wartości domyślnej string pusty ("").
RegWrite
[edytuj]RegWrite ( "nazwa_klucza" [, "nazwa_wartości"] [, "typ_danych" [, dane]]] )
Funkcja tworzy klucz lub wartości w rejestrze. Zwraca 1 gdy sukces lub 0 gdy wystąpił błąd. W tym przypadku makro @error przyjmuje wartość:
1 - nie można otworzyć żądanego klucza 2 - nie można otworzyć głównego klucza 3 - nie można zdalnie połączyć się z rejestrem -1 - nie można zapisać żądanej wartości -2 - nieobsługiwany typ danych
"nazwa_klucza" - nazwa klucz (cała gałąź).
"nazwa_wartości" - nazwa wartości, dla wartości domyślnej string pusty ("").
"typ_danych" - nazwa typy danych przypisanych do wartości, np.: "REG_SZ".
dane - dane przypisane do wartości.
UWAGA: Wpisując dane typu REG_MULTI_SZ ciągi składowe należy rozdzielić znakiem końca wiersza (@LF), np.: "linia1" & @LF & "linia2".
Przykład użycia funkcji RegWrite, RegRead i RegDelete:
;utworzenie klucza i wartości w rejestrze
RegWrite("HKEY_CURRENT_USER\Software\Test_Autoit", "Klucz_testowy", "REG_MULTI_SZ", _
"To są dane testowe," & @LF & "do testowania rejestru.")
;odczyt wartości klucza
$data=RegRead("HKEY_CURRENT_USER\Software\Test_Autoit", "Klucz_testowy")
MsgBox(0,"Test rejestru:",$data)
;usunięcie klucza z rejestru
RegDelete("HKEY_CURRENT_USER\Software\Test_Autoit")