如何创建NULL /空DACL?

时间:2013-01-24 13:26:51

标签: c++ security winapi dacl

我需要为每个人创建一个我正在创建的命名管道的访问权限。我知道这样做的方法是创建一个NULL /空DACL并将其传递给CreateNamedPipe

如何创建NULL DACL?我被告知这与传递LPSECURITY_ATTRIBUTES的NULL指针不同。

2 个答案:

答案 0 :(得分:10)

像这样:

SECURITY_DESCRIPTOR SD;
InitializeSecurityDescriptor(&SD, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&SD, TRUE, NULL, FALSE);

为简洁起见,我省略了错误检查。你不会这样做。

然后,当您致电CreateNamedPipe时,您可以设置安全属性记录,如下所示:

SA.nLength = sizeof(SA);
SA.lpSecurityDescriptor = &SD;
SA.bInheritHandle = TRUE;

SetSecurityDescriptorDacl州的文档:

  

当pDacl参数未指向DACL且bDaclPresent标志为TRUE时,指定NULL DACL。允许所有访问。您不应将NULL DACL与对象一起使用,因为任何用户都可以更改安全描述符的DACL和所有者。这会干扰对象的使用。

所以,上面是如何做到的,但文档确实强调你不应该这样做。

答案 1 :(得分:4)

以下是我们在其中一个项目中使用的代码:

SECURITY_DESCRIPTOR  pSD;
SECURITY_ATTRIBUTES  SA;

if(!InitializeSecurityDescriptor(&pSD, SECURITY_DESCRIPTOR_REVISION))
    throw error;
if(!SetSecurityDescriptorDacl(&pSD, true, NULL, false))
    throw error;
SA.nLength = sizeof(SA);
SA.lpSecurityDescriptor = &pSD;
SA.bInheritHandle = true;
pSA = &SA;
...
FMapping = CreateFileMapping(INVALID_HANDLE_VALUE, pSA, PAGE_READWRITE, 0, 4096, p);

此代码创建一个具有所有

访问权限的映射