次の方法で共有


管理通知ハンドラー

Microsoft Active Directory ユーザーとコンピュータ MMC スナップインは、ユーザーがスナップインを使用してオブジェクトのプロパティを削除、名前変更、移動、または変更したときに、コンポーネントが通知を受信できるようにするメカニズムを提供します。 通知を受け取るコンポーネントは、"通知ハンドラー"と呼ばれます。

これは、複数のオブジェクトがリンクされ、同じコンテナ内に存在する必要がある場合に便利です。 リンクされたオブジェクトの 1 つが移動すると、通知ハンドラーに通知が提供され、通知ハンドラーは他のリンクされたオブジェクトを同じフォルダーに移動できます。

操作の 1 つが実行され、1 つ以上の通知ハンドラーがインストールされると、ユーザーとコンピューター スナップインに、通知ハンドラーと各ハンドラーのチェック ボックスを一覧表示する確認ダイアログ ボックスが表示されます。 ハンドラのチェックボックスをオンにすると、ハンドラに通知されます。 このチェックボックスがオフの場合、ハンドラには通知されません。

通知ハンドラの実装

通知ハンドラーは、インプロセス サーバーとして実装される COM オブジェクトです。 通知ハンドラーは、IDsAdminNotifyHandler インターフェイスを実装する必要があります。

通知を発生させるイベントが発生すると、ユーザーとコンピューター スナップインは登録済みの通知ハンドラーを列挙し、ハンドラーの CLSID を使用して各ハンドラーを作成します。 ハンドラーが作成されると、スナップインは IDsAdminNotifyHandler::Initialize メソッドを呼び出します。 Initialize メソッドは、ハンドラーが受け取るイベントをスナップインに提供します。

イベントが通知ハンドラーに送信する必要があるイベントである場合、スナップインは IDsAdminNotifyHandler::Begin メソッドを呼び出します。 Begin メソッドは、イベントの発生、イベントが発生しているオブジェクトに関するデータ、およびイベントに応じて、オブジェクトが何になるかに関するデータをハンドラーに提供します。 また、Begin メソッドは、確認ダイアログ ボックスでハンドラーに表示するテキストをスナップインに提供します。

各ハンドラーの Begin メソッドが呼び出されると、スナップインに確認ダイアログ ボックスが表示されます。 確認ダイアログ ボックスでは、通知を受け取るハンドラーを選択するように求められます。 ユーザーが確認ダイアログで [いいえ] プッシュ ボタンを押しても、ハンドラーには通知されません。 ユーザーが「はい」プッシュ・ボタンを押すと、確認ダイアログボックスで選択した各ハンドラが通知を受信します。 スナップインは、IDsAdminNotifyHandler::Notify メソッドを呼び出して、ハンドラーに通知を送信します。

すべてのハンドラーに通知されると、スナップインは IDsAdminNotifyHandler::End メソッドを呼び出します。 End メソッドは、Notify メソッドが呼び出されない場合でも常に呼び出されます。

Windows レジストリへの通知ハンドラーの登録

すべての COM サーバーと同様に、通知ハンドラーを Windows レジストリに登録する必要があります。 ハンドラーは、次のキーで登録されます:

HKEY_CLASSES_ROOT - CLSID - <CLSID>

<CLSID は>、 StringFromCLSID 関数によって生成される CLSID の文字列表現です。 CLSID キーの下には<>、オブジェクトを 32 ビットのインプロセス サーバーとして識別する InProcServer32 キーがあります。 InProcServer32 キーの下では、DLL の場所は既定値で指定され、スレッド モデルは ThreadingModel 値で指定されます。 すべての通知ハンドラーは、アパートメント スレッド モデルを使用する必要があります。

Active Directory サーバーへの通知ハンドラーの登録

Active Directory Domain Services内では、通知ハンドラーの登録は 1 つのロケールに固有です。 通知ハンドラーをすべてのロケールに適用する場合は、DisplaySpecifiers コンテナー内のすべてのロケール サブコンテナーの displaySpecifier オブジェクトに登録する必要があります。 通知ハンドラが特定のロケールにローカライズされている場合、そのロケールのサブコンテナ内の displaySpecifier オブジェクトに登録されます。 DisplaySpecifiers コンテナーとロケールの詳細については、「表示指定子」および「DisplaySpecifiers コンテナー」を参照してください。

通知ハンドラは、DS-UI-Default-Settings コンテナの dsUIAdminNotification 属性に登録されます。 これは複数値の Unicode 文字列値で、各値には次の形式が必要です:

<order number>,<CLSID>

<「注文番号」は>、確認ダイアログでのハンドラーの位置を表す符号なしの番号です。 確認ダイアログが表示されると<、各値の「注文番号」>の比較を使用して値が並べ替えられます。 複数の値が同じ「順序番号」を持つ場合<>、それらのハンドラは Active Directory サーバから読み取られた順序で表示されます。 存在しないもの<、つまり、プロパティ内の他の値で使用されていないもの、可能であれば「注文番号」>を使用する必要があります。 所定の開始位置はなく<、>「注文番号」の順序にギャップが現れる場合があります。

<"CLSID" >は、 StringFromCLSID 関数によって生成される CLSID の文字列表現です。