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.