我需要为每个人创建一个我正在创建的命名管道的访问权限。我知道这样做的方法是创建一个NULL /空DACL并将其传递给CreateNamedPipe
。
如何创建NULL DACL?我被告知这与传递LPSECURITY_ATTRIBUTES
的NULL指针不同。
答案 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);
此代码创建一个具有所有
访问权限的映射