Controladores de notificaciones administrativas
El complemento MMC de Microsoft Usuarios y equipos de Active Directory proporciona un mecanismo para permitir que los componentes reciban notificaciones cuando el usuario elimina, cambia el nombre, mueve o cambia las propiedades de un objeto mediante el complemento. El componente que recibe las notificaciones se conoce como "controlador de notificaciones".
Esto resulta útil cuando varios objetos están vinculados juntos y deben existir dentro del mismo contenedor. Si se mueve uno de los objetos vinculados, se proporciona una notificación al controlador de notificaciones y el controlador de notificaciones puede mover los demás objetos vinculados a la misma carpeta.
Cuando se realiza una de las operaciones y se instala uno o varios controladores de notificaciones, el complemento Usuarios y equipos mostrará un cuadro de diálogo de confirmación que enumera los controladores de notificaciones y una casilla para cada controlador. Si la casilla de un controlador está activada, se notifica al controlador. Si la casilla no está activada, no se notifica al controlador.
Implementación de un controlador de notificaciones
Un controlador de notificaciones es un objeto COM implementado como servidor en proceso. El controlador de notificaciones debe implementar la interfaz IDsAdminNotifyHandler .
Cuando se produce un evento que provocará una notificación, el complemento Usuarios y equipos enumera los controladores de notificaciones registrados y crea cada uno mediante el CLSID para el controlador. Una vez creado el controlador, el complemento llama al método IDsAdminNotifyHandler::Initialize . El método Initialize proporciona el complemento con los eventos que debe recibir el controlador.
Si el evento es aquel que se debe enviar al controlador de notificaciones, el complemento llama al método IDsAdminNotifyHandler::Begin . El método Begin proporciona al controlador el evento que se produce, datos sobre el objeto en el que se está produciendo el evento y, en función del evento, datos sobre lo que el objeto se convertirá. El método Begin también proporciona el complemento con el texto que se debe mostrar para el controlador en el cuadro de diálogo de confirmación.
Cuando se llama al método Begin para cada controlador, el complemento muestra el cuadro de diálogo de confirmación. El cuadro de diálogo de confirmación solicita al usuario que seleccione qué controladores recibirán la notificación. Si el usuario presiona el botón No push en el cuadro de diálogo de confirmación, no se notifica a ninguno de los controladores. Si el usuario presiona el botón De pulsación Sí, cada uno de los controladores seleccionados en el cuadro de diálogo de confirmación recibe la notificación. El complemento envía la notificación al controlador mediante una llamada al método IDsAdminNotifyHandler::Notify .
Una vez notificados todos los controladores, el complemento llama al método IDsAdminNotifyHandler::End . Siempre se llama al método End , incluso si no se llama al método Notify .
Registro de un controlador de notificaciones en el Registro de Windows
Al igual que todos los servidores COM, se debe registrar un controlador de notificaciones en el Registro de Windows. El controlador se registra en la siguiente clave:
HKEY_CLASSES_ROOT - CLSID - <CLSID>
<CLSID> es la representación de cadena del CLSID como genera la función StringFromCLSID . En la <clave CLSID> , hay una clave InProcServer32 que identifica el objeto como un servidor en proceso de 32 bits. En la clave InProcServer32 , la ubicación del archivo DLL se especifica en el valor predeterminado y el modelo de subprocesos se especifica en el valor threadingModel . Todos los controladores de notificaciones deben usar el modelo de subprocesos de apartamento .
Registro de un controlador de notificaciones con un servidor de Active Directory
Dentro de Servicios de dominio de Active Directory, el registro del controlador de notificaciones es específico de una configuración regional. Si el controlador de notificaciones se aplica a todas las configuraciones regionales, debe registrarse en el objeto displaySpecifier en todos los subcontenedores de configuración regional del contenedor DisplaySpecifiers. Si el controlador de notificaciones se localiza para una configuración regional determinada, se registra en el objeto displaySpecifier en el subcontenedador de esa configuración regional. Para obtener más información sobre el contenedor y las configuraciones regionales de DisplaySpecifiers, vea Display Specifiers and DisplaySpecifiers Container.
Los controladores de notificaciones se registran en el atributo dsUIAdminNotification en el contenedor DS-UI-Default-Settings . Se trata de un valor de cadena Unicode multivalor en el que cada valor requiere el formato siguiente:
<order number>,<CLSID>
El "<número> de pedido" es un número sin signo que representa la posición del controlador en el cuadro de diálogo de confirmación. Cuando se muestra el cuadro de diálogo de confirmación, los valores se ordenan mediante una comparación del "<número> de pedido" de cada valor. Si más de un valor tiene el mismo "<número> de pedido", esos controladores se muestran en el orden en que se leen desde el servidor de Active Directory. Un valor no existente, es decir, uno no utilizado por otros valores de la propiedad , se debe usar "<número> de pedido" si es posible. No hay ninguna posición inicial establecida y pueden aparecer huecos en la secuencia "<número> de pedido".
El "<CLSID>" es la representación de cadena del CLSID como genera la función StringFromCLSID .