有這麼一個簡單需求
有時候,你可能希望判斷是否對檔案或者資料夾有某種許可權,但是又不想實際操作,只是簡單的判斷而已。舉個例子,你可能向快速地知道是否對某個資料夾是否有刪除裡面檔案的許可權。
一種方法是:獲取該物件的ACL,然後檢查是否當前使用者擁有希望的許可權。有一個API AccessCheck可以做這件事情,呼叫起來也比較簡單。
這個時候,可能你會想:”等會,系統裡應該有一個完整的安全元件,來判斷誰可以訪問哪個檔案。為什麼不使用這個安全元件的功能呢?”
舉個例子:下面的程式碼演示瞭如何檢查某個使用者是否具有刪除一個資料夾裡的檔案的許可權。
程式碼解析
我們透過呼叫CreateFile這個API來嘗試性地開啟目標資料夾(你可以觀察到,我們程式碼中指定了一個
FILE_FLAG_BACKUP_SEMANTICS標誌),然後請求FILE_DELETE_CHILD操作許可權,如果操作成功,我們就能知道:當前使用者有許可權刪除資料夾中的檔案。
再一個需要注意的是:當CreateFile返回一個有效控制代碼後,我們不要忘記關閉這個控制代碼,以避免資源洩露。
最後,我們對CreateFile的返回值進行了比較,如果返回值有效,則說明我們具有我們希望的許可權。
請注意,上述得到的資訊,只是用來作為參考的。所以,請不要基於這個資訊來做出任何安全方面的操作,為什麼?因為許可權會實時變動,可能在你實際進行操作的時候,許可權已經不再是你之前獲取到的許可權了。
總結
我突然想起WinXP那會兒,人人都是Administrator的魔幻時代。
有道是:不是Admin不舒服斯基。
最後
Raymond Chen的《The Old New Thing》是我非常喜歡的部落格之一,裡面有很多關於Windows的小知識,對於廣大Windows平臺開發者來說,確實十分有幫助。
本文來自:《An easy way to determine whether you have a particular file permission》