网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
如何向文件添加访问允许 ACE
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
trolBits = 0;
DWORD dwRevision = 0;

if (!GetSecurityDescriptorControl(pFileSD, &oldControlBits,
&dwRevision)) {
_tprintf(TEXT("GetSecurityDescriptorControl() failed.")
TEXT("Error %d\n"), GetLastError());
__leave;
}

if (oldControlBits & SE_DACL_AUTO_INHERITED) {
controlBitsOfInterest =
SE_DACL_AUTO_INHERIT_REQ |
SE_DACL_AUTO_INHERITED;
controlBitsToSet = controlBitsOfInterest;
}
else if (oldControlBits & SE_DACL_PROTECTED) {
controlBitsOfInterest = SE_DACL_PROTECTED;
controlBitsToSet = controlBitsOfInterest;
}

if (controlBitsOfInterest) {
if (!_SetSecurityDescriptorControl(&newSD,
controlBitsOfInterest,
controlBitsToSet)) {
_tprintf(TEXT("SetSecurityDescriptorControl() failed.")
TEXT("Error %d\n"), GetLastError());
__leave;
}
}
}

//
// STEP 20: Set the new SD to the File.
//
if (!SetFileSecurity(lpszFileName, secInfo,
&newSD)) {
_tprintf(TEXT("SetFileSecurity() failed. Error %d\n"),
GetLastError());
__leave;
}

fResult = TRUE;

} __finally {

//
// STEP 21: Free allocated memory
//
if (pUserSID)
myheapfree(pUserSID);

if (szDomain)
myheapfree(szDomain);

if (pFileSD)
myheapfree(pFileSD);

if (pNewACL)
myheapfree(pNewACL);
}

return fResult;
}

int _tmain(int argc, TCHAR *argv) {

if (argc < 3) {
_tprintf(TEXT("usage: \"%s\" <FileName> <AccountName>\n"), argv[0]);
return 1;
}

// argv - FileName
// argv - Name of the User or Group account to add access
if (!AddAccessRights(argv, argv, GENERIC_ALL)) {
_tprintf(TEXT("AddAccessRights() failed.\n"));
return 1;
}
else {
_tprintf(TEXT("AddAccessRights() succeeded.\n"));
return 0;
}
}


示例代码中步骤的说明
1. 为用户或组名指定是调用 LookupAccountName 函数以获取安全标识符 (SID)。 LookupAccountName 函数被实际上调用两次, 然后再次以检索帐户信息次以确定需要缓冲区大小,:。 从此获取此 SID 函数用于以后对 AddAccessAllowedACE 函数调用中。 LookupAccountName 函数还提供域位置是找到该用户或组帐户。

注意 如果需要多 SAM 数据库查询来检索所需信息: LookupAccountName 函数会非常昂贵调用。 有关如何获取 SID 的当前用户, 请单击下列文章编号以查看 Microsoft 知识库中相应:
111544 (http://support.microsoft.com/kb/111544/) 如何检索 WindowsNT、 Windows 2000 或 WindowsXP 上当前用户和域名称
有关如何获取已知或内置用户或组, 好的 SID 请单击下列文章编号以查看 Microsoft 知识库中相应:
157234 (http://support.microsoft.com/kb/157234/) 如何处理本地化和重命名用户和组名称
2. GetFileSecurity 函数是用于获取该文件的安全描述符 (SD) 的副本。 实际上调用两次 GetFileSecurity 函数: 次确定需要缓冲区大小, 然后再次以检索 SD.

注意 安全描述符具有两可能格式: 自相关联和绝对。 为自相关联格式, GetFileSecurity 函数返回一个 SD 但 SetFileSecurity 函数期望 SD 以绝对格式。 这是一个原因代码必须创建新 SD 并复制信息, 而不是只修改从 GetFileSecurity 函数 SD 和传递到 SetFileSecurity 函数。 它是可能以调用 MakeAbsoluteSD 函数来执行转换, 但是可能足够空间当前 ACL, 中提到。
3. 通过调用 InitializeSecurityDescriptor 函数初始化新 SD。
4. GetSecurityDescriptorDacl 函数检索到 SD. 中 DACL 指针
5. 调用 GetAclInformation 函数以获取该文件的 DACL 以 ACL_SIZE_INFORMATION 结构的形式大小有关。 当计算新 DACL 的大小以及复制 ACE

  • 下一篇资讯: Visual C++窗体设计技巧集
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号