Routines de la bibliothèque de Run-Time du Registre

Pour manipuler des entrées de Registre, les pilotes peuvent appeler les routines RtlXxxRegistryXxx , qui fournissent une interface plus simple que les routines ZwXxxKey . Dans ce cas, le pilote n’est pas tenu d’ouvrir et de fermer les poignées ; au lieu de cela, le pilote fait référence aux clés par nom.

Vous passez les paramètres RelativeTo et Path à chaque routine RtlXxxRegistryXxx . Si RelativeTo est RTL_REGISTRY_ABSOLUTE, Path spécifie le chemin d’accès complet de la clé, en commençant par la racine \Registry . Si RelativeTo est RTL_REGISTRY_HANDLE, Path est en fait un handle ouvert. Les valeurs RTL_REGISTRY_XXX supplémentaires pour RelativeTo spécifient les chemins d’accès de racines communes pour la clé ; dans ce cas, Path spécifie le chemin d’accès relatif à cette racine. Par exemple, RTL_REGISTRY_USER exige que Path soit relatif aux paramètres de Registre de l’utilisateur actuel. (Cette valeur équivaut à spécifier HKEY_CURRENT_USER dans une application en mode utilisateur.) Pour obtenir une description de toutes les valeurs RTL_REGISTRY_XXX , consultez RtlCheckRegistryKey.

Le tableau suivant répertorie les opérations que les pilotes peuvent effectuer en appelant les routines RtlXxxRegistryXxx .

Opération RtlXxxRegistryXxx routine à appeler

Créer une clé de Registre

RtlCreateRegistryKey

Vérifier si une clé de Registre existe

RtlCheckRegistryKey

Examiner une ou plusieurs valeurs de clé de Registre

RtlQueryRegistryValues

Écrire une valeur de clé de Registre

RtlWriteRegistryValue

Supprimer une valeur de clé de Registre

RtlDeleteRegistryValue

L’exemple de code suivant montre comment définir ValueName pour \Registry\Machine\System\KeyName sur une valeur ULONG de 0xFF. Comparez cet exemple avec celui correspondant dans la section Routines de l’objet de clé de registre .

NTSTATUS status;
ULONG data = 0xFF;

status = RtlWriteRegistryValue(RTL_REGISTRY_ABSOLUTE,
                               (PWCSTR)L"\\Registry\\Machine\\System\\KeyName",
                               (PWCSTR)L"ValueName",
                               REG_DWORD,
                               &data,
                               sizeof(ULONG));

Bien que vous écriviez moins de lignes de code lors de l’utilisation des routines RtlXxxRegistryXxx au lieu des routines ZwXxxKey , ces dernières sont nécessaires pour effectuer certaines opérations. Par exemple, il n’existe aucune routine RtlXxxRegistryXxx qui correspond à ZwEnumerateKey.

Si vous effectuez plusieurs opérations sur la même clé, les routines ZwXxxKey sont plus efficaces: vous pouvez utiliser le même handle ouvert pour chaque opération. En revanche, les routines RtlXxxRegistryXxx ouvrent et ferment un nouveau handle pour chaque opération.