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_SZ
oder 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.