共用方式為


管理員 通知處理程式

Microsoft Active Directory 使用者和電腦 MMC 嵌入式管理單元提供一種機制,讓使用者使用嵌入式管理單元刪除、重新命名、移動或變更物件的屬性時,能夠接收通知。 接收通知的元件稱為「通知處理程式」。

當多個對象連結在一起,且必須存在於相同的容器內時,這非常有用。 如果移動其中一個連結的物件,通知會提供給通知處理程式,而通知處理程式可以將其他連結的物件移至相同的資料夾。

執行其中一項作業並安裝一或多個通知處理程式時,[使用者和計算機] 嵌入式管理單元會顯示確認對話方塊,其中列出通知處理程式和每個處理程式的複選框。 如果選取處理程式的複選框,則會通知處理程式。 如果未選取複選框,則不會通知處理程式。

實作通知處理程式

通知處理程式是實作為內部伺服器之 COM 物件。 通知處理程式必須實作標識碼 管理員 NotifyHandler 介面。

當發生會導致通知的事件時,使用者和計算機嵌入式管理單元會列舉已註冊的通知處理程式,並使用處理程式的 CLSID 建立每個通知處理程式。 建立處理程序之後,嵌入式管理單元會呼叫標識符 管理員 NotifyHandler::Initialize 方法。 Initialize 方法會提供處理程式應接收的事件嵌入式管理單元。

如果事件應傳送至通知處理程式,嵌入式管理單元會呼叫標識碼 管理員 NotifyHandler::Begin 方法。 Begin 方法會為處理程式提供所發生的事件、事件發生對象的相關數據,以及根據事件,有關對象將變成哪些數據的數據。 Begin 方法也會提供嵌入式管理單元,其中包含應該在確認對話框中顯示處理程式的文字。

呼叫每個處理程式的 Begin 方法時,嵌入式管理單元會顯示確認對話方塊。 確認對話框會提示用戶選取要接收通知的處理程式。 如果使用者在確認對話框中按下 [無 ] 按鈕,則不會通知任何處理程式。 如果使用者按下 [是 ] 按鈕,確認對話框中選取的每個處理程式都會收到通知。 嵌入式管理單元會呼叫標識碼 管理員 NotifyHandler::Notify 方法,將通知傳送至處理程式。

通知所有處理程序之後,嵌入式管理單元會呼叫標識碼 管理員 NotifyHandler::End 方法。 即使未呼叫 Notify 方法,也會一律呼叫 End 方法。

在 Windows 登錄中註冊通知處理程式

和所有 COM 伺服器一樣,必須在 Windows 登錄中註冊通知處理程式。 處理程式會在下列機碼下註冊:

HKEY_CLASSES_ROOT - CLSID - <CLSID>

<CLSID> 是 StringFromCLSID 函式所產生的 CLSID 字串表示法。 在 <CLSID> 金鑰下,有一個 InProcServer32 機碼,會將對象識別為 32 位內部伺服器。 在 InProcServer32 機碼下,DLL 的位置是在預設值中指定,而線程模型是在 ThreadingModel 值中指定。 所有通知處理程式都必須使用 Apartment 線程模型。

向 Active Directory 伺服器註冊通知處理程式

在 Active Directory 網域服務 內,通知處理程式註冊是一個地區設定特有的。 如果通知處理程式套用至所有地區設定,則必須在 DisplaySpecifiers 容器中所有地區設定子容器的 displaySpecifier 對象中註冊它。 如果特定地區設定的通知處理程式已當地語系化,則會在該地區設定的子容器的 displaySpecifier 物件中註冊。 如需 DisplaySpecifiers 容器和地區設定的詳細資訊,請參閱 顯示規範DisplaySpecifiers 容器

通知處理程式會在 DS-UI-Default-設定 容器中的 dsUI 管理員 Notification 屬性下註冊。 這是多重值 Unicode 字串值,其中每個值都需要下列格式:

<order number>,<CLSID>

「<訂單編號>」是一個不帶正負號的數位,代表處理程式在確認對話框中的位置。 顯示確認對話框時,值會使用每個值的「<訂單號碼>」進行比較來排序。 如果多個值具有相同的「<訂單號碼>」,這些處理程式會以從 Active Directory 伺服器讀取的順序顯示。 非現有值,也就是說,如果可能的話,應該使用屬性中其他值未使用的「<訂單號碼>」。 沒有規定的起始位置,間距可以出現在「<訂單編號>」序列中。

“CLSID>” 是 StringFromCLSID 函式所產生的 CLSID 字串表示法。<