2010-08-10 71 views
1

我在Linux中工作。在具有stat函數的Linux中,我們可以提取文件的權限。在windows中查找文件的權限

同樣,我們如何在Windows中提取文件的權限。

msdn中的_stat函數聲明在stat緩衝區中設置了權限位。但它沒有給出如何提取它們。

http://msdn.microsoft.com/en-us/library/14h5k7ff%28VS.71%29.aspx

+0

Windows權限和Unix權限的實現方式完全不同;我不認爲你會嘗試在Windows上使用stat。 – Luke 2010-08-10 13:50:51

回答

0

我在你提供的等等,如_stat實現和朋友的文件權限是UNIX具體的閒置NTFS,FAT和其他Windows文件系統的鏈接閱讀。

我想你會有更多的運氣使用經典FindFirstFile和相關功能讀取文件權限。你需要處理返回的句柄here 這些是非常不可移植的,但由於C++沒有文件系統支持,它們是唯一不錯的選擇。

2

Windows使用ACL(訪問控制列表)來控制對文件(或其他內核對象)的訪問。您可以使用GetFileSecurity(您需要DACL,而不是SACL)獲取文件的ACL。然後您可以從GetEffectiveRightsFromAcl獲得實際權限(權利)。

這有一個競爭條件,所以它很少是一個好主意,但。特別是,在檢索DACL的時間和嘗試對文件執行操作的時間之間,DACL可能已經更改,因此檢索到的內容不再正確。

3

結構統計結構確實不是包含Windows上的任何文件權限信息。 Windows安全性更加複雜,你需要GetFileSecurity()來檢索文件的DACL。這很少在Windows程序中完成,您通常會讓Windows評估有效權限並處理「您無法做到」錯誤返回。來自GetLastError()的ERROR_ACCESS_DENIED。

0

MSDN並沒有像它應該那麼多的超鏈接,你需要搜索一下,找到_stat Structure st_mode Field Constants

在Unix和Windows上,您只能獲得文件的基本權限,而不能訪問控制列表。由於Windows使用ACL很多,因此_stat不會爲您提供太多有用的信息。您需要使用本地Windows API函數來獲取ACL。