Types valeur de Registre
Une valeur de Registre peut stocker des données dans l’un des différents formats, comme une valeur de chaîne ou une valeur entière. Lorsque vous stockez des données dans une valeur de Registre, par exemple en appelant la fonction RegSetValueEx , vous pouvez indiquer le type de données stockées en spécifiant l’un des types dans le tableau ci-dessous. Lorsque vous récupérez une valeur de Registre, les fonctions telles que RegQueryValueEx utilisent ces types pour indiquer le type de données récupérées.
Les types de valeurs de Registre suivants sont définis dans le fichier d’en-tête winnt.h
:
Valeur | Type |
---|---|
REG_BINARY |
Données binaires dans tout formulaire. |
REG_DWORD |
Nombre 32 bits. |
REG_DWORD_LITTLE_ENDIAN |
Nombre 32 bits au format little-endian. Windows est conçu pour s’exécuter sur des architectures d’ordinateurs little endian. Par conséquent, cette valeur est définie comme REG_DWORD dans les fichiers d’en-tête Windows. |
REG_DWORD_BIG_ENDIAN |
Nombre 32 bits au format big-endian. Certains systèmes UNIX prennent en charge les architectures big-endian. |
REG_EXPAND_SZ |
Chaîne terminée par null qui contient des références non expirées à des variables d’environnement, par exemple ,%PATH%. Il s’agit d’une chaîne Unicode ou ANSI, selon que vous utilisez les fonctions Unicode ou ANSI. Pour développer les références de variables d’environnement, utilisez la fonction ExpandEnvironmentStrings . |
REG_LINK |
Chaîne Unicode terminée par null qui contient le chemin cible d’un lien symbolique créé en appelant la fonction RegCreateKeyEx avec REG_OPTION_CREATE_LINK. |
REG_MULTI_SZ |
Séquence de chaînes terminées par null, terminées par une chaîne vide (\0 ). Voici un exemple : String1\0String2\0String3\0LastString\0\0 . Le premier \0 termine la première chaîne, l’avant-dernier \0 termine la dernière chaîne et la dernière \0 termine la séquence. Notez que le terminateur final doit être pris en compte dans la longueur de la chaîne. |
REG_NONE |
Aucun type valeur défini. |
REG_QWORD |
Nombre 64 bits. |
REG_QWORD_LITTLE_ENDIAN |
Nombre 64 bits au format little endian. Windows is designed to run on little-endian computer architectures. Therefore, this value is defined as REG_QWORD in the Windows header files. |
REG_SZ |
Chaîne se terminant par une valeur null. It's either a Unicode or an ANSI string, depending on whether you use the Unicode or ANSI functions. |
Valeurs de chaîne
Si les données ont le REG_SZ
type , REG_MULTI_SZ
ou REG_EXPAND_SZ
, la chaîne n’a peut-être pas été stockée avec les caractères null de fin appropriés. Ainsi, lors de la lecture d’une chaîne à partir du Registre, vous devez vous assurer que la chaîne est correctement terminée avant de l’utiliser ; dans le cas contraire, il peut remplacer une mémoire tampon. Notez que REG_MULTI_SZ
les chaînes doivent avoir deux caractères null de fin.
Lorsque vous écrivez une chaîne dans le Registre, vous devez spécifier la longueur de la chaîne, y compris le caractère null de fin (\0
). Une erreur courante consiste à utiliser la strlen
fonction pour déterminer la longueur de la chaîne, mais à oublier que strlen
retourne uniquement le nombre de caractères dans la chaîne, sans compter la valeur null de fin. Vous devez donc calculer la longueur de la chaîne avec strlen(string) + 1
Une REG_MULTI_SZ
chaîne se termine par une chaîne de longueur 0. Par conséquent, il n’est pas possible d’inclure une chaîne de longueur nulle dans la séquence. Une séquence vide est définie comme suit : \0
.
L’exemple suivant montre comment suivre une REG_MULTI_SZ
chaîne.
#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;
}
Formats d’octets
Dans le format little-endian, une valeur de plusieurs octets est stockée en mémoire à partir de l’octet le plus bas (la petite extrémité) à l’octet le plus élevé. Par exemple, la valeur 0x12345678
est stockée au 0x78 0x56 0x34 0x12
format little-endian.
Dans le format big-endian, une valeur multioctet est stockée en mémoire de l’octet le plus élevé ( l’extrémité volumineuse) à l’octet le plus bas. Par exemple, la valeur 0x12345678
est stockée au 0x12 0x34 0x56 0x78
format big-endian.
Ces termes sont des références culturelles légères au roman satirique Gulliver’s Travels de Jonathan Swift.