管理员istrative 通知处理程序

Microsoft Active Directory 用户和计算机 MMC 管理单元提供了一种机制,使组件能够在用户删除、重命名、移动或更改使用管理单元的对象属性时接收通知。 接收通知的组件称为“通知处理程序”。

当多个对象链接在一起并且必须存在于同一容器中时,这非常有用。 如果移动了其中一个链接对象,则会向通知处理程序提供通知,通知处理程序可以将其他链接对象移动到同一文件夹。

执行其中一项操作并安装一个或多个通知处理程序时,用户和计算机管理单元将显示一个确认对话框,其中列出了通知处理程序和每个处理程序的检查框。 如果选择处理程序的检查框,则会通知处理程序。 如果未选择检查框,则不会通知处理程序。

实现通知处理程序

通知处理程序是作为过程内服务器实现的 COM 对象。 通知处理程序必须实现 ID管理员NotifyHandler 接口。

发生将导致通知的事件时,用户和计算机管理单元会枚举已注册的通知处理程序,并使用处理程序的 CLSID 创建每个通知处理程序。 创建处理程序后,管理单元将调用 ID管理员NotifyHandler::Initialize 方法。 Initialize 方法提供处理程序应接收的事件管理单元。

如果事件应发送到通知处理程序,则管理单元将调用 ID管理员NotifyHandler::Begin 方法。 Begin 方法为处理程序提供所发生的事件、有关事件发生的对象的数据,以及根据事件,有关该对象将变成的数据。 Begin 方法还提供管理单元以及应在确认对话框中为处理程序显示的文本。

调用每个处理程序的 Begin 方法时,管理单元将显示确认对话框。 确认对话框提示用户选择接收通知的处理程序。 如果用户在确认对话框中按 “无 ”按钮,则不会通知任何处理程序。 如果用户按下 “是 ”按钮,则确认对话框中选择的每个处理程序都会收到通知。 管理单元通过调用 ID管理员NotifyHandler::Notify 方法将通知发送到处理程序。

收到所有处理程序的通知后,管理单元将调用 ID管理员NotifyHandler::End 方法。 始终调用 End 方法,即使未调用 Notify 方法。

在 Windows 注册表中注册通知处理程序

与所有 COM 服务器一样,必须在 Windows 注册表中注册通知处理程序。 处理程序在以下密钥下注册:

HKEY_CLASSES_ROOT - CLSID - <CLSID>

<CLSID> 是由 StringFromCLSID 函数生成的 CLSID 的字符串表示形式。 <在 CLSID> 密钥下,有一个 InProcServer32 密钥,用于将对象标识为 32 位代理服务器。 在 InProcServer32 键下,DLL 的位置在默认值中指定,线程模型在 ThreadingModel 值中指定。 所有通知处理程序都必须使用 单元 线程模型。

向 Active Directory 服务器注册通知处理程序

在Active Directory 域服务中,通知处理程序注册特定于一个区域设置。 如果通知处理程序适用于所有区域设置,则必须在 DisplaySpecifiers 容器中的所有区域设置子容器的 displaySpecifier 对象中注册它。 如果某个区域设置的通知处理程序已本地化,则会在该区域设置的子容器的 displaySpecifier 对象中注册该处理程序。 有关 DisplaySpecifiers 容器和区域设置的详细信息,请参阅 显示说明符DisplaySpecifiers 容器

通知处理程序在 DS-UI-Default-设置 容器中的 dsUI管理员Otification 属性下注册 这是多值 Unicode 字符串值,其中每个值都需要以下格式:

<order number>,<CLSID>

“order number>”<是一个无符号数字,表示处理程序在确认对话框中的位置。 显示确认对话框时,将使用每个值的“订单号>”<的比较对值进行排序。 如果多个值具有相同的“订单号>”<,则这些处理程序以从 Active Directory 服务器读取的顺序显示。 非现有值(即属性中的其他值未使用)应尽可能使用“<订单号>”。 没有规定的起始位置,空白可以出现在“订单号>”<序列中。

“CLSID>”是由 StringFromCLSID 函数生成的 CLSID 的字符串表示形式。<