【问题标题】:What happens when an opened key is deleted or renamed?当打开的密钥被删除或重命名时会发生什么?
【发布时间】:2014-08-06 05:41:12
【问题描述】:

是否在任何地方记录/定义了以下情况的行为:

  1. 进程 A 打开密钥“foo”,进程 B 打开密钥“foo”,然后将其删除。
  2. 进程 A 打开密钥“foo”,进程 B 打开密钥“foo”,然后将其重命名为“bar”。

我发现在这两种情况下进程 B 的操作都会成功 - 并且关闭 A 中的句柄仍然有效。但这里到底发生了什么?

似乎有很多边缘原因使这难以理解。例如,情况 1 如果在进程 B 删除密钥后,进程 A 尝试重命名已删除的密钥或在其下创建新的子密钥,会发生什么情况?

【问题讨论】:

  • 重命名操作未记录在案,因此从所有效果和目的来看,您应该认为它的行为是未定义的。

标签: windows winapi registry


【解决方案1】:

RegDeleteKeyEx::

直到最后一个句柄关闭后才会删除已删除的键。

【讨论】:

  • 重命名的情况如何?
  • 没有使用任何一种特定 WINAPI 的重命名操作。您必须复制要重命名的 Reg Tree,然后将其删除,然后创建与之前复制的 Reg 树相同的新(重命名)密钥。
  • 这是使用 ZwRenameKey
  • 这是一个低级调用。但我认为,他们仍然会遵循复制、删除然后创建新密钥的相同流程。对此没有进一步的想法。对不起。
  • 复制、删除、创建是什么意思?
猜你喜欢
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 2022-06-27
  • 2013-03-24
  • 2012-06-04
  • 1970-01-01
相关资源
最近更新 更多