SetFileSecurity设置文件目录安全属性(NTFS下)的问题.

whn 2004-03-19 04:35:07
我用SetFileSecurity设置一个文件的访问属性都没有问题
但用同样的代码对目录设置时,就有问题,

比如我对一个目录设置为everyone的GENERIC_ALL访问属性
everyone到时加到文件夹的安全名字列表中去了
但那些权限(GENERIC_ALL)一个都没有被设置.怎么回事啊

对文件没有问题的啊.
我的代码:

#define WORLD_ACCESS GENERIC_ALL//GENERIC_READ|GENERIC_WRITE
PSID CreateWorldSid()
{
SID_IDENTIFIER_AUTHORITY authWorld = SECURITY_WORLD_SID_AUTHORITY;
PSID pSid, psidWorld;
BOOL bRes;
DWORD cbSid;

bRes = AllocateAndInitializeSid(&authWorld,
1,
SECURITY_WORLD_RID,
0,
0,
0,
0,
0,
0,
0,
&psidWorld);
if (FALSE == bRes) {
return NULL;
}

// Make a copy of the SID using a HeapAlloc'd block for return
//
cbSid = GetLengthSid(psidWorld);

pSid = (PSID) HeapAlloc(GetProcessHeap(), 0, cbSid);
if (NULL == pSid) {
return NULL;
}

bRes = CopySid(cbSid, pSid, psidWorld);
if (FALSE == bRes) {
return NULL;
}

FreeSid(psidWorld);

return pSid;
}

HRESULT SetFileRight(char* pFileObject)
{
HRESULT hr=S_OK;
PSID psidEveryone;
PACL pAcl;
SECURITY_DESCRIPTOR sd;
BOOL bRes;
DWORD cbAcl;
psidEveryone = CreateWorldSid();
cbAcl = GetLengthSid (psidEveryone) +
sizeof(ACL) + ((sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD)));
pAcl = (PACL) HeapAlloc(GetProcessHeap(), 0, cbAcl);
if (NULL == pAcl) {
HeapFree(GetProcessHeap(), 0, psidEveryone);
return S_FALSE;
}


bRes = InitializeAcl(pAcl,
cbAcl,
ACL_REVISION);
if (FALSE == bRes) {
hr=S_FALSE;
goto CleanUp;
}


bRes = AddAccessAllowedAce(pAcl,
ACL_REVISION,
WORLD_ACCESS,
psidEveryone);
if (FALSE == bRes) {
hr=S_FALSE;
goto CleanUp;
}

// Put together the security descriptor
//
bRes = InitializeSecurityDescriptor(&sd,
SECURITY_DESCRIPTOR_REVISION);
if (FALSE == bRes) {
hr=S_FALSE;
goto CleanUp;
}

bRes = SetSecurityDescriptorDacl(&sd,
TRUE,
pAcl,
FALSE);
if (FALSE == bRes) {
hr=S_FALSE;
goto CleanUp;
}

if (!SetFileSecurity(pFileObject,
DACL_SECURITY_INFORMATION,
&sd))
{
hr=S_FALSE;

}
else
hr=S_OK;
CleanUp:
HeapFree(GetProcessHeap(), 0, pAcl);
HeapFree(GetProcessHeap(), 0, psidEveryone);
return hr;
}
...全文
431 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
enoloo 2004-03-19
  • 打赏
  • 举报
回复
关注。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧