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 ditentukan dalam winnt.h file header:

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 yang dihentikan null yang berisi referensi yang tidak terlampir ke variabel lingkungan, misalnya, %PATH%. Ini adalah untai (karakter) Unicode atau ANSI, tergantung pada apakah Anda menggunakan fungsi Unicode atau ANSI. Untuk memperluas referensi variabel lingkungan, gunakan fungsi ExpandEnvironmentStrings .
REG_LINK String Unicode yang dihentikan null yang berisi jalur target tautan simbolis yang dibuat dengan memanggil fungsi RegCreateKeyEx 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. Yang pertama \0 mengakhiri string pertama, string kedua dari terakhir \0 mengakhiri string terakhir, dan akhir \0 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 is designed to run on little-endian computer architectures. Therefore, this value is defined as REG_QWORD in the Windows header files.
REG_SZ String yang dihentikan null. It's either a Unicode or an ANSI string, depending on whether you use the Unicode or ANSI functions.

Nilai string

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

Saat Anda menulis string ke registri, Anda harus menentukan panjang string, termasuk karakter null yang mengakhiri (\0). Kesalahan umum adalah menggunakan strlen fungsi untuk menentukan panjang string, tetapi untuk melupakan yang 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 diakhir dengan untai (karakter) panjang 0. Oleh karena itu, tidak dimungkinkan untuk menyertakan string panjang nol dalam urutan. Urutan kosong akan didefinisikan sebagai berikut: \0.

Contoh berikut memanjakan REG_MULTI_SZ string.

#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 ( ujung kecil) hingga 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.