Partager via


Pointeurs d’objets clés non valides dans les notifications du Registre

Pour éviter des erreurs irrécupérables et une altération possible de la mémoire, un pilote de filtrage du Registre ne doit pas essayer d’accéder à un objet clé à l’aide d’un pointeur d’objet non valide. Cette rubrique répertorie les circonstances dans lesquelles le membre Object d’une structure de notification de rappel du Registre peut contenir une valeur non définie , non NULL.

Dans un pilote de filtrage du Registre, le deuxième paramètre de la routine RegistryCallback est une valeur d’énumération REG_NOTIFY_CLASS . Cette valeur indique le type de structure de notification de rappel du Registre vers lequel pointe le troisième paramètre de la routine RegistryCallback . La structure de notification contient des informations sur l’opération de Registre. Le type de cette structure varie en fonction de l’opération de Registre en cours d’exécution.

La plupart des types de structure de notification contiennent un membre Object qui pointe vers un objet clé. Dans certains cas, le membre Object peut contenir une valeur non NULL, mais n’est pas un pointeur vers un objet clé valide.

La valeur de l’objet key est Undefined

Si le deuxième paramètre d’un appel à la routine RegistryCallback d’un pilote de filtrage du Registre est une REG_NOTIFY_CLASS valeur d’énumération de RegNtPostCreateKeyEx ou RegNtPostOpenKeyEx, le troisième paramètre est un pointeur vers une structure REG_POST_OPERATION_INFORMATION . Le membre Object de cette structure n’est valide que si le membre Status de la structure est défini sur STATUS_SUCCESS. Toute autre valeur Status, y compris un code status différent de zéro pour lequel la macro NT_SUCCESS prend la valeur TRUE, indique que la valeur du membre Object n’est pas définie.

La valeur de l’objet clé n’est pas dans un état valide

Si le deuxième paramètre d’un rappel du Registre est l’une des valeurs d’énumération REG_NOTIFY_CLASS suivantes, le membre Object de la structure de notification de rappel du Registre pointe vers un objet clé en cours de destruction et dont le nombre de références est égal à zéro :

Étant donné que le membre Object pointe vers un objet clé qui n’est pas dans un état valide, le pilote de filtrage du Registre ne doit pas passer la valeur du pointeur d’objet en tant que paramètre à une routine de prise en charge du pilote Windows (par exemple, ObReferenceObjectByPointer).

Toutefois, lors d’un appel RegistryCallback pour gérer une notification RegNtPreKeyHandleClose ou RegNtPostKeyHandleClose , un pilote de filtre du Registre peut appeler une routine du gestionnaire de configuration (par exemple, CmGetBoundTransaction) qui prend un objet de Registre en tant que paramètre.