Registrierungswerttypen

Ein Registrierungswert kann Daten in einem von mehreren Formaten speichern, z. B. einen Zeichenfolgenwert oder einen ganzzahligen Wert. Wenn Sie Daten in einem Registrierungswert speichern, z. B. durch Aufrufen der RegSetValueEx-Funktion , können Sie den Typ der gespeicherten Daten angeben, indem Sie einen der Typen in der folgenden Tabelle angeben. Wenn Sie einen Registrierungswert abrufen, verwenden Funktionen wie RegQueryValueEx diese Typen, um den Typ der abgerufenen Daten anzugeben.

Die folgenden Registrierungswerttypen sind in der winnt.h Headerdatei definiert:

Wert type
REG_BINARY Binärdaten in beliebiger Form.
REG_DWORD Eine 32-Bit-Zahl.
REG_DWORD_LITTLE_ENDIAN Eine 32-Bit-Zahl im Little-Endian-Format. Windows ist für die Ausführung auf Little-Endian-Computerarchitekturen konzipiert. Daher wird dieser Wert in den Windows-Headerdateien definiert REG_DWORD .
REG_DWORD_BIG_ENDIAN Eine 32-Bit-Zahl im Big-Endian-Format. Einige UNIX-Systeme unterstützen Big-End-Architekturen.
REG_EXPAND_SZ Eine null-endende Zeichenfolge, die nicht erweiterte Verweise auf Umgebungsvariablen enthält, z. B. %PATH%. Es handelt sich entweder um eine Unicode- oder eine ANSI-Zeichenfolge, je nachdem, ob Sie die Unicode- oder ANSI-Funktionen verwenden. Verwenden Sie die Funktion ExpandEnvironmentStrings , um die Verweise auf die Umgebungsvariablen zu erweitern.
REG_LINK Eine unicode-Zeichenfolge mit Null-Endung, die den Zielpfad einer symbolischen Verknüpfung enthält, die durch Aufrufen der RegCreateKeyEx-Funktion mit REG_OPTION_CREATE_LINK erstellt wurde.
REG_MULTI_SZ Eine Sequenz von NULL-beendeten Zeichenfolgen, die durch eine leere Zeichenfolge (\0) beendet wird. Im Folgenden finden Sie ein Beispiel: String1\0String2\0String3\0LastString\0\0. Die erste \0 beendet die erste Zeichenfolge, die vorletzte \0 die letzte Zeichenfolge und die letzte \0 die Sequenz. Beachten Sie, dass das endgültige Abschlusszeichen in der Länge der Zeichenfolge berücksichtigt werden muss.
REG_NONE Kein definierter Werttyp.
REG_QWORD Eine 64-Bit-Zahl.
REG_QWORD_LITTLE_ENDIAN Eine 64-Bit-Zahl im Little-Endian-Format. 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 Eine NULL-terminierte Zeichenfolge. It's either a Unicode or an ANSI string, depending on whether you use the Unicode or ANSI functions.

Zeichenfolgenwerte

Wenn die Daten den REG_SZTyp , REG_MULTI_SZoder REG_EXPAND_SZ aufweisen, wurde die Zeichenfolge möglicherweise nicht mit den richtigen Nullzeichen gespeichert. Wenn Sie also eine Zeichenfolge aus der Registrierung lesen, müssen Sie sicherstellen, dass die Zeichenfolge ordnungsgemäß beendet wird, bevor Sie sie verwenden. Andernfalls wird möglicherweise ein Puffer überschrieben. Beachten Sie, dass REG_MULTI_SZ Zeichenfolgen zwei endende NULL-Zeichen enthalten sollten.

Wenn Sie eine Zeichenfolge in die Registrierung schreiben, müssen Sie die Länge der Zeichenfolge angeben, einschließlich des abschließenden NULL-Zeichens (\0). Ein häufiger Fehler besteht darin, die Länge der Zeichenfolge mithilfe der strlen -Funktion zu bestimmen. Vergessen Sie jedoch, dass strlen nur die Anzahl der Zeichen in der Zeichenfolge zurückgibt, ohne den abschließenden NULL-Wert zu zählen. Daher sollten Sie die Länge der Zeichenfolge mit berechnen. strlen(string) + 1

Eine REG_MULTI_SZ Zeichenfolge endet mit einer Zeichenfolge der Länge 0. Daher ist es nicht möglich, eine Zeichenfolge der Länge Null in die Sequenz einzuschließen. Eine leere Sequenz wird wie folgt definiert: \0.

Im folgenden Beispiel wird eine REG_MULTI_SZ Zeichenfolge durchlaufen.

#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;
}

Byteformate

Im Little-Endian-Format wird ein Multibytewert vom niedrigsten Byte (dem kleinen Ende) bis zum höchsten Byte im Arbeitsspeicher gespeichert. Der Wert 0x12345678 wird beispielsweise im 0x78 0x56 0x34 0x12 Little-Endian-Format gespeichert.

Im Big-Endian-Format wird ein Multibytewert vom höchsten Byte (big end) bis zum niedrigsten Byte im Arbeitsspeicher gespeichert. Der Wert 0x12345678 wird beispielsweise im 0x12 0x34 0x56 0x78 Big-Endian-Format gespeichert.

Diese Begriffe sind leichtherzige kulturelle Bezüge zu Jonathan Swifts satirischem Roman Gulliver es Travels.