Punteros de objeto de clave no válidos en las notificaciones del Registro

Para evitar errores irrecuperables y posibles daños en la memoria, un controlador de filtrado del Registro no debe intentar acceder a un objeto de clave mediante un puntero de objeto no válido. En este tema se enumeran las circunstancias en las que el miembro Object de una estructura de notificación de devolución de llamada del Registro podría contener un valor no NULL indefinido.

En un controlador de filtrado del Registro, el segundo parámetro de la rutina RegistryCallback es un valor de enumeración REG_NOTIFY_CLASS . Este valor indica a qué tipo de estructura de notificación de devolución de llamada del Registro apunta el tercer parámetro de la rutina RegistryCallback . La estructura de notificaciones contiene información sobre la operación del Registro. El tipo de esta estructura varía según la operación del Registro que se está realizando.

Muchos de los tipos de estructura de notificación contienen un miembro Object que apunta a un objeto de clave. En algunos casos, el miembro Object puede contener un valor que no es NULL, pero no es un puntero a un objeto de clave válido.

El valor del objeto clave no está definido

Si el segundo parámetro de una llamada a la rutina RegistryCallback de un controlador de filtrado del registro es un valor de enumeración REG_NOTIFY_CLASS de RegNtPostCreateKeyEx o RegNtPostOpenKeyEx, el tercer parámetro es un puntero a una estructura REG_POST_OPERATION_INFORMATION . El miembro Object de esta estructura solo es válido si el miembro Status de la estructura está establecido en STATUS_SUCCESS. Cualquier otro valor status , incluido un código de estado distinto de cero para el que la macro NT_SUCCESS se evalúa como TRUE, indica que el valor del miembro Object no está definido.

El valor del objeto de clave no está en un estado válido

Si el segundo parámetro de una devolución de llamada del Registro es uno de los siguientes valores de enumeración REG_NOTIFY_CLASS , el miembro Object de la estructura de notificación de devolución de llamada del Registro apunta a un objeto de clave que se está destruyendo y cuyo recuento de referencias es cero:

Dado que el miembro Object apunta a un objeto de clave que no está en un estado válido, el controlador de filtrado del Registro no debe pasar el valor de puntero Object como parámetro a una rutina de compatibilidad del controlador de Windows (por ejemplo, ObReferenceObjectByPointer).

Sin embargo, durante una llamada a RegistryCallback para controlar una notificación RegNtPreKeyHandleClose o RegNtPostKeyHandleClose , un controlador de filtro del Registro puede llamar a una rutina del administrador de configuración (por ejemplo, CmGetBoundTransaction) que toma un objeto del Registro como parámetro.