Partager via


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

Pour éviter les erreurs irrécupérables et l’altération possible de la mémoire, un pilote de filtrage de 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 Objet d’une structure de notification de rappel de Registre peut contenir une valeur non définie et non NULL.

Dans un pilote de filtrage de registre, le deuxième paramètre de la routine RegistryCallback est une énumération de type 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.

De nombreux types de structure de notification contiennent un membre d’objet qui pointe vers un objet clé. Dans certains cas, le membre De l’objet peut contenir une valeur qui n’est pas NULL, mais n’est pas un pointeur vers un objet clé valide.

La valeur de l'objet clé est indéfinie

Si le deuxième paramètre d’un appel à la routine RegistryCallback d’un pilote de filtrage de Registre est une valeur d’énumération REG_NOTIFY_CLASSregNtPostCreateKeyEx ou RegNtPostOpenKeyEx, le troisième paramètre est un pointeur vers une structure REG_POST_OPERATION_INFORMATION . Le membre Object de cette structure est valide uniquement si le membre Status de la structure est défini sur STATUS_SUCCESS. Toute autre valeur d’état , y compris un code d’état 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 de Registre est l’une des valeurs d’énumération suivantes REG_NOTIFY_CLASS , le membre objet 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 Objet pointe vers un objet clé qui n’est pas dans un état valide, le pilote de filtrage du Registre ne doit pas transmettre 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 de Registre peut appeler une routine de gestionnaire de configuration (par exemple , CmGetBoundTransaction) qui prend un objet de Registre en tant que paramètre.