2012-06-01 95 views
3

我試圖使用GetEffectiveRightsFromAcl來做到這一點,但它沒有返回正確的訪問掩碼,因爲我所屬的組拒絕了我的文件。如何正確檢查使用Windows API對文件的有效讀/寫訪問?

例如,我有一個文件,unreadable.txt。如果我拒絕對當前用戶的寫訪問unreadable.txt,訪問掩碼正確顯示我沒有寫訪問權限。但是,如果我拒絕「Authenticated Users」組的寫入權限,則訪問掩碼意味着我擁有完全訪問權限(我不這麼做)。

我的選擇是手動迭代Ace列表並比較我的SID與每個條目,但我無法找到一個乾淨或簡單的方法來檢查Ace是否適用於一個組,並且如果當前用戶是部分該組。

作爲擴展名,該文件可能不存在(即,它是一個新文件,即將被寫入),在這種情況下,需要檢查對該目錄的訪問。

有沒有什麼好的解決方案呢?似乎應該有一個更簡單的方法來做到這一點,而不是實際嘗試讀取/寫入有問題的文件。

+0

如果有其他權限/ ACL被覆蓋,那麼拒絕一個組不會非必然地拒絕該組的成員。 – Deanna

+0

我在印象之下更具體(用戶權利)覆蓋較不具體(組權利)。但我可能是錯的。 – Deanna

回答

1

只需使用CreateFile以所需的模式嘗試打開文件 - 如果成功,您知道您具有訪問權限。您實際上不必寫任何文件,只需馬上關閉即可。

+0

該文件可能不存在,在這種情況下,該文件取決於包含文件夾。我應該澄清這一點。 –

+1

如果另一個應用程序試圖同時訪問該文件,這可以創建競爭條件以製造片狀用戶體驗。我有很多不受歡迎的經歷,我無法編輯或刪除文件,因爲有些應用程序暫時打開它們。 –

相關問題