Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Hodnota registru může ukládat data v jednom z několika formátů, jako je řetězcová hodnota nebo celočíselná hodnota. Při ukládání dat do hodnoty registru – například voláním funkce RegSetValueEx – můžete určit typ uložených dat zadáním jednoho z typů v následující tabulce. Při načtení hodnoty registru, funkce, jako je RegQueryValueEx použít tyto typy k označení typu načtených dat.
V souboru hlaviček winnt.h jsou definovány následující typy hodnot registru:
| Hodnota | Typ |
|---|---|
REG_BINARY |
Binární data v libovolné podobě. |
REG_DWORD |
32bitové číslo. |
REG_DWORD_LITTLE_ENDIAN |
32bitové číslo ve formátu little-endian. Systém Windows je navržený tak, aby běžel na architekturách počítačů s malými endy. Proto je tato hodnota definována jako REG_DWORD v souborech hlaviček systému Windows. |
REG_DWORD_BIG_ENDIAN |
32bitové číslo ve formátu big-endian. Některé systémy UNIX podporují architekturu typu big-endian. |
REG_EXPAND_SZ |
Řetězec ukončený hodnotou null, který obsahuje nerozbalené odkazy na proměnné prostředí, například %PATH%. Jedná se o řetězec Unicode nebo ANSI v závislosti na tom, jestli používáte funkce Unicode nebo ANSI. Pokud chcete rozšířit odkazy na proměnné prostředí, použijte funkci ExpandEnvironmentStrings. |
REG_LINK |
Řetězec Unicode s ukončenou hodnotou null, který obsahuje cílovou cestu symbolického odkazu vytvořeného voláním funkce RegCreateKeyEx s REG_OPTION_CREATE_LINK. |
REG_MULTI_SZ |
Posloupnost řetězců ukončených hodnotou null, ukončená prázdným řetězcem (\0). Následuje příklad: String1\0String2\0String3\0LastString\0\0. První \0 ukončí první řetězec, druhý poslední \0 ukončí poslední řetězec a poslední \0 ukončí sekvenci. Všimněte si, že konečný ukončovací znak musí být faktorován do délky řetězce. |
REG_NONE |
Žádný definovaný typ hodnoty. |
REG_QWORD |
64bitové číslo. |
REG_QWORD_LITTLE_ENDIAN |
64bitové číslo v malém endian formátu. Systém Windows je navržený tak, aby běžel na architekturách počítačů s malými endy. Proto je tato hodnota definována jako REG_QWORD v souborech hlaviček systému Windows. |
REG_SZ |
Řetězec ukončený hodnotou null. Jedná se o řetězec Unicode nebo ANSI v závislosti na tom, jestli používáte funkce Unicode nebo ANSI. |
Řetězcové hodnoty
Pokud data obsahují typ REG_SZ, REG_MULTI_SZnebo REG_EXPAND_SZ, řetězec pravděpodobně nebyl uložen se správnými ukončovacími znaky null. Takže při čtení řetězce z registru musíte před použitím řetězce zajistit, aby byl řetězec správně ukončen; jinak může přepsat vyrovnávací paměť. Všimněte si, že REG_MULTI_SZ řetězce by měly mít dva ukončující znaky null.
Při zápisu řetězce do registru je nutné zadat délku řetězce, včetně ukončujícího znak null (\0). Běžnou chybou je použití funkce strlen k určení délky řetězce, ale pokud chcete zapomenout, že strlen vrátí pouze počet znaků v řetězci, nepočítá se ukončující hodnota null. Měli byste tedy vypočítat délku řetězce pomocí strlen(string) + 1
Řetězec REG_MULTI_SZ končí řetězcem délky 0. Proto není možné do sekvence zahrnout řetězec nulové délky. Prázdná sekvence by byla definována takto: \0.
Následující příklad vás provede REG_MULTI_SZ řetězcem.
#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;
}
Formáty bajtů
V malého endiánského formátu je hodnota s více bajty uložena v paměti od nejnižšího bajtu (malý koncový) na nejvyšší bajt. Například hodnota 0x12345678 je uložena jako 0x78 0x56 0x34 0x12 v malém endian formátu.
Ve formátu big-endianje hodnota s více bajty uložena v paměti od nejvyššího bajtu (velký konec) na nejnižší bajt. Například hodnota 0x12345678 je uložena jako 0x12 0x34 0x56 0x78 ve formátu big-endian.
Tyto termíny jsou světlé kulturní odkazy na Jonathan Swift satirický román Gulliver travels.