Registervärdetyper
Ett registervärde kan lagra data i ett av flera format, till exempel ett strängvärde eller ett heltalsvärde. När du lagrar data i ett registervärde, till exempel genom att anropa funktionen RegSetValueEx, kan du ange vilken typ av data som lagras genom att ange någon av typerna i tabellen nedan. När du hämtar ett registervärdefunktioner somRegQueryValueEx använda dessa typer för att ange vilken typ av data som hämtas.
Följande registervärdetyper definieras i winnt.h
-huvudfilen:
Värde | Typ |
---|---|
REG_BINARY |
Binära data i valfri form. |
REG_DWORD |
Ett 32-bitarsnummer. |
REG_DWORD_LITTLE_ENDIAN |
Ett 32-bitarsnummer i lite endianskt format. Windows är utformat för att köras på lite endianska datorarkitekturer. Därför definieras det här värdet som REG_DWORD i Windows-huvudfilerna. |
REG_DWORD_BIG_ENDIAN |
Ett 32-bitarsnummer i storslutsformat. Vissa UNIX-system har stöd för storslutsarkitekturer. |
REG_EXPAND_SZ |
En null-avslutad sträng som innehåller oexpandererade referenser till miljövariabler, till exempel %PATH%. Det är antingen en Unicode- eller ANSI-sträng, beroende på om du använder Unicode- eller ANSI-funktionerna. Om du vill expandera miljövariabelreferenserna använder du funktionen ExpandEnvironmentStrings. |
REG_LINK |
En null-avslutad Unicode-sträng som innehåller målsökvägen för en symbolisk länk som skapades genom att anropa funktionen RegCreateKeyEx med REG_OPTION_CREATE_LINK. |
REG_MULTI_SZ |
En sekvens med null-avslutade strängar som avslutas med en tom sträng (\0 ). Följande är ett exempel: String1\0String2\0String3\0LastString\0\0 . Den första \0 avslutar den första strängen, den näst sista \0 avslutar den sista strängen och den sista \0 avslutar sekvensen. Observera att den slutliga terminatorn måste räknas in i strängens längd. |
REG_NONE |
Ingen definierad värdetyp. |
REG_QWORD |
Ett 64-bitarsnummer. |
REG_QWORD_LITTLE_ENDIAN |
Ett 64-bitars tal i lite endianskt format. Windows är utformat för att köras på lite endianska datorarkitekturer. Därför definieras det här värdet som REG_QWORD i Windows-huvudfilerna. |
REG_SZ |
En null-avslutad sträng. Det är antingen en Unicode- eller ANSI-sträng, beroende på om du använder Unicode- eller ANSI-funktionerna. |
Strängvärden
Om data har REG_SZ
, REG_MULTI_SZ
eller REG_EXPAND_SZ
typ kanske strängen inte har lagrats med rätt avslutande null-tecken. När du läser en sträng från registret måste du se till att strängen avslutas korrekt innan du använder den. annars kan den skriva över en buffert. Observera att REG_MULTI_SZ
strängar ska ha två avslutande nulltecken.
När du skriver en sträng till registret måste du ange längden på strängen, inklusive det avslutande null-tecknet (\0
). Ett vanligt fel är att använda funktionen strlen
för att fastställa längden på strängen, men glöm att strlen
endast returnerar antalet tecken i strängen, utan att räkna avslutande null. Därför bör du beräkna längden på strängen med strlen(string) + 1
En REG_MULTI_SZ
sträng slutar med en längdsträng 0. Därför går det inte att inkludera en sträng med noll längd i sekvensen. En tom sekvens skulle definieras på följande sätt: \0
.
I följande exempel beskrivs en REG_MULTI_SZ
sträng.
#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;
}
Byteformat
I lite endianskt formatlagras ett multi-byte-värde i minnet från den lägsta byte (den lilla änden) till högsta byte. Till exempel lagras värdet 0x12345678
som 0x78 0x56 0x34 0x12
i lite endianskt format.
I storslutsformatlagras ett värde med flera byte i minnet från den högsta byte (den stora änden) till den lägsta byte. Värdet 0x12345678
lagras till exempel som 0x12 0x34 0x56 0x78
i storslutsformat.
Dessa termer är lättsamma kulturella referenser till Jonathan Swifts satiriska roman Gulliver's Travels.