2009-09-30 34 views
0

我希望能夠從服務中檢索用戶帳戶的Windows「特殊路徑」(例如臨時文件文件夾,桌面)。如何從服務中獲取用戶帳戶的Windows特殊路徑

我知道這樣做的正常方法是使用SHGetFolderPath和相應的CSIDL作爲文件夾類型。有沒有辦法讓每個用戶獲得這種類型的信息,而服務卻不必以每個用戶的身份登錄?

回答

1

我不是這方面的專家,但似乎你可以使用hToken參數SHGetFolderPath傳遞另一個用戶的令牌。我認爲你可以使用impersonation創建這樣一個令牌。

如果這樣不起作用:這些文件夾位於HKEY_USERS/<user's-sid>/Software/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders的註冊表中。如何獲得SID在this question中有解釋。它是用C#編寫的,但我認爲它在C++中會更容易。

+0

我不認爲模擬會爲我工作,因爲(AFAIK)用戶需要在當時登錄,我想在一次掃描中爲所有用戶執行此操作。不過,我會檢查註冊表方法,看起來很有前途,謝謝。 – snowcrash09 2009-10-01 09:00:30

+0

令人遺憾的是,註冊表方法無法正常工作 - 在這些用戶登錄之前,其他用戶的HKEY_USERS下的分支不會被安裝。感謝這個想法。 – snowcrash09 2009-10-01 16:26:53

+0

在這種情況下,您將別無選擇,只能以每個用戶的身份登錄服務,因爲即使API函數無法從註冊表項讀取它們也無法訪問...... – Thomas 2009-10-01 16:44:12

相關問題