2008-10-13 71 views
10

在服務內部,爲特定用戶確定特殊文件夾路徑(例如「我的文檔」)的最佳方式是什麼? SHGetFolderPath允許你傳入一個令牌,所以我假設有一些方法來模擬你感興趣的文件夾的用戶。如何獲取特定用戶的Windows「特殊文件夾」的路徑?

有沒有一種方法可以僅基於用戶名來完成此操作?如果不是,那麼用戶帳戶需要的最低信息量是多少?我寧願不必要求用戶的密碼。

(這裏是一個related question

回答

2

我會安裝在用戶的註冊表配置單元並查找路徑值。是的,這是一個次優的解決方案,因爲提到的所有原因(窮人向前兼容性等)。然而,就像Windows中的許多其他事情一樣,MS沒有提供API方式來執行你想做的事情,所以它是最好的選擇。

您可以通過使用LookupAccountName得到了用戶的SID(不GUID)。您可以使用LoadUserProfile加載用戶的註冊表配置單元,但不幸的是,這也需要一個用戶標記,該用戶標記需要他們的密碼。幸運的是,您可以使用RegLoadKey手動加載配置單元到任意位置,讀取數據並卸載它(我認爲)。

是的,這是一個痛苦,是的,它可能會打破未來版本的Windows。也許到那個時候,MS將提供一個API來完成它,將它移植到舊版本的Windows中,並通過Windows更新自動分發它......但我不會屏住呼吸。

P.S.這些信息旨在增強相關問題中提供的信息,包括免責聲明。

-3

該信息被存儲在關鍵註冊表中的「HKEY_USERS \ S-1-5-21-616815238-485949776-2992451252-3228 \軟件\微軟\的Windows \ CurrentVersion \ Explorer \ User Shell Folders「。

的 「S-1-5-21-616815238-485949776-2992451252-3218」 是用戶的GUID。您需要獲取此GUID才能找到相應的密鑰並讀取它。

this例如他們使用你提到SHGetFolderPath函數並沒有與可能是有益的所有特殊文件夾列表。

注:微軟鼓勵使用註冊表項,因爲它仍然存在只是爲了向後兼容

+0

這是否適用於所有「近期」版本的Windows(2000年起)? – kgriffs 2008-10-13 16:21:08

+0

我不確定,但由於該功能是由MS支持它應該工作。在實踐中,我只讀取HKEY_CURRENT USER的信息,而不是其他信息。你也可以像INI文件那樣讀取註冊表 – 2008-10-13 16:24:55

3

你可以嘗試調用ImpersonateLoggedOnUser()修改用戶令牌另一個用戶,然後遞過來的SHGetFolderPath()。根據ImpersonateLoggedOnUser()的文檔,您可以調用LogonUser()爲特定用戶獲取令牌。

只需從閱讀的時候,我猜有問題的用戶必須以某種形式按順序登錄這個工作。我記得有一個頁面聲明用戶的註冊表配置單元必須被掛載才能工作(這是有道理的,我想)。

相關問題