如何找到InternetRegistry用户密钥或父注册表项

时间:2012-07-12 09:23:44

标签: c++ internet-explorer registry bho sid

我有一个BHO,它在第一次运行时收集激活信息并将其存储在注册表中。

(我认为)由于IE的许可,我只能将其存储在注册表分支中

  

HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ InternetRegistry \ REGISTRY \ USER \ S-0-0-00-000000000-000000000-000000000-0000 \ Software \ MyBHO \ MyKey

其中S-0-0-00-000000000-000000000-000000000-0000是每个用户的唯一密钥。

使用RegCreateKey() "Software\MyBHO\MyKey"时哪个好。这一切都创造和运行可爱。它确定存储密钥的空间位置没有问题。

问题:

当我执行卸载时,我想删除此密钥,因为这是在IE之外运行的,我无法确定该密钥的位置/用户字符串是什么。

我想到的选项:

选项1 (理想) 首先找出这个用户字符串,然后为我想删除的密钥构建一个新路径并将其删除。怎么样?

选项2 在激活点存储可以访问的另一个注册表值中的键的路径。然后读取并删除两者(由于BHO在注册表上的访问限制(因此它首先写在那里),这似乎有点倒退并且可能不会工作))

您知道是否有任何方法可以找到此用户密钥,甚至找不到如何查找父目录。

编辑继续研究后,我发现我称之为“用户密钥”的是当前用户“SID”。也许这会让我得到更好的结果。

2 个答案:

答案 0 :(得分:1)

调用GetUserName获取用户名,并LookupAccountName获取他的SID。

ConvertSidToStringSid是一个有用的效用函数,用于将SID格式化为S-1-5-32-00000000-00000000-00000000-00000000-0000字符串

答案 1 :(得分:0)

如果您确实要将每用户数据写入注册表,请使用IEGetWriteableHKCU()

通常,没有好的方法可以在卸载时删除每个用户的数据。例如,如果以用户A安装并以用户B卸载,该怎么办?你打算去找所有这些并删除它们吗?只是留下粪便。

或者,您可以考虑使用其他数据存储。你真的需要注册表吗?你能把这些数据存储在一个文件中吗?那么Web Storage呢?