修改文件(夹)的用户访问权限的程序代码

原文链接: http://www.cppblog.com/wrhwww/archive/2011/08/23/154117.html

一般Windows下的系统文件(夹)只让受限帐户读取而不让写入和修改。如果要开启写操作权限就需要手动修改文件(夹)的用户帐户安全权限(这操作当然要在管理员帐户下执行).以下用程序封装了一下该操作:

  先来个API版本:

  //

  // 启用某个账户对某个文件(夹)的所有操作权限

  // pszPath: 文件(夹)路径

  // pszAccount: 账户名称

  //

  BOOL  EnableFileAccountPrivilege (PCTSTR pszPath, PCTSTR pszAccount)

  {

  BOOL bSuccess = TRUE;

  PACL pNewDacl = NULL, pOldDacl = NULL;

  EXPLICIT_ACCESS ea;

  do

  {

  // 获取文件(夹)安全对象的DACL列表

  if (ERROR_SUCCESS != ::GetNamedSecurityInfo ((LPTSTR)pszPath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pOldDacl, NULL, NULL))

  {

  bSuccess  =  FALSE;

  break;

  }

  // 此处不可直接用AddAccessAllowedAce函数,因为已有的DACL长度是固定,必须重新创建一个DACL对象

  // 生成指定用户帐户的访问控制信息(这里指定赋予全部的访问权限)

  ::BuildExplicitAccessWithName (&ea, (LPTSTR)pszAccount, GENERIC_ALL, GRANT_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);

  // 创建新的ACL对象(合并已有的ACL对象和刚生成的用户帐户访问控制信息)

  if (ERROR_SUCCESS != ::SetEntriesInAcl(1, &ea, pOldDacl, &pNewDacl))

  {

  bSuccess   =  FALSE;

  break;

  }

  // 设置文件(夹)安全对象的DACL列表

  if (ERROR_SUCCESS != ::SetNamedSecurityInfo ((LPTSTR)pszPath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDacl, NULL))

  {

  bSuccess   =  FALSE;

  }

  } while (FALSE);

  // 释放资源

  if (pNewDacl != NULL)

  ::LocalFree(pNewDacl);

  return bSuccess;

  }

ATL封装了安全操作函数,用ATL来写就简单多了:

//

  // 启用某个账户对某个文件(夹)的所有操作权限(ATL版本)

  // pszPath: 文件(夹)路径

  // pszAccount: 账户名称

  //

  BOOL  AtlEnableFileAccountPrivilege (PCTSTR pszPath, PCTSTR pszAccount)

  {

  CDacl  dacl;

  CSid   sid;

  // 获取用户帐户标志符

  if (!sid.LoadAccount (pszAccount))

  {

  return FALSE;

  }

  // 获取文件(夹)的DACL

  if (!AtlGetDacl (pszPath, SE_FILE_OBJECT, &dacl))

  {

  return FALSE;

  }

  // 在DACL中添加新的ACE项

  dacl.AddAllowedAce (sid, GENERIC_ALL);

  // 设置文件(夹)的DACL

  return AtlSetDacl (pszPath, SE_FILE_OBJECT, dacl) ? TRUE : FALSE;

  }

时间: 2024-10-07 08:06:13

修改文件(夹)的用户访问权限的程序代码的相关文章

linux中如何修改文件夹的用户权限 chown命令

linux中,可以使用chown命令来修改文件夹的用户权限. 1.  以普通用户 A 登录linux,利用su -切换到root用户 2. 在root用户下,可以看到文件夹内容 3. 但通过文件系统,却无法打开 git 文件夹 提示无法显示远程文件夹(应该是权限不够) 这是因为,以普通用户 A 在命令行内切换到root用户后,文件系统的权限还是普通用户的权限,此时就需要修改文件夹的用户权限. 4.切换到文件夹所在的目录,使用chown命令,即可修改权限.(如果文件夹内还包含文件夹,那可以对cho

修改文件的所有者和访问权限

原文链接: http://www.pfmboy.com/post/100.html 下面代码修改文件的所有者为当前用户并添加everyone完全控制权限.注意一定要先设置一下所有者(owner),然后再进行权限设置,二者一起执行是不会成功的. BOOL AdjustPrivileges(LPWSTR lpName){ HANDLE hToken = NULL; TOKEN_PRIVILEGES tp = {0}; TOKEN_PRIVILEGES oldtp = {0}; DWORD dwSiz

c# 给文件/文件夹 管理用户权限

public class PermissionManager { /// <summary> /// 为文件添加users,everyone用户组的完全控制权限 /// </summary> /// <param name="filePath"></param> public static void AddSecurityControll2File(string filePath) { //获取文件信息 FileInfo fileInfo

C#修改文件夹权限

/// <summary> ///为文件夹添加users,everyone用户组的完全控制权限 /// </summary> /// <param name="dirPath"></param> static void AddSecurityControll2Folder(string dirPath) {    //获取文件夹信息    DirectoryInfo dir = new DirectoryInfo(dirPath);   

[添加用户]解决useradd 用户后没有添加用户Home目录的情况,Linux改变文件或目录的访问权限命令,linux修改用户密码,usermod的ysuum安装包。飞

usermod的yum安装包: shadow-utils 将nobody用户添加到nogroup 组: usermod -g nogroup nobody cat /etc/passwd|grep nobody nobody:x:65534:65534:nobody:/var/lib/nobody:/bin/bash 第3个字段是65534:意思就是,UID(用户的ID)是500. 第4个字段是65534:意思就是.GID(用户的组ID)的500. 使用usermod -g nogroup no

linux系统下修改文件夹目录权限

linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何修改Linux文件-文件夹权限.以主文件夹下的一个名为cc的文件夹为例. 下面一步一步介绍如何修改权限: 1.打开终端.输入su(没 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何修改Linux文件

ubuntu下修改文件夹权限

常用方法如下: sudo chmod 600 ××× (只有所有者有读和写的权限)sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限)sudo chmod 700 ××× (只有所有者有读和写以及执行的权限)sudo chmod 666 ××× (每个人都有读和写的权限)sudo chmod 777 ××× (每个人都有读和写以及执行的权限) 其中×××指文件名(也可以是文件夹名,不过要在chmod后加-ld). 解释一下,其实整个命令的形式是sudo chmod

【转】ubuntu下修改文件夹权限

常用方法如下: sudo chmod 600 ××× (只有所有者有读和写的权限)sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限)sudo chmod 700 ××× (只有所有者有读和写以及执行的权限)sudo chmod 666 ××× (每个人都有读和写的权限)sudo chmod 777 ××× (每个人都有读和写以及执行的权限) 其中×××指文件名(也可以是文件夹名,不过要在chmod后加-ld). 解释一下,其实整个命令的形式是sudo chmod

修改文件夹权限以及右键终端设置

ubuntu 14.04文件夹被锁定了怎么解 ls -ll看权限,然后chmod 777赋予权限,这就跟windows下的ntfs设置了用户权限一样,你没有访问这个目录的权限,自然不能创建文件了.如果对这两个命令不了解,可以man一下.man lsman chmod这样可以查看命令帮助. Ubuntu 14.04右键终端的设置 首先要安装一个包,即可在右键里面添加一个“打开终端”的菜单. sudo apt-get install nautilus-open-terminal 修改文件夹及其子文件