Types de valeur de Registre

Une valeur de Registre peut stocker des données dans différents formats. Lorsque vous stockez des données sous une valeur de Registre, par exemple en appelant la fonction RegSetValueEx , vous pouvez spécifier l’une des valeurs suivantes pour indiquer le type de données stockées. Lorsque vous récupérez une valeur de Registre, les fonctions telles que RegQueryValueEx utilisent ces valeurs pour indiquer le type de données récupérées.

Les types de valeurs de registre suivants sont définis dans Winnt. h.

Valeur Type
_fichier binaire reg
Données binaires dans tout formulaire.
_valeur DWORD reg
Nombre de 32 bits.
REG _ DWORD _ Little _ ENDIAN
Nombre 32 bits au format avec primauté des octets de poids faible (Little endian).
Windows est conçu pour s’exécuter sur des architectures d’ordinateur little-endian. par conséquent, cette valeur est définie en tant que REG _ DWORD dans les fichiers d’en-tête Windows.
REG _ DWORD _ Big _ ENDIAN
Nombre 32 bits au format Big-endian.
certains systèmes de UNIX prennent en charge les architectures de big-endian.
REG _ développer _ SZ
Chaîne terminée par le caractère null qui contient des références non développé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 variable d’environnement, utilisez la fonction ExpandEnvironmentStrings .
_lien reg
Chaîne Unicode terminée par le caractère null qui contient le chemin d’accès cible d’un lien symbolique qui a été créé en appelant la fonction RegCreateKeyEx avec l’option de création de la _ commande reg _ _ .
REG _ multiple _ SZ
Séquence de chaînes se terminant par un caractère null, terminée par une chaîne vide ( \ 0).
Par exemple :
Chaîne1 \ 0 Chaîne2 \ 0 string3 \ 0 LastString \ 0 \ 0
Le premier \ 0 termine la première chaîne, la seconde jusqu’au dernier \ 0 termine la dernière chaîne, et le \ 0 final termine la séquence. Notez que la marque de fin finale doit être factorisée dans la longueur de la chaîne.
REG _ aucun
Aucun type valeur défini.
_q QWord
Nombre de 64 bits.
_ _ faible primauté des _ octets de poids faible
Nombre 64 bits au format avec primauté des octets de poids faible (Little endian).
Windows est conçu pour s’exécuter sur des architectures d’ordinateur little-endian. par conséquent, cette valeur est définie sous _ la forme REG QWORD dans les fichiers d’en-tête Windows.
SZ de REG _
Chaîne se terminant par une valeur null. Il s’agit d’une chaîne Unicode ou ANSI, selon que vous utilisez les fonctions Unicode ou ANSI.

Valeurs de type chaîne

Si les données ont le _ type reg SZ, reg _ _ multisz ou reg _ expand _ SZ, la chaîne n’a peut-être pas été stockée avec les caractères null de fin appropriés. Par conséquent, lors de la lecture d’une chaîne à partir du Registre, vous devez vous assurer que la chaîne se termine correctement avant de l’utiliser. Sinon, elle peut remplacer une mémoire tampon. (Notez que REG _ Les _ chaînes à plusieurs SZ doivent avoir deux caractères null de fin.)

Lors de l’écriture d’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 fonction strlen pour déterminer la longueur de la chaîne, mais d’oublier que strlen retourne uniquement le nombre de caractères de la chaîne, à l’exclusion de la valeur null de fin. Par conséquent, la longueur de la chaîne doit être calculée comme suit : strlen( string ) + 1

Une _ _ chaîne à plusieurs SZS reg 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 parcourt _ une _ chaîne reg multiple sz.

#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 un format avec primauté des octets de poids faible ( Little-endian), une valeur multioctet est stockée en mémoire à partir de l’octet le plus bas (le « petit end ») jusqu’à l’octet le plus élevé. Par exemple, la valeur 0x12345678 sinon est stockée sous la forme (0x78 0x56 0x34 0x12) au format avec primauté des octets de poids faible (Little endian).

Au format Big-endian, une valeur sur plusieurs octets est stockée en mémoire à partir de l’octet le plus élevé (le « Big end ») jusqu’à l’octet le plus bas. Par exemple, la valeur 0x12345678 sinon est stockée sous la forme (0x12 0x34 0x56 0x78) au format Big-endian.