我正在調用CreateFile()在Program Data目錄中創建一個文件。我正在使用SHGetSpecialFolderPath()來獲取目錄名稱。如何使用UAC在Vista中獲取文件的實際路徑?
我有一個Vista用戶,其CreateFile()返回錯誤5(拒絕訪問)。如果我知道CreateFile()實際上是在嘗試創建文件,那麼我們可以檢查他的文件夾權限。 Vista(UAC)的問題是,它不會嘗試在我傳入的目錄中創建該文件。它也可能位於VirtualStore目錄中。另外一個混淆的原因是這個用戶是德國人,雖然SHGetSpecialFolderPath()返回「C:\ Program Data \ blah blah」作爲路徑,但我不認爲這實際上是路徑所在。我認爲德語Vista使用德語單詞「程序數據」。我希望能夠告訴用戶「這是我們嘗試創建文件的確切路徑,請檢查您對此文件夾的權限。」
我知道你可以從打開的文件句柄中得到一個路徑,但在這種情況下,CreateFile()失敗了,所以我沒有打開的句柄。我如何讓Vista告訴我試圖創建文件的實際路徑?
如果用戶是在Windows XP上,是一個標準的用戶,會發生什麼?當時`CSIDL_COMMON_APPDATA`指向`C:\ Documents&Settings \ All Users`,你的`CreateFile`也會失敗。 (換句話說,失敗並不是特定於Vista,而是針對你的應用程序,你不應該寫入你不應該寫的地方) – 2011-05-24 18:23:34
fyi:自從Windows 2000以來,SHGetSpecialFolderPath已被棄用;改爲使用SHGetFolderPath。較新的應用程序可以使用`SHGetKnownFolderPath`。 – 2011-05-24 18:26:49