Fonction ZwSetValueKey (wdm.h)

La routine ZwSetValueKey crée ou remplace l’entrée de valeur d’une clé de Registre.

Syntaxe

NTSYSAPI NTSTATUS ZwSetValueKey(
  [in]           HANDLE          KeyHandle,
  [in]           PUNICODE_STRING ValueName,
  [in, optional] ULONG           TitleIndex,
  [in]           ULONG           Type,
  [in, optional] PVOID           Data,
  [in]           ULONG           DataSize
);

Paramètres

[in] KeyHandle

Gérez la clé de Registre pour laquelle écrire une entrée de valeur. Ce handle est créé par un appel réussi à ZwCreateKey ou ZwOpenKey.

[in] ValueName

Pointeur vers le nom de l’entrée de valeur pour laquelle les données doivent être écrites. Ce paramètre peut être un pointeur NULL si l’entrée de valeur n’a pas de nom. Si une chaîne de nom est spécifiée et que le nom donné n’est pas unique par rapport à sa clé contenante, les données d’une entrée de valeur existante sont remplacées.

[in, optional] TitleIndex

Ce paramètre est réservé. Les pilotes d’appareil et intermédiaires doivent définir ce paramètre sur zéro.

[in] Type

L’un des types de données définis par le système suivants à écrire :

Valeur de type Signification
REG_BINARY Données binaires dans tout formulaire.
REG_DWORD Valeur numérique de 4 octets.
REG_DWORD_LITTLE_ENDIAN Valeur numérique de 4 octets avec l’octet le moins significatif à l’adresse la plus basse. Identique à REG_DWORD.
REG_DWORD_BIG_ENDIAN Valeur numérique de 4 octets avec l’octet le moins significatif à l’adresse la plus élevée.
REG_EXPAND_SZ Chaîne Unicode terminée par null qui contient des références non expirées à des variables d’environnement, telles que « %PATH% ».
REG_LINK Chaîne Unicode qui nomme un lien symbolique. Ce type n’est pas pertinent pour les pilotes d’appareil et intermédiaires.
REG_MULTI_SZ Tableau de chaînes terminées par null, terminées par un autre zéro.
REG_NONE Données sans type particulier.
REG_SZ Chaîne Unicode terminée par null.
REG_RESOURCE_LIST Liste des ressources matérielles d’un pilote de périphérique, utilisée par le pilote ou l’un des périphériques physiques qu’il contrôle, dans l’arborescence \ResourceMap
REG_RESOURCE_REQUIREMENTS_LIST Liste d’un pilote de périphérique des ressources matérielles possibles qu’il ou l’un des appareils physiques qu’il contrôle peut utiliser, à partir desquels le système écrit un sous-ensemble dans l’arborescence \ResourceMap
REG_FULL_RESOURCE_DESCRIPTOR Liste des ressources matérielles qu’un appareil physique utilise, détecte et écrit dans l’arborescence \HardwareDescription par le système

Les pilotes de périphérique ne doivent pas tenter d’appeler ZwSetValueKey pour écrire explicitement des entrées de valeur dans une sous-clé de la clé \Registry...\ResourceMap . Seul le système peut écrire des entrées de valeur dans l’arborescence \Registry...\HardwareDescription .

[in, optional] Data

Pointeur vers une mémoire tampon allouée à l’appelant qui contient les données de l’entrée de valeur.

[in] DataSize

Spécifie la taille, en octets, de la mémoire tampon de données . Si Type est REG_XXX_SZ, cette valeur doit inclure de l’espace pour les zéros de fin.

Valeur retournée

ZwSetValueKey retourne STATUS_SUCCESS si l’opération réussit. Sinon, cette routine peut retourner l’une des valeurs suivantes :

Code de retour Description
STATUS_ACCESS_DENIED L’appelant n’a pas l’accès approprié à la valeur du Registre.
STATUS_INVALID_HANDLE Le handle n'est pas valide.

Remarques

Le KeyHandle passé à ZwSetValueKey doit avoir été ouvert avec l’indicateur DesiredAccess KEY_SET_VALUE défini pour que cet appel réussisse. Pour obtenir une description des valeurs possibles pour DesiredAccess, consultez ZwCreateKey.

Si la clé donnée n’a pas d’entrée de valeur existante avec un nom correspondant au ValueName donné, ZwSetValueKey crée une entrée de valeur avec le nom donné. S’il existe un nom d’entrée de valeur correspondant, cette routine remplace l’entrée de valeur d’origine pour le ValueName donné. Ainsi, ZwSetValueKey conserve un nom unique pour chaque entrée de valeur d’une clé particulière. Bien que chaque nom d’entrée de valeur soit unique à sa clé contenante, de nombreuses clés différentes dans le Registre peuvent avoir des entrées de valeur portant les mêmes noms.

Pour plus d’informations sur l’utilisation des clés de Registre, consultez Utilisation du Registre dans un pilote.

Si l’appel à cette fonction se produit en mode utilisateur, vous devez utiliser le nom « NtSetValueKey » au lieu de « ZwSetValueKey ».

Pour les appels à partir de pilotes en mode noyau, les versions NtXxx et ZwXxx d’une routine Windows Native System Services peuvent se comporter différemment dans la façon dont elles gèrent et interprètent les paramètres d’entrée. Pour plus d’informations sur la relation entre les versions NtXxx et ZwXxx d’une routine, consultez Utilisation des versions Nt et Zw des routines des services système natifs.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Règles de conformité DDI HwStorPortProhibitedDDIs(storport),IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport),ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(storport), ZwRegistryOpen(storport), ZwRegistryOpen(wdm)

Voir aussi

HalAssignSlotResources

IoAssignResources

IoQueryDeviceDescription

IoReportResourceUsage

Utilisation des versions Nt et Zw des routines natives des services système natifs

ZwClose

ZwCreateKey

ZwFlushKey

ZwOpenKey