次の方法で共有


管理通知ハンドラー

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

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

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

通知ハンドラーの実装

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

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

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

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

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

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 の文字列表現です。