Dela via


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_SZeller 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.