Administrative Benachrichtigungshandler
Das Microsoft Active Directory-Benutzer und -Computer MMC-Snap-In bietet einen Mechanismus, mit dem Komponenten Benachrichtigungen empfangen können, wenn der Benutzer die Eigenschaften eines Objekts mithilfe des Snap-Ins löscht, umbenennt, verschiebt oder ändert. Die Komponente, die die Benachrichtigungen empfängt, wird als "Benachrichtigungshandler" bezeichnet.
Dies ist nützlich, wenn mehrere Objekte miteinander verknüpft sind und innerhalb desselben Containers vorhanden sein müssen. Wenn eines der verknüpften Objekte verschoben wird, wird eine Benachrichtigung an den Benachrichtigungshandler bereitgestellt, und der Benachrichtigungshandler kann die anderen verknüpften Objekte in den gleichen Ordner verschieben.
Wenn einer der Vorgänge ausgeführt wird und mindestens ein Benachrichtigungshandler installiert ist, zeigt das Snap-In Benutzer und Computer ein Bestätigungsdialogfeld an, das die Benachrichtigungshandler und ein Kontrollkästchen für jeden Handler auflistet. Wenn das Kontrollkästchen für einen Handler aktiviert ist, wird der Handler benachrichtigt. Wenn das Kontrollkästchen nicht aktiviert ist, wird der Handler nicht benachrichtigt.
Implementieren eines Benachrichtigungshandlers
Ein Benachrichtigungshandler ist ein COM-Objekt, das als In-Proc-Server implementiert wird. Der Benachrichtigungshandler muss die IDsAdminNotifyHandler-Schnittstelle implementieren.
Wenn ein Ereignis auftritt, das eine Benachrichtigung verursacht, listet das Snap-In Benutzer und Computer die registrierten Benachrichtigungshandler auf und erstellt jeden mit der CLSID für den Handler. Nachdem der Handler erstellt wurde, ruft das Snap-In die IDsAdminNotifyHandler::Initialize-Methode auf . Die Initialize-Methode stellt das Snap-In mit den Ereignissen bereit, die der Handler empfangen soll.
Wenn das Ereignis an den Benachrichtigungshandler gesendet werden soll, ruft das Snap-In die IDsAdminNotifyHandler::Begin-Methode auf. Die Begin-Methode stellt dem Handler das ereignis eintretende Ereignis, Daten über das Objekt, für das das Ereignis auftritt, und je nach Ereignis Daten darüber bereit, was das Objekt werden wird. Die Begin-Methode stellt auch das Snap-In mit dem Text bereit, der für den Handler im Bestätigungsdialogfeld angezeigt werden soll.
Wenn die Begin-Methode für jeden Handler aufgerufen wurde, zeigt das Snap-In das Bestätigungsdialogfeld an. Im Bestätigungsdialogfeld wird der Benutzer aufgefordert, auszuwählen, welche Handler die Benachrichtigung erhalten sollen. Wenn der Benutzer im Bestätigungsdialogfeld die Schaltfläche Nein drückt, wird keiner der Handler benachrichtigt. Wenn der Benutzer die Schaltfläche Ja drückt, erhält jeder der im Bestätigungsdialogfeld ausgewählten Handler die Benachrichtigung. Das Snap-In sendet die Benachrichtigung an den Handler, indem die IDsAdminNotifyHandler::Notify-Methode aufgerufen wird.
Nachdem alle Handler benachrichtigt wurden, ruft das Snap-In die IDsAdminNotifyHandler::End-Methode auf. Die End-Methode wird immer aufgerufen, auch wenn die Notify-Methode nicht aufgerufen wird.
Registrieren eines Benachrichtigungshandlers in der Windows-Registrierung
Wie alle COM-Server muss ein Benachrichtigungshandler in der Windows-Registrierung registriert werden. Der Handler wird unter dem folgenden Schlüssel registriert:
HKEY_CLASSES_ROOT - CLSID - <CLSID>
<CLSID> ist die Zeichenfolgendarstellung der CLSID, wie sie von der StringFromCLSID-Funktion erzeugt wird. Unter dem <CLSID-Schlüssel> befindet sich ein InProcServer32-Schlüssel , der das Objekt als 32-Bit-In-Proc-Server identifiziert. Unter dem Schlüssel InProcServer32 wird der Speicherort der DLL im Standardwert und das Threadingmodell im ThreadingModel-Wert angegeben. Alle Benachrichtigungshandler müssen das Apartmentthreadingmodell verwenden.
Registrieren eines Benachrichtigungshandlers bei einem Active Directory-Server
Innerhalb Active Directory Domain Services ist die Registrierung des Benachrichtigungshandlers spezifisch für ein Gebietsschema. Wenn der Benachrichtigungshandler für alle Gebietsschemas gilt, muss er im displaySpecifier-Objekt in allen Gebietsschemauntercontainern im DisplaySpecifiers-Container registriert werden. Wenn der Benachrichtigungshandler für ein bestimmtes Gebietsschema lokalisiert ist, wird er im displaySpecifier-Objekt im Untercontainer dieses Gebietsschemas registriert. Weitere Informationen zum DisplaySpecifiers-Container und zu Gebietsschemas finden Sie unter Display Specifiers und DisplaySpecifiers Container.
Benachrichtigungshandler werden unter dem Attribut dsUIAdminNotification im Container DS-UI-Default-Settings registriert. Hierbei handelt es sich um einen mehrwertigen Unicode-Zeichenfolgenwert, bei dem jeder Wert das folgende Format erfordert:
<order number>,<CLSID>
Die "<Bestellnummer>" ist eine Zahl ohne Vorzeichen, die die Position des Handlers im Bestätigungsdialogfeld darstellt. Wenn das Bestätigungsdialogfeld angezeigt wird, werden die Werte anhand eines Vergleichs der "<Bestellnummer>" der einzelnen Werte sortiert. Wenn mehr als ein Wert dieselbe "<Ordernummer>" aufweist, werden diese Handler in der Reihenfolge angezeigt, in der sie vom Active Directory-Server gelesen werden. Eine nicht vorhandene , d. h. eine, die nicht von anderen Werten in der Eigenschaft verwendet wird, sollte nach Möglichkeit "<Order number>" verwendet werden. Es gibt keine vorgeschriebene Anfangsposition, und Lücken können in der Reihenfolge der "<Bestellnummer>" angezeigt werden.
Die "<CLSID>" ist die Zeichenfolgendarstellung der CLSID, die von der StringFromCLSID-Funktion erzeugt wird.