如何在SHCreateDirectoryEx()中使用SECURITY_ATTRIBUTES ?

How do we use SECURITY_ATTRIBUTES with SHCreateDirectoryEx()?

本文关键字:SECURITY ATTRIBUTES SHCreateDirectoryEx      更新时间:2023-10-16

我的要求如下:

  1. 在指定位置创建目录。
  2. 设置其属性,使文件夹为"只读"。换句话说,用户帐户不能在这个文件夹中创建文件夹/文件。

现在,我可以创建如下目录:

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

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

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

您要做的第一件事是创建一个SECURITY_ATTRIBUTES结构体,并设置其成员。

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

下一个成员是SECURITY_DESCRIPTOR类型,它实际上包含管理对该对象的安全访问所需的所有数据。

你不能直接创建这个结构,根据MSDN文档,但你会使用文档中提供的函数来创建这样一个结构,设置所有必要的标志,然后得到一个指针,传递给SecAttr

可以在这里找到一个关于如何创建这样一个SECURITY_DESCRIPTOR结构的示例。在本例中,它是针对注册表项完成的,但原理是相同的。

本质上你是在填写一个DACL(可自由支配的安全访问控制列表)或SACL(系统访问控制列表),其中包含你希望对象拥有的访问权限(读/写/只读)等属性。

填写完整个SECURITY_ATTRIBUTES结构体后,您可以将其传递给SHCreateDirectoryEx函数。