2013-03-07 106 views
1

我的要求如下:我們如何在SHCreateDirectoryEx()中使用SECURITY_ATTRIBUTES?

  1. 在指定位置創建一個目錄。
  2. 設置其屬性,使文件夾爲「READ ONLY」。換句話說,用戶帳戶不應該能夠在該文件夾內創建文件夾/文件。

現在,我可以創建目錄如下:

SHCreateDirectoryEx(NULL, <path>.c_str(), NULL); 

我現在想設置相應的安全屬性。任何幫助/代碼示例將不勝感激。

平臺:Win7的(郎鹹平:C++/C)

+1

SHCreateDirectoryEx是無關緊要的,你的問題完全是關於'SECURITY_ATTRIBUTES'。 – 2013-03-07 14:31:15

回答

3

你要做的第一件事就是創建一個SECURITY_ATTRIBUTES結構,並設置它的成員。

SECURITY_ATTRIBUTES SecAttr; 

SecAttr.size = sizeof(SECURITY_ATTRIBUTES); //Set size of structure 

下一個成員是一個類型的SECURITY_DESCRIPTOR這實際上包含了管理此對象的安全訪問所需的所有數據。

您不能直接創建這種結構,按照MSDN documentation,但你會使用文檔創建這樣一個結構中提供的功能,設置它的所有所需必要的標誌,然後獲得一個指向它傳遞給SecAttr

有關如何創建這樣一個SECURITY_DESCRIPTOR結構的示例可以找到here。在這個例子中,它是爲註冊表鍵完成的,但原理是相同的。

基本上你在DACL(Discretionary Security Access Control List)或SACL正在填充(System Access Control List有什麼權限(右鍵屬性讀/寫/只讀)等,你要的對象有。

具有填充在整個SECURITY_ATTRIBUTES結構中,你可以將它傳遞給​​函數。