登錄數值型別
登錄值可以儲存數種格式之一的資料,例如字串值或整數值。 當您藉由呼叫 RegSetValueEx 函式將資料儲存在登錄值中時,您可以指定下表中的其中一個類型來指出所儲存的資料類型。 當您擷取登錄值時, RegQueryValueEx 等函式會使用這些類型來指出所擷取的資料類型。
標頭檔案中定義了下列登錄 winnt.h
數值型別:
值 | 類型 |
---|---|
REG_BINARY |
任何形式的二進位資料, |
REG_DWORD |
32 位數位。 |
REG_DWORD_LITTLE_ENDIAN |
以小到尾格式的 32 位數位。 Windows 的設計目的是在小數端電腦架構上執行。 因此,此值會在 Windows 標頭檔中定義為 REG_DWORD 。 |
REG_DWORD_BIG_ENDIAN |
32 位數位,格式 為 big-endian。 某些 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 is designed to run on little-endian computer architectures. Therefore, this value is defined as REG_QWORD in the Windows header files. |
REG_SZ |
null 終止的字串。 It's either a Unicode or an ANSI string, depending on whether you use the Unicode or ANSI functions. |
字串值
如果資料具有 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
會以 0x12 0x34 0x56 0x78
大端格式儲存。
這些詞彙是 Jonathan Swift 之周遊的淺色文化參考。