指定上下文信息

配置管理器提供了多种注册表筛选驱动程序将上下文信息分配给注册表操作的方法。 注册表筛选驱动程序可以:

  • 将上下文信息分配给 RegistryCallback 例程。

    当驱动程序调用 CmRegisterCallbackCmRegisterCallbackEx 来注册注册表操作的通知时,驱动程序可以指定驱动程序定义的上下文值。 每次配置管理器调用该例程时,配置管理器都会将此上下文值传递给驱动程序的 RegistryCallback 例程。

    从 Windows XP 开始支持此上下文信息。

  • 将上下文信息分配给注册表操作。

    驱动程序可以将特定于操作的上下文信息存储在驱动程序的 RegistryCallback 例程接收的每个 REG_XXX_KEY_INFORMATION 结构的 CallContext 成员中。 如果驱动程序同时收到注册表操作的预通知和后通知, 则REG_POST_OPERATION_INFORMATION 结构包含指向相应预通知结构的指针。 当 RegistryCallback 例程收到 REG_POST_OPERATION_INFORMATION 结构时,该结构的 CallContext 成员与预通知结构的 CallContext 成员匹配。

    这些结构的 CallContext 成员从 Windows Vista 开始可用。

  • 将上下文信息分配给注册表项对象。

    RegistryCallback 例程可以将上下文信息分配给特定的注册表项对象。 如果 RegistryCallback 例程调用 CmSetCallbackObjectContext 将上下文信息分配给键对象,则针对该对象的所有操作的后续预通知和后通知将在每个 REG_XXX_KEY_INFORMATION 结构的 ObjectContext 成员中包含上下文值。 如果驱动程序提供了多个 RegistryCallback 例程,则驱动程序可以为单个注册表项对象的每个例程分配不同的上下文信息。

    如果驱动程序已调用 CmSetCallbackObjectContext,则驱动程序的 RegistryCallback 例程将在关闭键对象的句柄后收到 RegNtCallbackObjectContextCleanup 通知。 为了响应此通知,例程应释放它为对象的上下文分配的任何资源。 当 RegistryCallback 例程的 Argument1 参数为 RegNtCallbackObjectContextCleanup 时,Argument2 参数是指向包含指向上下文指针的REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION结构的指针。

    CmSetCallbackObjectContext 例程和 RegNtCallbackObjectContextCleanup 通知从 Windows Vista 开始可用。