Partager via


Gestion des notifications

La routine RegistryCallback reçoit un pointeur vers une structure REG_XXX_KEY_INFORMATION qui contient des informations sur l’opération de Registre qui se produit.

La routine RegistryCallback peut surveiller, bloquer ou modifier une opération de Registre.

Surveillance des appels du Registre

Si un pilote de filtrage du Registre surveille les opérations du Registre, sa routine RegistryCallback peut mettre à jour des compteurs ou effectuer d’autres opérations de comptabilité, puis retourner STATUS_SUCCESS. Chaque fois qu’une routine RegistryCallback retourne STATUS_SUCCESS, le gestionnaire de configuration continue d’effectuer l’opération de Registre.

La surveillance des appels de Registre est prise en charge dans Windows XP et les versions ultérieures de Windows.

Blocage des appels du Registre

Un pilote de filtrage du Registre peut bloquer les opérations de Registre si sa routine RegistryCallback retourne une valeur status pour laquelle NT_SUCCESS(status) est false (c’est-à-dire une valeur NTSTATUS non réussie). Lorsque le gestionnaire de configuration reçoit une valeur de retour non réussie, il retourne immédiatement au thread appelant avec la valeur de status spécifiée par le pilote. Par conséquent, un pilote de filtrage du Registre peut utiliser des pré-notifications pour empêcher le traitement des opérations du Registre.

Si une routine RegistryCallback retourne une valeur status pour laquelle NT_SUCCESS(status) équivaut à FALSE pour une pré-notification, le rappel post-notification de l’opération ne se produit pas.

Le blocage des appels de Registre est pris en charge dans Windows XP et les versions ultérieures de Windows. Pour Windows Vista et versions ultérieures, le pilote peut modifier les valeurs que l’opération de Registre retourne au thread appelant. Ces valeurs sont contenues dans les structures REG_XXX_KEY_INFORMATION pour Windows Vista et versions ultérieures.

Modification des appels du Registre

Un pilote de filtrage du Registre peut modifier les paramètres de sortie ou la valeur de retour d’une opération de Registre. En outre, le pilote peut traiter complètement une opération de Registre au lieu d’autoriser le Registre à gérer l’opération.

Quand la routine RegistryCallback d’un pilote de filtrage du Registre reçoit une notification post-notification, elle peut :

  • Modifiez les paramètres de sortie que sa structure REG_XXX_KEY_INFORMATION contient, puis retournez STATUS_SUCCESS. Le gestionnaire de configuration retourne les paramètres de sortie modifiés au thread appelant.

    La modification des paramètres de sortie est prise en charge dans Windows Vista et versions ultérieures.

  • Modifiez la valeur de retour de l’opération de Registre en fournissant une valeur de status pour le membre ReturnStatus de la structure REG_POST_OPERATION_INFORMATION, puis en retournant STATUS_CALLBACK_BYPASS. Le gestionnaire de configuration retourne la valeur de retour spécifiée au thread appelant.

    Note Si le pilote modifie un code status de réussite en échec, il doit peut-être libérer les objets alloués par le gestionnaire de configuration. Si le pilote modifie un code de status d’échec en réussite, il doit peut-être fournir les paramètres de sortie appropriés.

La modification des valeurs de retour est prise en charge dans Windows Vista et versions ultérieures.

Quand la routine RegistryCallback d’un pilote de filtrage du Registre reçoit une pré-notification, la routine peut gérer l’opération de Registre elle-même, puis retourner STATUS_CALLBACK_BYPASS. Lorsque le Registre reçoit des STATUS_CALLBACK_BYPASS du pilote, il retourne simplement STATUS_SUCCESS au thread appelant et ne traite pas l’opération. Le pilote préeptise l’opération de Registre et doit la gérer complètement, et le pilote doit veiller à renvoyer des valeurs de sortie valides dans la structure REG_XXX_KEY_INFORMATION .

Les pilotes peuvent préempter les opérations de Registre dans Windows Vista et versions ultérieures.

Si une routine RegistryCallback retourne STATUS_CALLBACK_BYPASS pour une pré-notification, le rappel post-notification de l’opération ne se produit pas.

Note Plusieurs appels de système de registre ne sont pas documentés, car ils sont rarement utilisés et, lorsqu’ils sont utilisés, il s’agit généralement d’obtenir un résultat non conventionnel dans le registre. La modification des opérations effectuées par ces appels est difficile et sujette aux erreurs. Les développeurs de pilotes sont découragés d’essayer de modifier les appels système de registre suivants :

  • NtRestoreKey
  • NtSaveKey
  • NtSaveKeyEx
  • NtLoadKeyEx
  • NtUnloadKey2
  • NtUnloadKeyEx
  • NtReplaceKey
  • NtRenameKey
  • NtSetInformationKey