2012-07-12 105 views
1

我有一個BHO,它在第一次運行時收集激活信息並將其存儲在註冊表中。如何查找InternetRegistry用戶密鑰或父註冊表密鑰

(我認爲)由於IE的權限的,我只能其存儲在註冊表分支

HKEY_CURRENT_USER \軟件\微軟\的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」。也許這會讓我獲得更好的結果。

回答

1

撥打GetUserName獲取用戶名,LookupAccountName獲取他的SID。

ConvertSidToStringSid是一個有用的工具功能格式化一個SID爲S-1-5-32-00000000-00000000-00000000-00000000-0000

0

如果你真的想給每個用戶的數據寫入註冊表,使用IEGetWriteableHKCU()

通常,在卸載時沒有好方法來刪除每個用戶的數據。例如,如果以用戶A的身份安裝並以用戶B的身份進行卸載,會出現什麼情況?你打算去找到他們並刪除它們嗎?只要把它放在後面。

或者,您可以考慮使用不同的數據存儲。你真的需要註冊表嗎?你可以將這些數據存儲在一個文件中嗎?那Web Storage呢?