我们如何在SHCreateDirectoryEx()中使用SECURITY_ATTRIBUTES?

时间:2013-03-07 14:26:24

标签: c++ c file directory directory-structure

我的要求如下:

  1. 在指定位置创建目录。
  2. 设置其属性,使文件夹为“READ ONLY”。换句话说,用户帐户不能在此文件夹中创建文件夹/文件。
  3. 现在,我可以按如下方式创建目录:

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

    我现在想设置适当的安全属性。任何帮助/代码示例都将不胜感激。

    平台:Win7(Lang:C ++ / C)

1 个答案:

答案 0 :(得分: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结构后,您可以将其传递给SHCreateDirectoryEx函数。