Bagikan melalui


Jenis nilai registri

Nilai registri dapat menyimpan data dalam salah satu dari beberapa format, seperti nilai string atau nilai bilangan bulat. Saat Anda menyimpan data dalam nilai registri—misalnya dengan memanggil fungsi RegSetValueEx—Anda dapat menunjukkan jenis data yang disimpan dengan menentukan salah satu jenis dalam tabel di bawah ini. Saat Anda mengambil nilai registri, fungsi seperti RegQueryValueEx menggunakan jenis ini untuk menunjukkan jenis data yang diambil.

Jenis nilai registri berikut didefinisikan dalam file header winnt.h:

Nilai Jenis
REG_BINARY Data biner dalam bentuk apa pun.
REG_DWORD Angka 32-bit.
REG_DWORD_LITTLE_ENDIAN Angka 32-bit dalam format little-endian. Windows dirancang untuk berjalan pada arsitektur komputer little-endian. Oleh karena itu, nilai ini didefinisikan sebagai REG_DWORD dalam file header Windows.
REG_DWORD_BIG_ENDIAN Angka 32-bit dalam format big-endian. Beberapa sistem UNIX mendukung arsitektur big-endian.
REG_EXPAND_SZ String null-terminated yang berisi referensi yang tidak tersedia ke variabel lingkungan, misalnya, %PATH%. Ini adalah string Unicode atau ANSI, tergantung pada apakah Anda menggunakan fungsi Unicode atau ANSI. Untuk memperluas referensi variabel lingkungan, gunakan fungsiExpandEnvironmentStrings.
REG_LINK String Unicode yang dihentikan null yang berisi jalur target tautan simbolis yang dibuat dengan memanggil fungsiRegCreateKeyEx dengan REG_OPTION_CREATE_LINK.
REG_MULTI_SZ Urutan string yang dihentikan null, dihentikan oleh string kosong (\0). Berikut ini adalah contoh: String1\0String2\0String3\0LastString\0\0. \0 pertama mengakhiri string pertama, \0 kedua dari terakhir mengakhiri string terakhir, dan \0 akhir mengakhiri urutan. Perhatikan bahwa terminator akhir harus diperhitungkan ke dalam panjang string.
REG_NONE Tidak ada jenis nilai yang ditentukan.
REG_QWORD Angka 64-bit.
REG_QWORD_LITTLE_ENDIAN Angka 64-bit dalam format little-endian. Windows dirancang untuk berjalan pada arsitektur komputer little-endian. Oleh karena itu, nilai ini didefinisikan sebagai REG_QWORD dalam file header Windows.
REG_SZ String null-terminated. Ini adalah string Unicode atau ANSI, tergantung pada apakah Anda menggunakan fungsi Unicode atau ANSI.

Nilai string

Jika data memiliki jenis REG_SZ, REG_MULTI_SZ, atau REG_EXPAND_SZ, maka string mungkin belum disimpan dengan karakter null penghentian yang tepat. Jadi ketika membaca string dari registri, Anda harus memastikan bahwa string dihentikan dengan benar sebelum menggunakannya; jika tidak, mungkin menimpa buffer. Perhatikan bahwa string REG_MULTI_SZ harus memiliki dua karakter null yang dihentikan.

Saat Anda menulis string ke registri, Anda harus menentukan panjang string, termasuk karakter null yang mengakhiri (\0). Kesalahan umumnya adalah menggunakan fungsi strlen untuk menentukan panjang string, tetapi untuk melupakan bahwa strlen hanya mengembalikan jumlah karakter dalam string, tidak menghitung penghentian null. Jadi Anda harus menghitung panjang string dengan strlen(string) + 1

String REG_MULTI_SZ berakhir dengan string panjang 0. Oleh karena itu, tidak dimungkinkan untuk menyertakan string panjang nol dalam urutan. Urutan kosong akan didefinisikan sebagai berikut: \0.

Contoh berikut memanjakan string REG_MULTI_SZ.

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

void SampleSzz(PTSTR pszz)
{
   _tprintf(_TEXT("\tBegin multi-sz string\n"));
   while (*pszz) 
   {
      _tprintf(_TEXT("\t\t%s\n"), pszz);
      pszz = pszz + _tcslen(pszz) + 1;
   }
   _tprintf(_TEXT("\tEnd multi-sz\n"));
}

int __cdecl main(int argc, char **argv)
{
   // Because the compiler adds a \0 at the end of quoted strings, 
   // there are two \0 terminators at the end. 

   _tprintf(_TEXT("Conventional multi-sz string:\n"));  
   SampleSzz(_TEXT("String1\0String2\0String3\0LastString\0"));

   _tprintf(_TEXT("\nTest case with no strings:\n"));  
   SampleSzz(_TEXT(""));

   return 0;
}

Format byte

Dalam format little-endian, nilai multi-byte disimpan dalam memori dari byte terendah (little end) ke byte tertinggi. Misalnya, nilai 0x12345678 disimpan sebagai 0x78 0x56 0x34 0x12 dalam format little-endian.

Dalam format big-endian, nilai multi-byte disimpan dalam memori dari byte tertinggi (big end) ke byte terendah. Misalnya, nilai 0x12345678 disimpan sebagai 0x12 0x34 0x56 0x78 dalam format big-endian.

Istilah-istilah tersebut adalah referensi budaya ringan hati ke novel satir Jonathan Swift Gulliver's Travels.