Delen via


Registerwaardetypen

Een registerwaarde kan gegevens opslaan in een van de verschillende indelingen, zoals een tekenreekswaarde of een geheel getal. Wanneer u gegevens opslaat in een registerwaarde, bijvoorbeeld door de functie RegSetValueEx aan te roepen, kunt u aangeven welk type gegevens worden opgeslagen door een van de typen in de onderstaande tabel op te geven. Wanneer u een registerwaarde ophaalt, gebruiken functies zoals RegQueryValueEx deze typen om het type gegevens aan te geven dat is opgehaald.

De volgende registerwaardetypen worden gedefinieerd in het winnt.h headerbestand:

Waarde Type
REG_BINARY Binaire gegevens in elke vorm.
REG_DWORD Een 32-bits getal.
REG_DWORD_LITTLE_ENDIAN Een 32-bits getal in little-endian-indeling. Windows is ontworpen om te worden uitgevoerd op little-endian-computerarchitecturen. Deze waarde wordt daarom gedefinieerd als REG_DWORD in de Windows-headerbestanden.
REG_DWORD_BIG_ENDIAN Een 32-bits getal in big-endian-indeling. Sommige UNIX-systemen ondersteunen big-endian-architecturen.
REG_EXPAND_SZ Een niet-uitgevouwen tekenreeks met niet-uitgevouwen verwijzingen naar omgevingsvariabelen, bijvoorbeeld %PATH%. Het is een Unicode- of ANSI-tekenreeks, afhankelijk van of u de Unicode- of ANSI-functies gebruikt. Gebruik de functie ExpandEnvironmentStrings om de verwijzingen naar omgevingsvariabelen uit te vouwen.
REG_LINK Een null-beëindigde Unicode-tekenreeks die het doelpad bevat van een symbolische koppeling die is gemaakt door de functie RegCreateKeyEx- aan te roepen met REG_OPTION_CREATE_LINK.
REG_MULTI_SZ Een reeks null-beëindigde tekenreeksen, beëindigd door een lege tekenreeks (\0). Hier volgt een voorbeeld: String1\0String2\0String3\0LastString\0\0. De eerste \0 de eerste tekenreeks beëindigt, de tweede van de laatste \0 de laatste tekenreeks beëindigt en de laatste \0 de reeks beëindigt. Houd er rekening mee dat de eindeindtekening moet worden meegenomen in de lengte van de tekenreeks.
REG_NONE Geen gedefinieerd waardetype.
REG_QWORD Een 64-bits getal.
REG_QWORD_LITTLE_ENDIAN Een 64-bits getal in little-endian-indeling. Windows is ontworpen om te worden uitgevoerd op little-endian-computerarchitecturen. Deze waarde wordt daarom gedefinieerd als REG_QWORD in de Windows-headerbestanden.
REG_SZ Een tekenreeks die door null is beëindigd. Het is een Unicode- of ANSI-tekenreeks, afhankelijk van of u de Unicode- of ANSI-functies gebruikt.

Tekenreekswaarden

Als gegevens het type REG_SZ, REG_MULTI_SZof REG_EXPAND_SZ hebben, is de tekenreeks mogelijk niet opgeslagen met de juiste null-tekens voor het afsluiten. Dus wanneer u een tekenreeks uit het register leest, moet u ervoor zorgen dat de tekenreeks correct wordt beëindigd voordat u deze gebruikt; anders kan er een buffer worden overschreven. Houd er rekening mee dat REG_MULTI_SZ tekenreeksen twee null-tekens moeten hebben.

Wanneer u een tekenreeks naar het register schrijft, moet u de lengte van de tekenreeks opgeven, inclusief het afsluitende null-teken (\0). Een veelvoorkomende fout is het gebruik van de functie strlen om de lengte van de tekenreeks te bepalen, maar om te vergeten dat strlen alleen het aantal tekens in de tekenreeks retourneert, waarbij de afsluit null niet wordt geteld. U moet dus de lengte van de tekenreeks berekenen met strlen(string) + 1

Een REG_MULTI_SZ tekenreeks eindigt met een tekenreeks met een lengte 0. Daarom is het niet mogelijk om een tekenreeks met lengte nul in de reeks op te nemen. Een lege reeks wordt als volgt gedefinieerd: \0.

In het volgende voorbeeld wordt een REG_MULTI_SZ tekenreeks beschreven.

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

Byte-indelingen

In little-endian-indelingwordt een multi-bytewaarde opgeslagen in het geheugen van de laagste byte (de kleine eind-) naar de hoogste byte. De waarde 0x12345678 wordt bijvoorbeeld opgeslagen als 0x78 0x56 0x34 0x12 in little-endian-indeling.

In big-endian-indelingwordt een multi-bytewaarde opgeslagen in het geheugen van de hoogste byte (de big end) naar de laagste byte. De waarde 0x12345678 wordt bijvoorbeeld opgeslagen als 0x12 0x34 0x56 0x78 in big-endian-indeling.

Deze termen zijn lichte culturele verwijzingen naar Jonathan Swift's satirische roman De Travels van Guliver.