注册表回调测试

此自动测试将练习注册表筛选器驱动程序的基本测试用例。

测试详细信息

   
规范
  • Filter.Driver.FileSystem.MiniFilter
  • Filter.Driver.FileSystem.RegistryAndProcess
  • Filter.Driver.AntiVirus.RegistryAndProcess
  • Filter.Driver.AntiVirus.MiniFilter
平台
  • Windows 10,客户端版本 (x86)
  • Windows 10,客户端版本 (x64)
  • Windows Server 2016 (x64)
支持的版本
  • Windows 10
  • Windows 10 版本 1511
  • Windows 10 版本 1607
  • Windows 10 版本 1703
  • Windows 10 版本 1709
  • Windows 10 版本 1803
  • Windows 10 版本 1809
  • Windows 10 版本 1903
  • Windows 10 的下一次更新
预计运行时间(以分钟为单位) 30
类别 开发
超时(以分钟为单位) 1800
需要重启 false
需要特殊配置 false
类型 automatic

 

其他文档

此功能区域中的测试可能会有其他文档,包括先决条件、设置和故障排除信息,这些内容可在以下主题中找到:

运行测试

在运行测试之前,请按照如下测试要求中所述完成测试设置:文件系统测试先决条件

故障排除

有关 HLK 测试失败的常规故障排除,请参阅排查 Windows HLK 测试失败问题

有关故障排除信息,请参阅排查文件系统测试问题

所有测试用例都返回“通过”或“失败”。 要查看测试详细信息,请查看 Windows Hardware Lab Kit (Windows HLK) Studio 中的测试日志。 对于测试失败,可在日志中搜索“+sev”一词。

更多信息

此测试包括以下测试用例:

  • 海拔高度冲突

  • CreateKey 阻止

  • CreateKey 绕过

  • CreateKey 替代访问被拒绝

  • CreateKey 替代阻止

  • SetKeySecurity 绕过

  • 事务处理 CreateKey 绕过

  • 事务处理 CreateKey 绕过(未提交)

  • 注销封闭竞争

  • 保存还原替换

要手动运行每个测试用例,请按照以下过程执行操作。

手动运行“海拔高度冲突”测试用例

  1. 在海拔高度 1000 处注册一个回调。

  2. 在同一高度注册另一个回调,并验证其是否会失败。

  3. 执行 CreateKey 监视测试。

  4. 在海拔高度 1000、2000 和 3000 处注册三个相同的回调。 将所有三个回调都设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。

  5. 创建一个密钥,然后验证它是否会成功。

  6. 注销回调。

  7. 验证每个回调是否会根据其海拔高度正确得到调用。

手动运行“CreateKey 阻止”测试用例

  1. 在海拔高度 1000、2000 和 3000 处注册三个相同的回调。

  2. 将回调 1000 和 3000 设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。

  3. 将回调 2000 设置为“阻止”模式。 这意味着该回调将返回错误状态。

  4. 创建一个密钥,然后验证它是否会失败。

  5. 注销回调。

  6. 验证每个回调是否会根据其海拔高度正确得到调用。

手动运行“CreateKey 绕过”测试用例

  1. 在海拔高度 1000、2000 和 3000 处注册三个相同的回调。

  2. 将回调 1000 和 3000 设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。

  3. 将回调 2000 设置为“绕过”模式。 这意味着回调将返回 STATUS_CALLBACK_BYPASS,并代表注册表执行操作。

  4. 创建一个密钥,然后验证它是否会成功。

  5. 注销回调。

  6. 验证每个回调是否会根据其海拔高度正确得到调用。

手动运行“CreateKey 替代访问被拒绝”测试用例

  1. 创建一个密钥 K1,然后将其自主访问控制列表 (DACL) 设置为只读访问。

  2. 在 K1 下创建一个密钥。 此操作应该会失败,因为是只读 DACL。

  3. 在海拔高度 1000、2000 和 3000 处注册三个相同的回调。 STATUS_CALLBACK_BYPASS。

  4. 将回调 1000 和 3000 设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。

  5. 将回调 2000 设置为“访问被拒绝时绕过”模式。 这意味着该回调将从用户模式执行操作,而不会被只读 DACL 阻止,并且会返回。

  6. 在 K1 下创建一个密钥,然后验证它是否会成功。

  7. 注销回调。

  8. 验证每个回调是否会根据其海拔高度正确得到调用。

手动运行“CreateKey 替代阻止”测试用例

  1. 在海拔高度 1000、2000、3000 和 4000 处注册四个相同的回调。

  2. 将回调 1000 和 4000 设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。

  3. 将回调 2000 设置为“阻止”模式。 这意味着回调将返回 STATUS_UNSUCCESSFUL。

  4. 将回调 3000 设置为“替代失败”模式。 这意味着,如果回调在操作后的回调中识别 STATUS_UNSUCCESSFUL,仍会执行操作并返回成功。

  5. 创建一个密钥,然后验证它是否会成功。

  6. 注销回调。

  7. 验证每个回调是否会根据其海拔高度正确得到调用。

手动运行“SetKeySecurity 绕过”测试用例

  1. 在海拔高度 1000、2000 和 3000 处注册三个相同的回调。

  2. 将回调 1000 和 3000 设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。

  3. 将回调 2000 设置为“绕过”模式。 这意味着,回调将返回 STATUS_CALLBACK_BYPASS,并代表注册表执行该操作。

  4. 调用 RegSetKeySecurity 以设置密钥的安全描述符,然后验证它是否会成功。

  5. 注销回调。

  6. 验证每个回调是否会根据其海拔高度正确得到调用。

手动运行“事务处理 CreateKey 绕过”测试用例

  1. 创建事务 T1。

  2. 在事务 T1 的上下文中创建一个密钥。

  3. 确认该密钥能够成功,然后将其删除。

  4. 在海拔高度 1000、2000 和 3000 处注册三个相同的回调。

  5. 将回调 1000 和 3000 设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。

  6. 将回调 2000 设置为“绕过”模式。 这意味着,回调将返回 STATUS_CALLBACK_BYPASS,并代表注册表执行操作。

  7. 在事务 T1 的上下文中创建一个密钥,然后确认该密钥能够成功。

  8. 提交事务。

  9. 注销回调。

手动运行“事务处理 CreateKey 绕过(未提交)”测试用例

  • 完成与“事务处理 CreateKey 绕过”测试用例相同的步骤,但在结束时不要提交事务。

手动运行“注销封闭竞争”测试用例

  1. 启动线程,打开一个测试密钥,然后在循环中关闭句柄。

  2. 在原始线程中,先注册再注销一个回调 100 次。

  3. 指示另一个线程退出。

手动运行“保存还原替换”测试用例

  1. 在软件配置单元下创建密钥。

  2. 在海拔高度 1000 处注册一个回调,并将其设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。

  3. 对于创建的密钥调用 RegSaveKey,然后验证其能够成功。

  4. 使用 RegSaveKey 创建的 hive 文件对创建的密钥调用 RegRestoreKey,然后验证其是否能够成功。

  5. 创建一个 hive 文件副本。

  6. 加载 HKEY_LOCAL_MACHINE 下的原始 hive 文件,然后验证是否能够成功。

  7. 使用该 hive 文件副本调用 RegReplaceKey。 此操作由于共享违规应该会失败,但仍会触发对此操作的回调。

  8. 取消注册回调,然后验证是否能够正确调用该回调。

命令语法

命令选项 说明

RegCbTestctrl.exe -regr

运行测试。

注意

   有关此测试二进制文件的命令行帮助,请键入 /h。

 

文件列表

文件 位置

RegCbTestCtrl.exe

[WTT\TestBinRoot]\NTTEST\BASETEST\kernel\cm

RegCbTest.sys

[WTT\TestBinRoot]\NTTEST\BASETEST\kernel\cm

Ntlog.dll

 

参数

参数名称 参数说明
LLU_LclAdminUser 用于执行的 LLU
LLU_NetAccessOnly 用于复制的 LLU