CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请问如何获取共享目录对各个用户(组)的权限信息

楼主shootingstars(有容乃大,无欲则刚)2006-03-09 10:07:49 在 VC/MFC / 基础类 提问

可以使用NetShareEnum获得各个共享目录的安全描述符,但是我如何从这个安全描述符获取对应每个用户的权限(可写,可读和完全)信息? 问题点数:200、回复次数:13Top

1 楼nkwesley(江南丝竹)回复于 2006-03-09 10:28:41 得分 0

学习,支持Top

2 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-09 10:42:24 得分 0

you   need   to   do   this   at   server   sideTop

3 楼shootingstars(有容乃大,无欲则刚)回复于 2006-03-09 10:52:40 得分 0

呵呵,jiangsheng(蒋晟.Net[MVP])   来了就好。  
   
  我写了如下代码:  
  ret   =   GetSecurityDescriptorDacl(p->shi502_security_descriptor,   &preBool,   &pacl,   &defaultBool);   //   p为PSHARE_INFO_502  
  ACCESS_MASK   mask;  
  TRUSTEE   trustee;  
  LPTSTR   groupname   =   "Administrator";  
  trustee.pMultipleTrustee   =   NULL;  
  trustee.MultipleTrusteeOperation   =   NO_MULTIPLE_TRUSTEE;  
  trustee.TrusteeForm   =   TRUSTEE_IS_NAME;  
  trustee.TrusteeType   =   TRUSTEE_IS_USER;  
  trustee.ptstrName   =   groupname;  
   
  DWORD   dret   =   GetEffectiveRightsFromAcl(pacl,   &trustee,   &mask);  
  if(dret   !=   ERROR_SUCCESS)  
            return;  
   
  if(mask   &   GENERIC_READ)  
  {  
            ShowMessage("Administrator   has   read   right");  
  }  
   
  似乎感觉没有错误,运行所有函数都返回正确结果....可是与实际情况不符(Administraotor有读权限)  
   
   
   
  Top

4 楼shootingstars(有容乃大,无欲则刚)回复于 2006-03-09 10:54:40 得分 0

我在蒋大哥的blog上找到了设置共享权限的代码,可是自己用起来还是不太清楚。。。  
   
  我在上面贴的代码有什么问题吗?Top

5 楼shootingstars(有容乃大,无欲则刚)回复于 2006-03-09 10:56:23 得分 0

我需要获取的是本机的权限。不是网络上其他计算机的共享目录的权限。Top

6 楼shootingstars(有容乃大,无欲则刚)回复于 2006-03-09 11:17:50 得分 0

。。。请各位兄弟帮帮忙。。。。Top

7 楼shootingstars(有容乃大,无欲则刚)回复于 2006-03-09 11:41:35 得分 0

继续顶。。。@_@Top

8 楼laiyiling(陌生人[MVP])回复于 2006-03-09 12:07:15 得分 0

试试用LogonUser->ImpersonateLoggedOnUser模拟用户登陆后判断Top

9 楼shootingstars(有容乃大,无欲则刚)回复于 2006-03-09 12:31:21 得分 0

To   laiyiling(【CSDN●目标】)    
            LogonUser需要用户名和密码,这些东西我不太可能知道。。。(一个机器上会有n多用户)  
            而且模拟了用户以后呢?  
   
  最主要的问题是我得到的安全描述符如何与权限相对应?Top

10 楼chehw(chehw)回复于 2006-03-09 12:58:10 得分 200

GetSecurityDescriptorDacl之后  
  1、调用GetAclInformation获得ACL的Entry个数,    
  2、再调用GetAce获取每个"access   control   entry"的指针,(ACCESS_ALLOWED_ACE   *),   根据(ACCESS_ALLOWED_ACE   *)pACE->mask判断访问权限  
  3、调用LookupAccountSid(NULL,   pACE->SidStart,   ...);根据pACE->SidStart查找SID,获取用户及组信息.Top

11 楼shootingstars(有容乃大,无欲则刚)回复于 2006-03-09 13:30:52 得分 0

To   chehw(chehw)  
          非常感谢。  
   
  我使用了下面的代码:  
  char   Buf[10000];  
  ret   =   GetAclInformation(pacl,   Buf,   10000,   AclSizeInformation);  
  ACL_SIZE_INFORMATION   *pcount;  
  pcount   =   (ACL_SIZE_INFORMATION   *)Buf;  
  for(DWORD   i=0;i<pcount->AceCount;i++)  
  {  
          LPVOID   pace;  
          ret   =   GetAce(pacl,   i,   &pace);  
          if(   ((ACCESS_ALLOWED_ACE   *)pace)->Mask   &   GENERIC_WRITE)  
          {  
                    printf("write   right\n");  
          }  
  }  
   
  判断一个ace是否拥有写权限是这样判断吗?  
  ((ACCESS_ALLOWED_ACE   *)pace)->Mask   &   GENERIC_WRITE  
  可是为什么我获得的所有的Mask的高8位全都是0呢?(我已经给这个目录增加了两个用户拥有写权限)Top

12 楼chehw(chehw)回复于 2006-03-09 13:52:29 得分 0

应判断standard   access   rights(16-23bit);  
  高8位中前四位是设置权限时为简化代码而用的,   设置时自动映射至16-23bit的标准访问权限中,后4位是保留位。  
   
  The   Windows   API   also   defines   the   following   combinations   of   the   standard   access   rights   constants.  
   
  Constant   Meaning    
  STANDARD_RIGHTS_ALL   Combines   DELETE,   READ_CONTROL,   WRITE_DAC,   WRITE_OWNER,   and   SYNCHRONIZE   access.    
  STANDARD_RIGHTS_EXECUTE   Currently   defined   to   equal   READ_CONTROL.    
  STANDARD_RIGHTS_READ   Currently   defined   to   equal   READ_CONTROL.    
  STANDARD_RIGHTS_REQUIRED   Combines   DELETE,   READ_CONTROL,   WRITE_DAC,   and   WRITE_OWNER   access.    
  STANDARD_RIGHTS_WRITE   Currently   defined   to   equal   READ_CONTROL.    
  Top

13 楼shootingstars(有容乃大,无欲则刚)回复于 2006-03-09 14:00:55 得分 0

To   chehw(chehw)  
  非常感谢。  
  已经解决。。。稍后接贴。。。Top

相关问题

  • 共享目录权限的问题
  • 如何修改Win2K/XP/2003下共享目录的权限,急~~~
  • 如何用C++获取目录的读写权限?
  • VSS安全何在?安装时,是目录共享的,目录都全部共享出来了,还有什么权限可言?
  • NT4.0/Win2K下如何设置共享目录的权限,使不登录网络的win98系统也可以访问?
  • 如何获取共享文件夹的组和用户名称和该组或用户的权限?
  • 请高手帮忙,如何获取网络上共享文件夹对某一用户的权限的设定。
  • 虚拟目录权限
  • 如何打开网上邻居机器的共享目录,并读写文件(目录设置了密码,我有正确的密码和权限)
  • 域用户、权限、共享

关键词

  • 用户
  • 代码
  • access
  • ace
  • 安全
  • 信息
  • 权限
  • trustee
  • chehw
  • pace

得分解答快速导航

  • 帖主:shootingstars
  • chehw

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo