2013-03-07 58 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结构中,你可以将它传递给​​函数。