对应用程序配置单元进行注册表操作过滤

用户模式应用程序使用 注册表中的应用程序配置单元 来存储特定于应用的状态数据。

注册表筛选器驱动程序接收对其 RegistryCallback 例程的调用,以便在应用程序配置单元上执行注册表操作。

这些调用不区分应用程序配置单元上的注册表操作和其他类型注册表配置单元上的操作。

若要加载应用程序配置单元,应用会调用 RegLoadAppKey

应用程序配置单元在\\REGISTRY\\A下加载,而不是在\\REGISTRY\\MACHINE\\REGISTRY\\USER下加载。

没有办法遍历 \\REGISTRY\\A。 尝试在 \REGISTRY\A 下打开密钥失败,出现错误状态 STATUS_ACCESS_DENIED

若要访问应用程序配置单元中的密钥,应用使用在调用 RegLoadAppKey 时收到的句柄。

在关闭配置单元的所有句柄后,操作系统会自动卸载应用程序的配置单元。

与其他类型的注册表配置单元相比,每个密钥都通过其自身的安全描述符进行保护,而应用程序配置单元的安全性则基于整个配置单元文件的安全描述符。

这意味着:

  • 尝试在应用程序配置单元中的单个密钥上设置安全描述符失败,错误状态 STATUS_ACCESS_DENIED

  • 成功加载 hive 的实体可以修改整个配置单元。

处理创建键和打开键操作的注册表筛选器驱动程序(由 RegNtPreOpenKeyRegNtPreOpenKeyExRegNtPreCreateKeyRegNtPreCreateKeyEx 通知值指示)必须注意不要使用绝对路径(即以 \\REGISTRY\\A\\ 开头的路径)来打开应用程序配置单元;只有注册表管理器可以执行此操作。

如果注册表筛选器驱动程序尝试以这种方式打开应用程序的 hive(例如,通过调用 ZwOpenKey 例程),该操作会因错误状态 STATUS_ACCESS_DENIED 而失败。

绝对路径名称字符串显示在REG_CREATE_KEY_INFORMATIONREG_CREATE_KEY_INFORMATION_V1REG_OPEN_KEY_INFORMATIONREG_OPEN_KEY_INFORMATION_V1结构的 CompleteName 成员中。