Freigeben über


Administrative Benachrichtigungshandler

Das MMC-Snap-In für Microsoft Active Directory-Benutzer und -Computer bietet einen Mechanismus, mit dem Komponenten Benachrichtigungen empfangen können, wenn der Benutzer die Eigenschaften eines Objekts mithilfe des Snap-Ins löscht, umzubenennen, zu verschieben oder zu ändern. 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 dem Benachrichtigungshandler eine Benachrichtigung bereitgestellt, und der Benachrichtigungshandler kann die anderen verknüpften Objekte in denselben Ordner verschieben.

Wenn eine der Vorgänge ausgeführt wird und mindestens ein Benachrichtigungshandler installiert ist, zeigt das Snap-In "Benutzer und Computer" ein Bestätigungsdialogfeld an, in dem die Benachrichtigungshandler und ein Kontrollkästchen für jeden Handler aufgelistet sind. 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 den IDsAdminNotifyHandler Schnittstelle implementieren.

Wenn ein Ereignis auftritt, das zu einer Benachrichtigung führt, zählt 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 ein, 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 den Handler mit dem aufgetretenen Ereignis, Daten über das Objekt bereit, auf dem das Ereignis auftritt, und je nach Ereignis Daten darüber, was das Objekt 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. Das Bestätigungsdialogfeld fordert den Benutzer auf, auszuwählen, welche Handler die Benachrichtigung erhalten. Wenn der Benutzer im Bestätigungsdialogfeld die Keine Knopfdruck drückt, werden keine Handler benachrichtigt. Wenn der Benutzer die Ja Knopfdruck drückt, erhalten alle im Bestätigungsdialogfeld ausgewählten Handlern die Benachrichtigung. Das Snap-In sendet die Benachrichtigung an den Handler, indem der 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, die von der funktion StringFromCLSID erzeugt wird. Unter dem <CLSID-> Schlüssel gibt es einen InProcServer32- schlüssel, der das Objekt als 32-Bit-In-Proc-Server identifiziert. Unter dem InProcServer32 Schlüssel wird der Speicherort der DLL im Standardwert angegeben, und das Threadingmodell wird im ThreadingModel Wert angegeben. Alle Benachrichtigungshandler müssen das Apartment Threadingmodell verwenden.

Registrieren eines Benachrichtigungshandlers mit einem Active Directory-Server

Innerhalb von Active Directory Domain Services ist die Benachrichtigungshandlerregistrierung spezifisch für ein Gebietsschema. Wenn der Benachrichtigungshandler für alle Gebietsschemas gilt, muss er im displaySpecifier -Objekt in allen Gebietsschema-Untercontainern 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 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 für jeden Wert das folgende Format erforderlich ist:

<order number>,<CLSID>

Die "<Bestellnummer>" ist eine nicht signierte Zahl, die die Position des Handlers im Bestätigungsdialogfeld darstellt. Wenn das Bestätigungsdialogfeld angezeigt wird, werden die Werte anhand eines Vergleichs der "<Bestellnummer jedes Werts>" sortiert. Wenn mehrere Werte dieselbe "<Bestellnummer>" aufweisen, werden diese Handler in der Reihenfolge angezeigt, in der sie vom Active Directory-Server gelesen werden. Eine nicht vorhandene, d. h. nicht von anderen Werten in der Eigenschaft verwendete, "<Bestellnummer>" sollte nach Möglichkeit verwendet werden. Es gibt keine vorgeschriebene Anfangsposition, und Lücken können in der Reihenfolge "<Reihenfolge>" angezeigt werden.

Die "<CLSID>" ist die Zeichenfolgendarstellung der CLSID, wie sie von der StringFromCLSID--Funktion erzeugt wird.