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

概要
本文演示如何向文件添加 " 访问 " 允许访问控制项 (ACE)。


更多信息
当访问允许 ACE 添加到文件自由访问控制列表 (DACL), 相应用户或组帐户与 ACE 由系统附带对该文件允许访问。 在大多数情况下, 该文件的 DACL 是不足以添加其他 ACE。 因此, 非常需要创建新的访问控制列表 (ACL) 并复制该文件的现有 DACL 首选顺序中 ACE。 新 DACL 可再替换旧 DACL 文件安全描述符 (SD) 中。 在以下示例代码中详细解释此过程:

对于 WindowsNT 版本 4.0 和更早版本, 的 ACE 首选顺序非常简单。 在 DACL, 所有访问拒绝 ACE 应之前任何访问允许 ACE。 因引入了对象特有 ACE 和自动继承用于 Windows 2000 或更高版本, ACE 的正确顺序是更复杂。

下面描述首选顺序对于 Windows 2000 或更高版本: • 若要确保通过继承 ACE, 非继承 ACE 具有优先级放置所有非继承 ACE 在组之前任何继承 ACE。 非继承访问拒绝 ACE, 无论任何继承 ACE 允许访问实施此排序确保, 例如。
• 非继承 ACE 继承 ACE, 以及组内顺序 ACE 根据 ACE 键入,: 作为下显示 • 访问拒绝 ACE, 适用于对象本身。
• 适用于 subobject 对象, 如属性设置或属性访问拒绝 ACE。
• 允许访问 ACE, 适用于对象本身
• 适用于 subobject 对象访问允许 ACE

用于将 ACE 添加到 DACL 低级访问控制 API 执行不强制首选顺序。 AddAce 函数在 ACL 中指定位置添加 ACE。 AddAccessAllowedAce 函数将 ACE 添加到末尾的 ACL。 因此, 它是呼叫者责任以确保首选顺序中添加 ACE。 有关 DACL, 中 ACE 的顺序请访问 Microsoft Developer Network (MSDN) Web 站点:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/order_of_aces_in_a_dacl.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/order_of_aces_in_a_dacl.asp)


示例代码
下列示例代码演示所需要访问允许 ACE 添加到一个文件的 DACL 基本步骤。 注释是代码中步骤 1 - 21 详细末尾本文中讨论。 #include <windows.h>
#include <tchar.h>
#include <stdio.h>

#define myheapalloc(x) (HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, x))
#define myheapfree(x) (HeapFree(GetProcessHeap(), 0, x))

typedef BOOL (WINAPI *SetSecurityDescriptorControlFnPtr)(
IN PSECURITY_DESCRIPTOR pSecurityDescriptor,
IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet);

BOOL AddAccessRights(TCHAR *lpszFileName, TCHAR *lpszAccountName,
DWORD dwAccessMask) {

// SID variables.
SID_NAME_USE snuType;
TCHAR * szDomain = NULL;
DWORD cbDomain = 0;
LPVOID pUserSID = NULL;
DWORD cbUserSID = 0;

// File SD variables.
PSECURITY_DESCRIPTOR pFileSD = NULL;
DWORD cbFileSD = 0;

// New SD variables.
SECURITY_DESCRIPTOR newSD;

// ACL variables.
PACL pACL = NULL;
BOOL fDaclPresent;
BOOL fDaclDefaulted;
ACL_SIZE_INFORMATION AclInfo;

// New ACL variables.
PACL pNewACL = NULL;
DWORD cbNewACL = 0;

// Temporary ACE.
LPVOID pTempAce = NULL;
UINT CurrentAceIndex = 0;

UINT newAceIndex = 0;

// Assume function will fail.
BOOL fResult = FALSE;
BOOL fAPISuccess;

SECURITY_INFORMATION secInfo = DACL_SECURITY_INFORMATION;

// New APIs available only in Windows 2000 and above for setting
// SD control
SetSecurityDescriptorControlFnPtr _SetSecurityDescriptorControl = NULL;

__try {

//
// STEP 1: Get SID of the account name specified.
//
fAPISuccess

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

    免费论文

    原创论文

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