Freigeben über


Registrierungswerttypen

Ein Registrierungswert Daten in einem von mehreren Formaten speichern können, 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 werden in der winnt.h Headerdatei definiert:

Wert Art
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 Kleinen-End-Computerarchitekturen konzipiert. Daher wird dieser Wert in den Windows-Headerdateien als REG_DWORD definiert.
REG_DWORD_BIG_ENDIAN Eine 32-Bit-Zahl im Big-End-Format. Einige UNIX-Systeme unterstützen big-endische Architekturen.
REG_EXPAND_SZ Eine mit Null beendete Zeichenfolge, die nichtexpandierte Verweise auf Umgebungsvariablen enthält, z. B. %PATH%. Es handelt sich entweder um ein Unicode oder eine ANSI-Zeichenfolge, je nachdem, ob Sie die Unicode- oder ANSI-Funktionen verwenden. Verwenden Sie zum Erweitern der Umgebungsvariablenverweise die ExpandEnvironmentStrings--Funktion.
REG_LINK Eine mit Null beendete Unicode-Zeichenfolge, die den Zielpfad einer symbolischen Verknüpfung enthält, die durch Aufrufen der RegCreateKeyEx--Funktion mit REG_OPTION_CREATE_LINKerstellt wurde.
REG_MULTI_SZ Eine Abfolge von Zeichenfolgen, die durch eine leere Zeichenfolge (\0) beendet werden. Es folgt ein Beispiel: String1\0String2\0String3\0LastString\0\0. Die erste \0 beendet die erste Zeichenfolge, die zweite von der letzten \0 beendet die letzte Zeichenfolge, und die letzte \0 beendet die Sequenz. Beachten Sie, dass der endgültige Endpunkt in die Länge der Zeichenfolge eingegliedert werden muss.
REG_NONE Kein definierter Werttyp.
REG_QWORD Eine 64-Bit-Zahl.
REG_QWORD_LITTLE_ENDIAN Eine 64-Bit-Zahl im kleinen Endian-Format. Windows ist für die Ausführung auf Kleinen-End-Computerarchitekturen konzipiert. Daher wird dieser Wert in den Windows-Headerdateien als REG_QWORD definiert.
REG_SZ Eine mit Null beendete Zeichenfolge. Es handelt sich entweder um ein Unicode oder eine ANSI-Zeichenfolge, je nachdem, ob Sie die Unicode- oder ANSI-Funktionen verwenden.

Zeichenfolgenwerte

Wenn Daten den REG_SZ, REG_MULTI_SZoder REG_EXPAND_SZ Typ aufweisen, wurden die Zeichenfolge möglicherweise nicht mit den richtigen Endzeichen null 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 kann ein Puffer überschrieben werden. Beachten Sie, dass REG_MULTI_SZ Zeichenfolgen zwei endende Nullzeichen enthalten sollen.

Wenn Sie eine Zeichenfolge in die Registrierung schreiben, müssen Sie die Länge der Zeichenfolge angeben, einschließlich des endenden Nullzeichens (\0). Ein häufig auftretender Fehler besteht darin, die strlen-Funktion zu verwenden, um die Länge der Zeichenfolge zu bestimmen, aber zu vergessen, dass strlen nur die Anzahl der Zeichen in der Zeichenfolge zurückgibt und nicht die endende Null zählt. Daher sollten Sie die Länge der Zeichenfolge mit strlen(string) + 1

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

Im folgenden Beispiel wird eine REG_MULTI_SZ Zeichenfolge ausgeführt.

#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

In little-endian formatwird ein Multibytewert im Speicher von dem niedrigsten Byte (dem kleinen Ende) bis zum höchsten Byte gespeichert. Beispielsweise wird der Wert 0x12345678 im kleinen Endian-Format als 0x78 0x56 0x34 0x12 gespeichert.

In big-endian formatwird ein Multibytewert im Speicher von dem höchsten Byte (dem big end) bis zum niedrigsten Byte gespeichert. Beispielsweise wird der Wert 0x12345678 als 0x12 0x34 0x56 0x78 im Big-End-Format gespeichert.

Diese Begriffe sind leichtherzige kulturelle Verweise auf Jonathan Swifts satirischer Roman Gullivers Reisen.