***Registry***, dalam platform sistem operasi Microsoft Windows, merupakan sebuah basis data yang disusun secara hierarkis dan mengandung informasi mengenai konfigurasi sebuah sistem, mulai dari konfigurasi perangkat keras, perangkat lunak, asosiasi ekstensi berkas dengan aplikasinya hingga preferensi pengguna. Registry merupakan pengganti berkas-berkas konfigurasi `*.INI` yang digunakan dalam sistem Windows 16-bit (Windows 3.x dan Windows for Workgroups). *Registry*, pertama kali diperkenalkan di dalam sistem Windows 16-bit sebagai penampung informasi mengenai pemetaan/asosiasi ekstensi berkas dengan aplikasinya, dan kemudian dikembangkan menjadi basis data dengan cakupan yang luas pada sistem-sistem operasi keluarga Windows NT. *Registry* juga kemudian digunakan pada sistem Windows 9x yang mencakup Windows 95, Windows 98 dan Windows ME. tetapi memang implementasi yang cukup bagus dari registry terdapat di dalam keluarga sistem operasi Windows NT.

Selayang pandang
----------------

### Registry dalam Windows 16-bit

*Registry* dalam sistem Windows 16-bit (dimulai pada Windows 3.x) berguna hanya untuk menyimpan asosiasi ekstensi berkas.

### Registry dalam Windows 9x

Dalam sistem operasi Windows 9x, struktur *registry* secara logis sama dengan struktur *registry* dalam Windows NT, tetapi tidak kompatibel secara fisik. Dalam sistem operasi ini terdapat sebuah anak pohon tambahan, yakni `HKEY_DYN_DATA` yang dibuat secara dinamis dan digunakan untuk mengukur performa serta melakukan konfigurasi perangkat keras Plug and Play. Windows 9x menyimpan registry di dalam dua buah berkas, yakni `%WINDIR%\system.dat` dan `%WINDIR%\user.dat`.`System.dat` mengandung informasi mengenai sebuah komputer tertentu, sementara `user.dat` mengandung informasi mengenai sebuah profil milik pengguna. Ketika *booting*, Windows 9x akan memuat *registry* ke dalam ruangan *kernel* di dalam memori fisik.

### Registry dalam Windows NT

*Registry* dalam Windows NT terbagi secara logis ke dalam lima buah anak pohon (*subtree*), yang setiap pohon tersebut mengandung kumpulan kunci (*key*) dan anak kunci (*subkey*) yang disusun secara hierarkis. Susunan ini sama dengan susunan direktori dalam sistem berkas. Sementara itu, secara fisik, *registry* terdiri atas beberapa berkas yang disebut sebagai ***hive*** dan berkas catatan transaksi (*transaction log*) untuk setiap *hive-hive* tersebut yang disimpan di dalam direktori `%systemroot%\system32\config`.

Berkas fisik registry
---------------------

Registry Windows disimpan dalam beberapa berkas, tergantung sistem operasi Windows yang digunakan. Nama berkas-nya pun kadang-kadang berbeda-beda antar versi sistem operasi, tetapi semua berkas tersebut disimpan di dalam mesin lokal, kecuali `NTuser.dat` yang dapat diletakkan di dalam komputer lainnya untuk mengizinkan fungsi *roaming profile* dan *group policy* dalam Windows NT, yang umumnya disimpan di dalam server dalam jaringan lokal.

### Windows NT

Berkas-berkas berikut merupakan berkas *registry* untuk sistem operasi Windows NT:

* `%systemroot%\system32\config\Sam` – `HKEY_LOCAL_MACHINE\SAM`
* `%systemroot%\system32\config\Security` – `HKEY_LOCAL_MACHINE\SECURITY`
* `%systemroot%\system32\config\Software` – `HKEY_LOCAL_MACHINE\SOFTWARE`
* `%systemroot%\system32\config\System` – `HKEY_LOCAL_MACHINE\SYSTEM`
* `%systemroot%\system32\config\Default` – `HKEY_USERS\.DEFAULT`
* `%systemroot%\system32\config\Userdiff`
* `%UserProfile%\Ntuser.dat` – `HKEY_USERS\<SID>` (`HKEY_CURRENT_USER`)
* `%UserProfile%\Local Settings\Application Data\Microsoft\Windows\Usrclass.dat` – `HKEY_USERS\<SID>_Classes` (`HKEY_CURRENT_USER\Software\Classes`)

### Windows 9x

Berkas-berkas berikut merupakan berkas *registry* untuk sistem operasi Windows 9x.

* `C:\WINDOWS\User.dat`
* `C:\WINDOWS\System.dat`
* `C:\WINDOWS\Classes.dat` (khusus Windows ME)

### Windows 3.x

Dalam Windows 3.x, *registry* hanya disimpan di dalam sebuah berkas, yakni `C:\WINDOWS\Reg.dat` saja.

Struktur registry
-----------------

Struktur *registry* agak mirip dengan struktur direktori dalam sistem berkas. Selain itu, *registry* juga dapat diakses dengan menggunakan sintaksis yang sama dengan cara mengakses berkas, dengan menggunakan karakter garis miring terbalik (*backslash*) untuk menandakan tingkatan hierarkis. Susunannya adalah seperti *<subtree>\<key>\<subkey...>*. Sebagai contoh, `My Computer\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows`, yang merujuk kepada sebuah *subkey* yang memiliki nama "`Windows`" yang terdapat di dalam *subkey* `Microsoft`, yang terdapat di dalam *key* dengan nama `Software`, yang terdapat di dalam *subtree* `HKEY_LOCAL_MACHINE`.

Setiap *key* dan *subkey* tersebut dapat memiliki nilai yang dapat ditentukan atau nilai *default*, yang disebut sebagai ***Value***. Akan tetapi, cara mengakses *value* tidaklah sama dengan cara mengakses berkas dalam sistem berkas, mengingat nama value dapat mengandung karakter *backslash* yang dapat menjadi ambigu ketika menggunakan cara baca seperti halnya mengakses sistem berkas. Adalah fungsi-fungsi dalam Windows 32-bit *Application Programming Interface/API* (Win32 API) yang dapat melakukan *query* dan manipulasi terhadap *value*-*value* *registry*, yang dilakukan dengan cara mengambil nama *value* secara terpisah dari *path* *key* yang merupakan *parent key*. Setiap *value* memiliki jenis-jenis datanya masing-masing yang dapat dilihat pada bagian berikut.

### Daftar anak pohon Registry

*Registry* Windows terdiri atas beberapa anak pohon berikut, yang disusun secara hierarkis dengan **My Computer** sebagai *root directory*-nya:

* `HKEY_LOCAL_MACHINE`, sering disebut sebagai **HKLM**, merupakan sebuah tempat penyimpanan untuk konfigurasi sistem yang bersangkutan, yang terdiri atas perangkat keras dan perangkat lunak. Semua yang terdapat di dalam anak pohon ini diaplikasikan kepada semua pengguna.
* `HKEY_CURRENT_USER`, sering disebut sebagai **HKCU**, merupakan sebuah tempat penyimpanan untuk konfigurasi yang dimiliki oleh pengguna yang sedang melakukan *logon*, yang menyimpan informasi mengenai konfigurasi preferensi pengguna (konfigurasi *desktop*, warna, dan konfigurasi lainnya yang setiap pengguna dapat melakukan kustomisasi terhadapnya).
* `HKEY_USERS`, sering disebut sebagai **HKU**, merupakan tempat penyimpanan untuk konfigurasi setiap pengguna yang terdaftar di dalam komputer yang bersangkutan. Setiap anak kunci dari anak pohon ini diidentifikasikan dengan menggunakan nomor *Security Identifier* (SID) yang dimiliki oleh pengguna. Ketika pengguna melakukan logon, SID yang cocok akan dimuat ke dalam anak pohon `HKEY_CURRENT_USER`.
* `HKEY_CLASSES_ROOT`, sering disebut sebagai **HKCR**, merupakan tempat penyimpanan untuk konfigurasi asosiasi/pemetaan ekstensi sebuah berkas atau objek *Object Linking and Embedding* (OLE) dengan aplikasi yang dapat menanganinya. Sebagai contoh, berkas berekstensi *`.txt`* akan ditangani oleh aplikasi editor teks seperti Notepad dan masih banyak lainnya.
* `HKEY_CURRENT_CONFIG`, sering disebut sebagai **HKCC**, merupakan tempat penyimpanan untuk konfigurasi perangkat keras dan sistem operasi yang sedang digunakan saat itu, yang diperoleh pada saat proses booting dilakukan. Informasi yang disimpan di sini bersifat volatil dan tidak disimpan secara permanen ke dalam berkas penampung *registry*, tetapi akan selalu dibuat setiap kali proses *booting* dilakukan.
* `HKEY_DYN_DATA`, yang hanya terdapat di dalam Windows 9x merupakan tempat penyimpanan konfigurasi dinamis untuk semua perangkat keras *plug-and-play*. Tidak ada padanannya dalam Windows NT, tetapi dalam Windows NT 5.x, terdapat sebuah anak pohon `HKEY_PERFORMANCE_DATA`, yang hanya digunakan untuk mengumpulkan informasi *performance counter* Windows 2000, mengingat semua konfigurasi perangkat keras disimpan di dalam `HKEY_LOCAL_MACHINE\HARDWARE\`.

Catatan: **HKEY** di dalam *registry* Windows, merupakan singkatan terhadap kata "***Handle to Key***".

#### HKEY\_LOCAL\_MACHINE

Menyimpan informasi/data mengenai semua konfigurasi mesin yang bersangkutan. HKLM bukanlah *symbolic link* ke kunci *registry* manapun.`HKEY_LOCAL_MACHINE` memiliki beberapa anak kunci, yakni:

* `HKEY_LOCAL_MACHINE\SOFTWARE`, berguna untuk menyimpan semua konfigurasi perangkat lunak yang terinstal di dalam komputer yang bersangkutan, dan konfigurasinya yang akan diaplikasikan kepada semua pengguna, baik pengguna yang melakukan *logon* secara lokal/interaktif maupun yang melakukan logon secara *remote* (melalui *service* logon, *batch* logon, atau *terminal* *services logon*).
* `HKEY_LOCAL_MACHINE\SYSTEM`, berguna untuk menyimpan semua informasi dan konfigurasi sistem operasi Windows yang sedang berjalan. Di sini terdapat semacam *recovery point*, yang disebut sebagai *`LastKnownGood Configuration`*, yang akan digunakan pada saat sistem mengalami masalah pada saat proses *booting*. Semua konfigurasi *driver* dan layanan Windows (Win32 Service dan komponen Windows seperti NTFS dan TCP/IP) disimpan di sini.
* `HKEY_LOCAL_MACHINE\SAM`, berguna untuk menyimpan basis data akun pengguna yang terinstal di dalam sistem operasi yang bersangkutan. Secara *default*, SAM tidak dapat diakses, bahkan oleh administrator sekalipun, karena memang *access control*-nya tidak memungkinkan hal itu dilaksanakan. SAM adalah singkatan dari Security Accounts Manager.
* `HKEY_LOCAL_MACHINE\HARDWARE`, berguna untuk menyimpan konfigurasi perangkat keras di dalam sistem yang bersangkutan, seperti halnya konfigurasi sumber daya perangkat keras (interupsi perangkat keras, konfigurasi DMA, dan konfigurasi lainnya).
* `HKEY_LOCAL_MACHINE\SECURITY`, berguna untuk menyimpan konfigurasi keamanan Windows.

#### HKEY\_CURRENT\_USER

Menyimpan informasi/data yang diasosiasikan dengan pengguna yang sedang masuk log. HKCU merupakan sebuah symbolic link ke kunci registry HKEY\_USERS\<SID dari pengguna yang bersangkutan>. HKCU juga menyimpan informasi mengenai profil pengguna, konfigurasi perangkat lunak, dan preferensi mereka. Terdapat beberapa anak kunci, yakni:

* AppEvents, yang digunakan untuk menyimpan asosiasi antara suara dengan sebuah event. Disarankan untuk menggunakan Control Panel->Sound untuk mengubahnya, dan jangan menyunting secara langsung dari sini.
* Console, yang digunakan untuk menyimpan konfigurasi jendela Command Prompt (cmd.exe); contoh: lebarnya, tingginya, dan warnanya. Disarankan untuk menggunakan Command Prompt->Properties untuk mengubahnya, dan jangan menyunting langsung dari sini.
* Control Panel, digunakan untuk menyimpan konfigurasi screen saver, skema desktop, warna, keyboard, dan mouse. Selain itu juga dapat menyimpan informasi ketidakmampuan (accessibility) dan regional settings. Disarankan untuk menggunakan Control Panel->Display, Control Panel->Accessibility, dan Control Panel->Language and Regional Options untuk mengubahnya, dan jangan menyuntingnya secara langsung dari sini.
* Environment, mengandung definisi Environment Variable. Disarankan untuk menggunakan Control Panel->System->Advanced->Environment Variables untuk mengubahnya, dan jangan menyunting langsung dari sini.
* Keyboard Layout, menyimpan konfigurasi lay-out konfigurasi keyboard (contoh U.S. English, atau U.K. English, atau U.S. Dvorak, dan lain sebagainya).
* Network, menyimpan konfigurasi dan pemetaan drive yang berada di jaringan.
* Printers, menyimpan konfigurasi koneksi printer.
* Software, digunakan untuk menyimpan preferensi pengguna terhadap sebuah perangkat lunak tertentu.
* UNICODE
* Windows 3.1 Migration Status

#### HKEY\_USERS

Anak pohon HKEY\_USERS mengandung beberapa anak yakni semua profil pengguna yang terdaftar di dalam sistem yang bersangkutan dan basis data registrasi objek OLE. Selain itu, anak pohon ini juga mengandung HKEY\_USERS\.DEFAULT, yang dihubungkan dengan profil milik akun SYSTEM, yang merupakan profil yang digunakan oleh salah satu komponen Windows, WINLOGON.EXE, untuk menyimpan semua konfigurasi seperti halnya HKEY\_CURRENT\_USER, yakni bagaimana tampilan desktop, bagaimana konfigurasi perangkat keras dan lain-lain. Pengaturan yang diberlakukan terhadap HKU\.DEFAULT ini dapat menjadikan konfigurasi desktop dan lain-lain pada saat proses logon Windows akan berubah dari pengaturan *default*-nya.

Ketika seorang pengguna masuk log ke sebuah sistem untuk pertama kalinya, sementara akun miliknya tidak berupa *roaming profile* (yakni, sebuah profil pengguna yang disimpan di dalam tempat tersentralisasi di dalam *domain controller*), maka Windows akan membuatkan sebuah profil yang baru untuknya, yang dibuat berbasiskan pengaturan yang terdapat di dalam C:\Documents and Settings\Default User.

#### HKEY\_CURRENT\_CONFIG

Anak pohon HKEY\_CURRENT\_CONFIG mengandung data konfigurasi untuk profil perangkat keras (*hardware profile*) yang sedang digunakan oleh Windows. HKCC tidak mengandung data apapun, karena memang anak pohon ini merupakan sebuah symbolic link terhadap HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current. Dengan demikian, dengan mengubah kunci tersebut atau mengubah HKCC, akan menghasilkan sesuatu yang sama.

Penggunaan profil perangkat keras mengizinkan administrator untuk mengonfigurasikan beberapa variasi dari pengaturan driver perangkat keras yang digunakan pada saat melakukan booting. Meskipun profil yang digunakan dapat berubah dari satu proses booting ke proses booting lainnya, aplikasi dapat merujuk ke anak pohon ini untuk mencari profil mana yang sedang dimuat oleh Windows. Pengaturan profil perangkat keras dapat dilakukan dengan Control Panel->System->Hardware->Hardware Profiles. Jika ada lebih dari satu profil perangkat keras, maka komponen Windows, yakni NTLDR, akan menanyakan kepada pengguna mengenai profil yang harus dimuat pada saat proses booting dilakukan.

#### HKEY\_CLASSES\_ROOT

Anak pohon HKEY\_CLASSES\_ROOT mengandung dua jenis data, yakni:

* Data yang mengasosiasikan jenis berkas (dilihat dari ekstensinya atau kelasnya) dengan program yang dapat membukannya. Subkunci jenis berkas di dalam HKEY\_CLASSES\_ROOT memiliki nama yang sama dengan ekstensi nama berkas, seperti halnya .txt, .exe, dan lain-lain. Asosiasi jenis berkas ini disimpan di dalam registry, tetapi disarankan untuk menggunakan Folder Options->File Types jika memang hendak mengubahnya.
* Data konfigurasi untuk objek-objek Object Linking and Embedding (OLE)/Component Object Model (COM).

Isi dari HKCR diambil dari dua sumber, yakni HKLM\SOFTWARE\Classes dan HKCU\SOFTWARE\Classes. Jika sebuah subkey atau entri terdapat di dalam salah satu dari dua lokasi tersebut, maka hal tersebut akan ditampilkan juga di dalam HKCR. Jika ada dua entri yang konflik di antara dua lokasi tersebut, hanya HKCU\SOFTWARE\Classes yang akan ditampilkan di dalam HKCR.

#### HKEY\_DYN\_DATA

  

Semua informasi di atas dapat dirangkum ke dalam tabel berikut

| Anak pohon | Keterangan |
| --- | --- |
| `HKEY_CURRENT_USER` | Menyimpan informasi/data yang diasosiasikan dengan pengguna yang sedang masuk log. |
| `HKEY_USERS` | Menyimpan informasi/data mengenai semua akun pengguna di dalam mesin yang sama |
| `HKEY_CLASSES_ROOT` | Menyimpan informasi/data mengenai asosiasi berkas dengan aplikasinya dan registrasi objek Component Object Model (COM). |
| `HKEY_LOCAL_MACHINE` | Menyimpan informasi/data mengenai semua konfigurasi mesin yang bersangkutan. |
| `HKEY_PERFORMANCE DATA` | Menyimpan informasi mengenai kinerja sistem yang dikumpulkan oleh *performance counter* Windows NT. |
| `HKEY_CURRENT_CONFIG` | Berisi beberapa informasi mengenai profil perangkat keras yang sedang digunakan. |
|

### Jenis data dalam registry

Sebuah *value* dapat memiliki jenis-jenis data seperti di bawah ini:

* **REG\_NONE**, yang merupakan sebuah jenis data registry yang tidak didefinisikan sebelumnya. Jenis data ini secara internal menggunakan tanda pengenal (*identifier*) 0x00.
* **REG\_SZ**, merupakan jenis data teks (*string*) dengan panjang yang tetap (*fixed-length string*). Semua sistem operasi 32-bit Windows (Windows NT dan Windows 9x) mendukung jenis data registry ini. Jenis data ini secara internal menggunakan tanda pengenal (*identifier*) 0x01.
* **REG\_EXPAND\_SZ**, merupakan jenis data teks/*string* yang dapat diekspansi. Windows 9x tidak memiliki jenis data ini. Diperlukan editor *registry* khusus (regedt32.exe) untuk menangani jenis data ini. Jenis data ini secara internal menggunakan tanda pengenal (*identifier*) 0x02.
* **REG\_BINARY**, merupakan jenis data biner, yang dapat berarti macam-macam (bisa berupa teks/*string*, atau bilangan). Semua sistem operasi 32-bit Windows (Windows NT dan Windows 9x) mendukung jenis data registry ini. Jenis data ini secara internal menggunakan tanda pengenal (*identifier*) 0x03.
* **REG\_DWORD**, merupakan jenis data angka 32-bit. Semua sistem operasi 32-bit Windows (Windows NT dan Windows 9x) mendukung jenis data registry ini. Jenis data ini secara internal menggunakan tanda pengenal (*identifier*) 0x04. Terdapat dua jenis implementasi dari jenis data ini, yakni:
	+ **REG\_DWORD\_LITTLE\_ENDIAN**, yang merupakan jenis data REG\_DWORD *default* dalam Windows NT yang dijalankan di atas prosesor Intel x86/x64. Jenis data ini berukuran 32-bit yang disusun dengan menggunakan format *little-endian*. Jenis data ini secara internal menggunakan tanda pengenal (*identifier*) 0x05.
	+ **REG\_DWORD\_BIG\_ENDIAN**, yang merupakan jenis data REG\_DWORD yang berukuran 32-bit yang disusun dengan menggunakan format *big-endian*. Jenis data ini hanya dapat didukung oleh Windows NT yang dijalankan di atas mesin DEC Alpha, MIPS, atau IBM PowerPC, yang memang menggunakan format bilangan *big-endian*. Windows NT 5.x yang hanya dapat berjalan di atas sistem x86 tidak menangani jenis data ini (terdapat limitasi pada mikroprosesor), meskipun Windows NT 5.x mendukungnya. Jenis data ini secara internal menggunakan tanda pengenal (*identifier*) 0x06.
* **REG\_MULTI\_SZ**, merupakan jenis data teks/*string* yang memiliki banyak baris yang dipisahkan dengan dua buah karakter *null* (0x00). Windows 9x tidak memiliki jenis data ini.Diperlukan editor registry khusus (*regedt32.exe*) untuk menangani jenis data ini. Jenis data ini secara internal menggunakan tanda pengenal (*identifier*) 0x07.
* **REG\_LINK**, yang merupakan *symbolic link* ke sebuah objek Windows NT dalam ruang nama/*namespace* objek Windows NT (yang diatur oleh Object Manager Windows NT). Registry Editor *default* bawaan Windows (*regedit.exe*, *regedt32.exe*, dan utilitas *command-line* *reg.exe*) tidak dapat menyunting jenis ini. Jenis data ini digunakan secara internal oleh Windows NT saja, dan tidak digunakan oleh aplikasi. Registry dalam Windows 9x tidak memiliki jenis data ini. Jenis data ini secara internal menggunakan tanda pengenal (*identifier*) 0x08.
* **REG\_RESOURCE\_LIST** (Windows NT) atau **REG\_FULL\_RESOURCE\_DESCRIPTOR**, yang merupakan jenis data registry yang hanya digunakan untuk menyimpan konfigurasi perangkat keras dan *driver*-nya yang terinstalasi di atas sistem operasi Windows NT. Registry dalam Windows 9x tidak memiliki jenis data ini. Jenis data ini adalah kumpulan larik (array) yang digunakan untuk menyimpan daftar sumber daya (interupsi perangkat keras, *Direct Memory Access* (DMA), *I/O range* dan *memory range*) yang digunakan oleh komponen perangkat keras atau *driver*. Dibutuhkan registry editor khusus (*regedt32.exe*) untuk menyunting *value* dengan jenis data ini. Jenis data ini secara internal menggunakan tanda pengenal (*identifier*) 0x09.
* **REG\_QWORD**, merupakan jenis data angka yang memiliki panjang 64-bit. Jenis data ini hanya terdapat di dalam sistem prosesor 64-bit saja, semacam DEC Alpha, IA-64, atau x64. Jenis data ini secara internal menggunakan tanda pengenal (*identifier*) 0x12. Sama seperti halnya REG\_DWORD, REG\_QWORD juga terdapat dua jenis implementasi, yakni *little-endian* (**REG\_QWORD\_LITTLE\_ENDIAN**, dengan identifier 0x13) dan *big-endian* (**REG\_QWORD\_BIG\_ENDIAN**, dengan *identifier* 0x14), meskipun secara *default* format yang digunakan adalah **REG\_QWORD\_LITTLE\_ENDIAN**. Diperlukan editor khusus untuk menyunting jenis data ini.

Jenis data registry, dapat dirangkum pada tabel berikut:

| Jenis data | *Identifier* | Keterangan |
| --- | --- | --- |
| `REG_NONE` | 0x00 | Jenis data belum ditentukan |
| `REG_SZ` | 0x01 | Teks/string berukuran tetap |
| `REG_EXPAND_SZ` | 0x02 | Teks/string yang dapat berubah-ubah. |
| `REG_BINARY` | 0x03 | Jenis data biner (dapat berupa apa saja) |
| `REG_DWORD` | 0x04 | Jenis data bilangan dengan ukuran 32-bit |
| `REG_DWORD_LITTLE_ENDIAN` | 0x05 | Jenis data bilangan dengan ukuran 32-bit, dengan format *little-endian*. Dalam Windows NT 5.x, sama saja dengan REG\_DWORD biasa. |
| `REG_DWORD_BIG_ENDIAN` | 0x06 | Jenis data bilangan dengan ukuran 32-bit, dengan format *big-endian*. |
| `REG_MULTI_SZ` | 0x07 | Jenis data teks/string dengan banyak baris yang dipisahkan dengan dua karakter *null* (0x00). |
| `REG_LINK` | 0x08 | *Symbolic link* dengan menggunakan format Unicode ke sebuah objek dalam Windows NT Object Manager. |
| `REG_RESOURCE_LIST` | 0x09 | Digunakan untuk menampung sumber daya perangkat keras. |
| `REG_FULL_RESOURCE_DESCRIPTOR` | 0x10 | Digunakan untuk menampung sumber daya perangkat keras. |
| `REG_RESOURCE_REQUIREMENTS_LIST` | 0x11 | Digunakan untuk menampung kebutuhan sumber daya perangkat keras. |
| `REG_QWORD` | 0x12 | Jenis data bilangan dengan ukuran 64-bit. |
| `REG_QWORD_LITTLE_ENDIAN` | 0x13 | Jenis data bilangan dengan ukuran 64-bit, dengan menggunakan format *little-endian*. |
| `REG_QWORD_BIG_ENDIAN` | 0x14 | Jenis data bilangan dengan ukuran 64-bit, dengan menggunakan format *big-endian*. |
|

Menyunting registry
-------------------

Secara fisik, *registry* merupakan berkas biner yang tidak dapat disunting secara langsung dengan menggunakan editor teks. Akan tetapi, beberapa program editor bilangan heksadesimal dapat melakukannya, meski sangat rumit untuk dilakukan. Cara lainnya adalah dengan menggunakan alat bantu editor registry Windows. Untungnya, Microsoft menawarkan program editor *registry*, yang dikenal sebagai ***regedit***. *Regedit* dapat diakses dengan menjalankan perintah "**regedit.exe**" atau "**regedt32.exe**" dari menu Run. Dengan ditampilkan secara struktural, penyuntingan registry pun dapat dilakukan secara jauh lebih mudah daripada menggunakan program editor teks atau editor bilangan heksadesimal.

Berhati-hatilah saat melakukan penyuntingan *registry*, mengingat kerusakan *registry* seringnya tidak dapat dikembalikan. Karenanya, lakukan *backup* (buat salinan) terlebih dahulu sebelum menyunting. Beberapa program optimalisasi/*tweaking* Windows atau "*hacking*" Windows seperti TweakUI atau bahkan beberapa *applet* dalam Control Panel Windows melakukan penyuntingan terhadap *registry* secara langsung tanpa harus membuka *editor registry*, sehingga jauh lebih aman. Jadi intinya, lakukan penyuntingan *registry* jika dan hanya jika mengetahui seluk beluk registry yang hendak disunting.

### Editor registry bawaan Windows

Dalam Windows 16-bit, terdapat sebuah komponen editor registry, yang disebut sebagai "Registration Info Editor" atau "Registration Editor". Seperti yang telah dibahas sebelumnya, bahwa registry dalam Windows 16-bit hanya terdapat asosiasi berkas atau objek OLE dengan aplikasinya saja, maka editor registry dalam sistem ini pun hanya dapat menyunting hal tersebut saja.

Windows NT yang dirilis kemudian memperkenalkan banyak konsep baru terhadap registry Windows, seperti halnya mampu menangani beberapa *sub-tree*, dan juga atribut keamanan dengan *access control list*. Dalam Windows NT 3.1, terdapat satu editor registry, yang disebut dengan **regedt32.exe**, yang lebih bagus dan mampu menyunting beberapa jenis tipe data.

Windows 95 juga memperkenalkan editor registry baru, yang dibuat berbasiskan registry editor bawaan Windows NT, tetapi lebih sederhana (tidak ada atribut keamanan, dan tidak ada proteksi read-only).

Saat Microsoft merilis Windows NT 4.0, setelah Windows 95, di sistem operasi tersebut terdapat dua editor *registry*, yakni **regedit.exe** dan **regedit32.exe**. Windows 9x hanya memiliki satu editor registry, yaitu *regedit.exe.* sementara Windows NT memiliki dua editor registry, yaitu *regedit32.exe* dan *regedit.exe*. Ada beberapa perbedaan di antara keduanya, yakni sebagai berikut:

* Regedit.exe, ditampilkan seperti halnya Windows Explorer, dengan *root-directory* dengan nama My Computer dan akan menampilkan semua sub-tree yang dimuat di bawahnya. Regedit.exe hanya menampilkan satu *window* saja. Sementara itu, registry dalam regedt32.exe ditampilkan seperti halnya Program Manager, dengan setiap sub-tree ditampilkan dalam setiap window-nya masing-masing, sehingga sebuah window hanya mengandung sub-tree saja.
* Regedit.exe merepresentasikan komponen sebuah value (nama, jenis dan datanya) sebagai tiga kolom yang terpisah dari sebuah tabel. Sementara, regedt32.exe akan merepresentasikan komponen sebuah value sebagai daftar string.
* Regedit.exe mendukung klik-kanan terhadap sebuah entri dalam struktur tampilan pohon untuk mengatur propertinya dan beberapa pengaturan lainnya. Sementara, *regedt32.exe* mengharuskan semuanya dilakukan dari menu utama aplikasi.
* Karena regedit.exe adalah program bawaan Windows 95, program tersebut tidak dapat menyunting izin akses (karena memang izin akses tidak terdapat dalam Windows 9x dan hanya terdapat di dalam keluarga sistem operasi Windows NT). Oleh karena itu, satu-satunya cara untuk mengakses registry dalam Windows NT secara penuh adalah dengan menggunakan program regedt32.exe.
* Regedit.exe hanya mendukung beberapa jenis data saja (REG\_SZ, REG\_DWORD/REG\_DWORD\_LITTLE\_ENDIAN, dan REG\_BINARY). Sementara itu, Regedt32.exe mendukung banyak jenis data, yakni REG\_SZ, REG\_DWORD, REG\_MULTI\_SZ, REG\_EXPAND\_SZ, dan REG\_RESOURCE\_LIST. Menyunting jenis data yang tidak didukung dengan Regedit.exe dalam Windows NT 4.0 dan Windows 2000 akan menyebabkan konversi data ke jenis data yang didukung oleh aplikasi tersebut dan tidak dapat dikembalikan ke jenis data sebelumnya.

Hal tersebut terus diberlakukan dalam Windows 2000. Dan, pada Windows XP dan Windows Server 2003, kemampuan kedua program tersebut digabungkan ke dalam satu program saja, regedit.exe. Regedt32.exe juga masih ada, tetapi hanya berupa *symbolic link* saja. Jika menjalankan regedt32.exe dalam kedua sistem operasi tersebut, hal tersebut sama saja dengan menjalankan regedit.exe. Hal ini juga berlaku untuk Windows edisi selanjutnya.

Program editor registry bawaan Windows, baik itu menggunakan regedit.exe maupun regedt32.exe mampu melakukan pengeksporan registry ke dalam sebuah berkas dengan ekstensi *.REG* atau *.KEY*. Hasil pengeksporan tersebut sama saja dengan berkas teks untuk konfigurasi biasa, yakni .INI. Path registry lengkap disusun sebagai header, sementara itu, entri registry dan nilainya disusun di bawahnya. Selain tentunya dapat melakukan pengeksporan registry ke dalam sebuah berkas teks, program itu juga dapat melakukan pengimporan.

### Penyuntingan dengan menggunakan *command-line*

Selain utilitas grafis seperti Regedit.exe dan Regedt32.exe, Microsoft juga menawarkan utilitas *command-line* **reg.exe** yang mulai ditawarkan di dalam *Windows 2000 Resource Kit Tools*. Windows XP dan Windows Server 2003 telah mengintegrasikan program tersebut secara internal dan diinstalasikan secara *default*.

Sintaksis yang digunakan adalah sebagai berikut:

```
reg.exe Operasi [Daftar_Parameter]
```

```
Operasi [QUERY|ADD|DELETE|COPY|SAVE|LOAD|UNLOAD|RESTORE|COMPARE|EXPORT|IMPORT]
```

### Penyuntingan dengan menggunakan skrip/bahasa pemrograman

*Registry* juga dapat disunting dengan menggunakan skrip dan bahasa pemrograman yang berjalan untuk sistem operasi Microsoft Windows. Contoh bahasa skrip (scripting language) yang sering digunakan adalah VBScript, *Windows Batch File* (\*.BAT/\*.CMD), JScript, serta Perl (dengan menggunakan W32::TieRegistry). Sementara itu, beberapa bahasa pemrograman, seperti halnya Microsoft Visual Basic, dan .NET Framework 2.0 (dalam kelas *Microsoft.Win32.Registry*) juga dapat langsung mengakses dan menyunting *registry*, mengingat mereka telah mengintegrasikan beberapa pustaka untuk melakukan hal itu.

Berikut ini adalah beberapa Win32 API yang dapat digunakan untuk mengakses registry Windows dengan bahasa pemrograman yang tidak memiliki pustaka untuk melakukan penyuntingan registry secara langsung:

```
RegCloseKey RegOpenKey
RegConnectRegistry RegOpenKeyEx
RegCreateKey RegQueryInfoKey
RegCreateKeyEx RegQueryMultipleValues
RegDeleteKey RegQueryValue
RegDeleteValue RegQueryValueEx
RegEnumKey RegReplaceKey
RegEnumKeyEx RegRestoreKey
RegEnumValue RegSaveKey
RegFlushKey RegSetKeySecurity
RegGetKeySecurity RegSetValue
RegLoadKey RegSetValueEx
RegNotifyChangeKeyValue RegUnLoadKey
```

### Bahaya dari menyunting registry

Menyunting registry secara manual dapat mengakibatkan sistem operasi tidak stabil, atau bahkan mengalami kerusakan yang tidak dapat dikembalikan lagi. Microsoft pun menganjurkan penyuntingan *registry* agar hanya dilakukan oleh para profesional atau pengguna yang tahu apa yang sedang dilakukan. Registry yang rusak hanya dapat dikembalikan dengan cara instalasi ulang sistem operasi, atau menimpa berkas fisik registry dengan salinannya (*backup*) yang masih benar dan baik.

*Policy file* (berkas kebijakan)
--------------------------------

Semenjak dirilisnya Windows 95, para Administrator Windows dapat menggunakan sebuah jenis berkas yang dapat digabungkan dengan registry, yang disebut sebagai ***policy file***. *Policy file* mengizinkan para adminstrator Windows untuk mencegah para pengguna yang bukan administrator (pengguna biasa) dari melakukan hal yang seharusnya dilakukan oleh administrator, seperti halnya mengubah beberapa pengaturan sistem, hingga menyunting registry secara manual. *Policy file* ini umumnya digunakan di dalam sebuah jaringan dengan banyak komputer di dalamnya, di mana komputer-komputer tersebut harus dilindungi dari tangan-tangan jahil para pengguna, dan juga para pengguna juga harus dilindungi dari pengguna lainnya.

Ekstensi *default* untuk *policy file* adalah .POL. *Policy file* akan menyaring semua pengaturan yang diberlakukan terhadap sebuah pengguna atau beberapa pengguna yang disatukan ke dalam sebuah *group*. Untuk melakukannya, *policy file* akan menggabungkan dirinya dengan registry, sehingga mencegah para pengguna untuk mengutak-atiknya dengan mengembalikan pengaturan yang sebelumnya. Selain itu, *policy file* juga didistribusikan melalui LAN, tetapi dapat juga diletakkan secara lokal di dalam sebuah komputer.

### Editor policy file

Untuk membuat sebuah *policy file*, Microsoft menyertakan sebuah alat bantu yang disebut sebagai poledit.exe yang diperuntukkan Windows 95 dan Windows 98, atau dengan menggunakan modul manajemen komputer dalam sistem operasi berbasis Windows NT. Modul-modul tersebut tidak dapat diberlakukan di dalam instalasi Windows XP Home Edition, dan hanya berlaku dalam Windows XP Professional saja. Pengaktifan editor tersebut membutuhkan izin yang sama dengan seorang administrator untuk sistem yang hendak diaplikasikan di dalamnya policy file. Editor juga dapat secara langsung mengubah pengaturan registry di yang ada dalam komputer lokal, dan apabila layanan ***remote registry service*** dijalankan dalam komputer lainnya, maka hal tersebut juga dapat memungkinkan perubahan registry secara jarak jauh terhadap komputer tersebut. Policy editor akan memuat semua pengaturan yang dapat diubah dari berkas berekstensi .adm, yang mengandung pengaturan yang disediakan oleh *shell* Windows. Berkas berekstensi .adm sendiri merupakan sebuah berkas *plain text* (teks biasa), dan mendukung lokalisasi secara mudah dengan mengizinkan semua teks/*string* untuk disimpan di dalam sebuah tempat yang sama. Dalam sistem operasi Windows yang baru, Policy editor diubah namanya menjadi Group Policies (dapat diakses dengan menggunakan perintah gpedit.msc dari menu Run).

Keuntungan dari konsep Registry
-------------------------------

Dibandingkan menggunakan banyak berkas konfigurasi yang telah disediakan INI seperti yang dilakukan di dalam Windows 16-bit menjadi sebuah tempat tersentralisasi, registry menawarkan beberapa keuntungan, yakni sebagai berikut:

* Registry memisahkan konfigurasi mesin dari konfigurasi pengguna. Ketika seorang pengguna masuk log ke dalam sebuah komputer berbasis Windows NT. pengaturan *registry* yang dimiliki oleh pengguna yang bersangkutan akan dimuat secara terpisah dari konfigurasi sistem operasi yang utama. Hal ini mengizinkan program-program untuk lebih mudah dikonfigurasi untuk setiap orang pengguna (setiap pengguna berhak memiliki preferensi masing-masing), mengingat mereka hanya bekerja di dalam anak pohon "Current User" saja. Sementara itu, jika dibandingkan dengan konfigurasi yang lama, berkas .INI cenderung untuk menulis konfigurasi dan pengaturan setiap program oleh setiap pengguna di dalam satu tempat saja, yakni berkas INI yang bersangkutan.
* Group Policy mengizinkan administrator Windows untuk mengatur program secara terpusat.
* Karena registry diakses dengan menggunakan API yang khusus, maka registry juga dapat diakses dengan menggunakan skrip, bahasa pemrograman, atau *query* *Windows Management Instrumentation* (WMI). Setiap skrip tidak harus dikustomisasi secara unik untuk konfigurasi sebuah aplikasi, yang kadang memiliki format yang berbeda-beda.
* Registry juga dapat diakses sebagai sebuah kesatuan melalui koneksi jaringan komputer dalam rangka melakukan manajemen komputer dari jarak jauh, yakni dengan menggunakan skrip yang berisi API standar untuk mengakses *registry*.
* Dapat di-*backup* secara lebih mudah, karena memang hanya terdapat beberapa jenis berkas saja.