赞
踩
在NTFS文件系统出现后,在Windows系统(2K/XP/Vista..)下的对象,包括文件系统,进程、命名管道、打印机、网络共享、或是注册表等等,都可以设置用户访问权限。
在Windows系统中,其是用一个安全描述符(Security Descriptors)的结构来保存其权限的设置信息,简称为SD,其在Windows SDK中的结构名是“SECURITY_DESCRIPTOR”,这是包括了安全设置信息的结构体,其结构体内容定义如下:
一个安全描述符包含以下安全信息:
DACL和SACL构成了整个存取控制列表Access Control List,简称ACL,ACL中的每一项,我们叫做ACE(Access Control Entry),ACL中的每一个ACE。
ACL结构体的内容如下:
- void CreateFileForSA(TCHAR *strFile)
- {
- SECURITY_ATTRIBUTES sa; //和文件有关的安全结构
- SECURITY_DESCRIPTOR sd; //声明一个SD
-
- BYTE aclBuffer[1024];
- PACL pacl=(PACL)&aclBuffer; //声明一个ACL,长度是1024
-
- BYTE sidBuffer[100];
- PSID psid=(PSID) &sidBuffer; //声明一个SID,长度是100
-
- DWORD sidBufferSize = 100;
- TCHAR domainBuffer[80];
- DWORD domainBufferSize = 80;
- SID_NAME_USE snu;
- HANDLE file;
-
- //初始化一个SD
- InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
- //初始化一个ACL
- InitializeAcl(pacl, 1024, ACL_REVISION);
- //查找一个用户exchen,并取该用户的SID
- LookupAccountName(0, _T("exchen"), psid,&sidBufferSize, domainBuffer,&domainBufferSize, &snu);
- //设置该用户的Access-Allowed的ACE,其权限为“所有权限”
- AddAccessAllowedAce(pacl, ACL_REVISION, GENERIC_ALL, psid);
- //把ACL设置到SD中
- SetSecurityDescriptorDacl(&sd, TRUE, pacl, FALSE);
-
- //把SD放到文件安全结构SA中
- sa.nLength = sizeof(SECURITY_ATTRIBUTES);
- sa.bInheritHandle = FALSE;
- sa.lpSecurityDescriptor = &sd;
-
- //创建文件
- file = CreateFile(strFile, 0, 0, &sa, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
- CloseHandle(file);
-
- //CreateDirectory(_T("D:\\testfile"),&sa);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。