此示例使用低级函数将空DACL附加到文件对象。对于使用高级安全功能的类似示例,请参阅拒绝访问.
该示例为安全描述符分配一个缓冲区,并调用InitializeSecurityDescriptor函数来初始化缓冲区。然后为ACL分配一个缓冲区,并调用InitializeAcl函数来初始化该缓冲区。接下来,它调用SetSecurityDescriptorDacl功能将ACL附加到安全描述符;并调用SetFileSecurity函数将安全描述符附加到文件中。
PSECURITY_DESCRIPTOR pSD;
PACL pACL;
DWORD cbACL = 1024;
/ *初始化安全描述符。*/
pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR,
SECURITY_DESCRIPTOR_MIN_LENGTH); /* defined in WINNT.H */
if (pSD == NULL) {
ErrorHandler("LocalAlloc");
goto Cleanup;
}
if(!InitializeSecurityDescriptor(pSD,
SECURITY_DESCRIPTOR_REVISION)){/ *在WINNT.H中定义* /
ErrorHandler("InitializeSecurityDescriptor");
goto Cleanup;
}
/ *初始化和处理。*/
pACL = (PACL) LocalAlloc(LPTR, cbACL);
if (pACL == NULL) {
ErrorHandler("LocalAlloc");
goto Cleanup;
}
如果(!InitializeAcl(氯化钠,cbACL,ACL_REVISION2)){
ErrorHandler("InitializeAcl");
goto Cleanup;
}
/ *向SD添加一个空ACL以拒绝访问。*/
if(!SetSecurityDescriptorDacl(pSD,
TRUE,/ * fDaclPresent标志* /
pACL,
FALSE)){/ *不是默认的DACL * /
ErrorHandler("SetSecurityDescriptorDacl");
goto Cleanup;
}
/ *使用新的SD作为文件的安全信息。*/
如果(!SetFileSecurity(lpszTestFile,id
DACL_SECURITY_INFORMATION,
pSD)){
ErrorHandler("SetFileSecurity");
goto Cleanup;
}
清理:
if(pSD != NULL)
LocalFree((HLOCAL) pSD);
if(pACL != NULL)
LocalFree((HLOCAL) pACL);