注册表回调测试
此自动测试将练习注册表筛选器驱动程序的基本测试用例。
测试详细信息
规范 |
|
平台 |
|
支持的版本 |
|
预计运行时间(以分钟为单位) | 30 |
类别 | 开发 |
超时(以分钟为单位) | 1800 |
需要重启 | false |
需要特殊配置 | false |
类型 | automatic |
其他文档
此功能区域中的测试可能会有其他文档,包括先决条件、设置和故障排除信息,这些内容可在以下主题中找到:
运行测试
在运行测试之前,请按照如下测试要求中所述完成测试设置:文件系统测试先决条件。
故障排除
有关 HLK 测试失败的常规故障排除,请参阅排查 Windows HLK 测试失败问题。
有关故障排除信息,请参阅排查文件系统测试问题。
所有测试用例都返回“通过”或“失败”。 要查看测试详细信息,请查看 Windows Hardware Lab Kit (Windows HLK) Studio 中的测试日志。 对于测试失败,可在日志中搜索“+sev”一词。
更多信息
此测试包括以下测试用例:
海拔高度冲突
CreateKey 阻止
CreateKey 绕过
CreateKey 替代访问被拒绝
CreateKey 替代阻止
SetKeySecurity 绕过
事务处理 CreateKey 绕过
事务处理 CreateKey 绕过(未提交)
注销封闭竞争
保存还原替换
要手动运行每个测试用例,请按照以下过程执行操作。
手动运行“海拔高度冲突”测试用例
在海拔高度 1000 处注册一个回调。
在同一高度注册另一个回调,并验证其是否会失败。
执行 CreateKey 监视测试。
在海拔高度 1000、2000 和 3000 处注册三个相同的回调。 将所有三个回调都设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。
创建一个密钥,然后验证它是否会成功。
注销回调。
验证每个回调是否会根据其海拔高度正确得到调用。
手动运行“CreateKey 阻止”测试用例
在海拔高度 1000、2000 和 3000 处注册三个相同的回调。
将回调 1000 和 3000 设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。
将回调 2000 设置为“阻止”模式。 这意味着该回调将返回错误状态。
创建一个密钥,然后验证它是否会失败。
注销回调。
验证每个回调是否会根据其海拔高度正确得到调用。
手动运行“CreateKey 绕过”测试用例
在海拔高度 1000、2000 和 3000 处注册三个相同的回调。
将回调 1000 和 3000 设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。
将回调 2000 设置为“绕过”模式。 这意味着回调将返回 STATUS_CALLBACK_BYPASS,并代表注册表执行操作。
创建一个密钥,然后验证它是否会成功。
注销回调。
验证每个回调是否会根据其海拔高度正确得到调用。
手动运行“CreateKey 替代访问被拒绝”测试用例
创建一个密钥 K1,然后将其自主访问控制列表 (DACL) 设置为只读访问。
在 K1 下创建一个密钥。 此操作应该会失败,因为是只读 DACL。
在海拔高度 1000、2000 和 3000 处注册三个相同的回调。 STATUS_CALLBACK_BYPASS。
将回调 1000 和 3000 设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。
将回调 2000 设置为“访问被拒绝时绕过”模式。 这意味着该回调将从用户模式执行操作,而不会被只读 DACL 阻止,并且会返回。
在 K1 下创建一个密钥,然后验证它是否会成功。
注销回调。
验证每个回调是否会根据其海拔高度正确得到调用。
手动运行“CreateKey 替代阻止”测试用例
在海拔高度 1000、2000、3000 和 4000 处注册四个相同的回调。
将回调 1000 和 4000 设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。
将回调 2000 设置为“阻止”模式。 这意味着回调将返回 STATUS_UNSUCCESSFUL。
将回调 3000 设置为“替代失败”模式。 这意味着,如果回调在操作后的回调中识别 STATUS_UNSUCCESSFUL,仍会执行操作并返回成功。
创建一个密钥,然后验证它是否会成功。
注销回调。
验证每个回调是否会根据其海拔高度正确得到调用。
手动运行“SetKeySecurity 绕过”测试用例
在海拔高度 1000、2000 和 3000 处注册三个相同的回调。
将回调 1000 和 3000 设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。
将回调 2000 设置为“绕过”模式。 这意味着,回调将返回 STATUS_CALLBACK_BYPASS,并代表注册表执行该操作。
调用 RegSetKeySecurity 以设置密钥的安全描述符,然后验证它是否会成功。
注销回调。
验证每个回调是否会根据其海拔高度正确得到调用。
手动运行“事务处理 CreateKey 绕过”测试用例
创建事务 T1。
在事务 T1 的上下文中创建一个密钥。
确认该密钥能够成功,然后将其删除。
在海拔高度 1000、2000 和 3000 处注册三个相同的回调。
将回调 1000 和 3000 设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。
将回调 2000 设置为“绕过”模式。 这意味着,回调将返回 STATUS_CALLBACK_BYPASS,并代表注册表执行操作。
在事务 T1 的上下文中创建一个密钥,然后确认该密钥能够成功。
提交事务。
注销回调。
手动运行“事务处理 CreateKey 绕过(未提交)”测试用例
- 完成与“事务处理 CreateKey 绕过”测试用例相同的步骤,但在结束时不要提交事务。
手动运行“注销封闭竞争”测试用例
启动线程,打开一个测试密钥,然后在循环中关闭句柄。
在原始线程中,先注册再注销一个回调 100 次。
指示另一个线程退出。
手动运行“保存还原替换”测试用例
在软件配置单元下创建密钥。
在海拔高度 1000 处注册一个回调,并将其设置为“监视”模式。 这意味着回调不会执行任何操作,但会返回 STATUS_SUCCESS。
对于创建的密钥调用 RegSaveKey,然后验证其能够成功。
使用 RegSaveKey 创建的 hive 文件对创建的密钥调用 RegRestoreKey,然后验证其是否能够成功。
创建一个 hive 文件副本。
加载 HKEY_LOCAL_MACHINE 下的原始 hive 文件,然后验证是否能够成功。
使用该 hive 文件副本调用 RegReplaceKey。 此操作由于共享违规应该会失败,但仍会触发对此操作的回调。
取消注册回调,然后验证是否能够正确调用该回调。
命令语法
命令选项 | 说明 |
---|---|
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 |