登錄值類型
登錄值 可以儲存數種格式之一的數據,例如字串值或整數值。 當您將資料儲存在登錄值中時,例如呼叫 RegSetValueEx 函式,您可以指定下表中的其中一個類型來指出所儲存的數據類型。 當您擷取登錄值時,RegQueryValueEx 等函式 使用這些類型來指出所擷取的數據類型。
下列登入值型態定義於 winnt.h
頭檔中:
價值 | 類型 |
---|---|
REG_BINARY |
任何形式的二進位數據。 |
REG_DWORD |
32 位數位。 |
REG_DWORD_LITTLE_ENDIAN |
位元組格式為32位的數位,。 Windows 的設計目的是在小端電腦架構上執行。 因此,此值會在 Windows 頭檔中定義為 REG_DWORD 。 |
REG_DWORD_BIG_ENDIAN |
大階格式的 32 位元數字。 某些 UNIX 系統支援大端架構。 |
REG_EXPAND_SZ |
Null 終止的字串,包含未展開的環境變數參考,例如,%PATH%。 這是 Unicode 或 ANSI 字串,視您使用 Unicode 或 ANSI 函式而定。 若要展開環境變數參考,請使用 ExpandEnvironmentStrings 函式。 |
REG_LINK |
以 null 終止的 Unicode 字串,其中包含使用 REG_OPTION_CREATE_LINK呼叫 RegCreateKeyEx 函式所建立之符號鏈接的目標路徑。 |
REG_MULTI_SZ |
以空字串結尾的 Null 字串序列(\0 )。 以下是範例:String1\0String2\0String3\0LastString\0\0 。 第一個 \0 會終止第一個字串、第二個自最後一個字元串 \0 終止最後一個字串,最後一個 \0 會終止序列。 請注意,最終終止符必須納入字串的長度。 |
REG_NONE |
沒有定義的實值類型。 |
REG_QWORD |
64 位數位。 |
REG_QWORD_LITTLE_ENDIAN |
64 位數位,格式為小到小。 Windows 的設計目的是在小端電腦架構上執行。 因此,此值會在 Windows 頭檔中定義為 REG_QWORD 。 |
REG_SZ |
以 Null 結尾的字串。 這是 Unicode 或 ANSI 字串,視您使用 Unicode 或 ANSI 函式而定。 |
字串值
如果數據具有 REG_SZ
、REG_MULTI_SZ
或 REG_EXPAND_SZ
類型,則字串可能尚未以適當的終止 Null 字元儲存。 因此,從登錄讀取字串時,您必須確定字串在使用之前已正確終止;否則,它可能會覆寫緩衝區。 請注意,REG_MULTI_SZ
字串應該有兩個終止的 Null 字元。
當您將字串寫入登錄時,您必須指定字串的長度,包括終止的 Null 字元 (\0
)。 常見的錯誤是使用 strlen
函式來判斷字串的長度,但忘記 strlen
只會傳回字串中的字元計數,而不會計算終止 Null。 因此,您應該使用 strlen(string) + 1
來計算字串的長度
REG_MULTI_SZ
字串以長度 為 0的字串結尾。 因此,不可能在序列中包含長度為零的字串。 序列的定義如下:\0
。
下列範例會逐步執行 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;
}
位元組格式
位元組格式,多位元組值會儲存在記憶體中,從最低位元組(小端)儲存到最高的位元組。 例如,值 0x12345678
會以小端格式儲存為 0x78 0x56 0x34 0x12
。
在 big-endian 格式中,多位元節值會儲存在記憶體中,從最高的位元組(大端)儲存至最低位元組。 例如,0x12345678
的值會以 big-endian 格式儲存為 0x12 0x34 0x56 0x78
。
這些術語對喬納森·斯威夫特的諷刺小說 格利弗的旅行來說,這些術語是輕心的文化參考。