Share via


登錄數值型別

登錄值可以儲存數種格式之一的資料,例如字串值或整數值。 當您藉由呼叫 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_SZREG_MULTI_SZREG_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 之周遊的淺色文化參考。