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_SZ
jenis , 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.