关于ZwDeleteKey/NtDeleteKey文档中“all other handles to the deleted key”含义的技术问询
关于
ZwDeleteKey/NtDeleteKey中“all other handles to the deleted key”的含义解析 作为经常跟Windows内核API打交道的开发者,我来给你掰扯清楚这个表述的具体含义:
首先先引用ZwDeleteKey函数文档备注章节的官方说明:
调用ZwDeleteKey会使KeyHandle参数中指定的句柄——以及该已删除键的所有其他句柄(all other handles to the deleted key)——失效。在ZwDeleteKey使键句柄失效后,必须调用ZwClose来关闭这些键句柄。
这句话里的all other handles to the deleted key,简单来说就是除了你调用ZwDeleteKey时传入的KeyHandle之外,其他所有已经打开的、指向同一个目标注册表键的句柄。举个例子:你之前通过ZwOpenKey打开某个注册表键拿到了句柄A,之后又再次打开同一个键拿到了句柄B,当你用句柄A调用ZwDeleteKey成功删除该键后,不仅句柄A会立即失效,句柄B也会同步变成无效状态,后续你必须调用ZwClose来关闭这些失效的句柄,避免资源泄漏。
另外要明确一个关键点:ZwDeleteKey()本身有个严格限制——它仅能删除没有任何子键的注册表键。所以这里的“已删除键”必然是满足这个前置条件、被成功标记为删除的键,而all other handles to the deleted key这一表述显然并非指该键的子键句柄(毕竟如果子键存在,ZwDeleteKey根本无法执行成功)。
内容的提问来源于stack exchange,提问作者Aeoliyan
相关产品推荐
相关产品推荐

