惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy International News Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
O
OpenAI News
Cloudbric
Cloudbric
Google Online Security Blog
Google Online Security Blog
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Spread Privacy
Spread Privacy
NISL@THU
NISL@THU
N
News and Events Feed by Topic
T
Tenable Blog
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
P
Proofpoint News Feed
Webroot Blog
Webroot Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Jina AI
Jina AI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
L
LangChain Blog
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东

博客园 - dannyr|一个都不能少!

DipperRiver.Net通信协议设计 计划开发memcache 的.net版本,命名DipperRiver.Net Access数据库的文本、备注数据类型的COLUMN_FLAGS说明 生命诚可贵 如何关闭子线程?征集析构函数与多线程的讨论! function object(functor) ... Dev GridControl的Outlook风格定制 WinForm MDI动态加载form DevExpress's tip 检测浏览器类型的js Spry1.4 下载 Spry PreRelease 1.4 发布 Spry Framework入门(五)——数据集过滤及淡入淡出效果 Flex2.0文件上传功能(Flex2.0正式版) 关于JSON Spry Framework入门(四)——XML数据集排序 Spry Framework入门(三)——框架结构 Spry Framework入门(二)——XML数据集及主从表显示 Spry Framework入门(一)——XML数据集及显示
Net1.1添加目录共享,并设置访问权限
dannyr|一个都不能少! · 2008-06-20 · via 博客园 - dannyr|一个都不能少!

Net1.1没有专门封装好的WIN32管理类(2.0就方便多了),分享一下目录共享及权限的方法(网上找了许多都是文不对题的)

权限定义:
[Flags]
   public enum AccessPrivileges : uint{
   FILE_READ_DATA = 0x00000001,
   FILE_WRITE_DATA = 0x00000002,
   FILE_APPEND_DATA = 0x00000004,
   FILE_READ_EA = 0x00000008,
   FILE_WRITE_EA = 0x00000010,
   FILE_EXECUTE = 0x00000020,
   FILE_DELETE_CHILD = 0x00000040,
   FILE_READ_ATTRIBUTES = 0x00000080,
   FILE_WRITE_ATTRIBUTES  = 0x00000100,

   DELETE = 0x00010000,
   READ_CONTROL = 0x00020000,
   WRITE_DAC = 0x00040000,
   WRITE_OWNER = 0x00080000,
   SYNCHRONIZE = 0x00100000,

   ACCESS_SYSTEM_SECURITY = 0x01000000,
   MAXIMUM_ALLOWED = 0x02000000,
   
   GENERIC_ALL = 0x10000000,
   GENERIC_EXECUTE= 0x20000000,
   GENERIC_WRITE = 0x40000000,
   GENERIC_READ = 0x80000000
  }

  [Flags]
   enum AceFlags : uint{
   NonInheritAce = 0,
   ObjectInheritAce = 1,
   ContainerInheritAce = 2,
   NoPropagateInheritAce = 4,
   InheritOnlyAce = 8,
   InheritedAce = 16
  }

  [Flags]
   enum AceType : uint{
   AccessAllowed = 0,
   AccessDenied = 1,
   Audit = 2
  }

流程:

//设置Everyone用户,可以选择其他用户或新建用户
   ManagementClass trustee = new ManagementClass("Win32_Trustee");
   trustee.Properties["Name"].Value = "Everyone";
   trustee.Properties["Domain"].Value = null;
   trustee.Properties["SID"].Value = new byte[]{1,1,0,0,0,0,0,1,0,0,0,0};

//设置只读/运行权限
   ManagementClass ace = new ManagementClass("Win32_ACE");
   ace.Properties["AccessMask"].Value = AccessPrivileges.GENERIC_READ
    | AccessPrivileges.FILE_READ_DATA | AccessPrivileges.FILE_READ_ATTRIBUTES | AccessPrivileges.FILE_READ_EA
    | AccessPrivileges.READ_CONTROL | AccessPrivileges.FILE_EXECUTE;
   ace.Properties["AceFlags"].Value = 3;//AceFlags.ObjectInheritAce | AceFlags.ContainerInheritAce ;
   ace.Properties["AceType"].Value = 0;//AceType.AccessAllowed;
   ace.Properties["Trustee"].Value = trustee;

//修改ACL设置
   ManagementObject secDescriptor = new ManagementClass("Win32_SecurityDescriptor");
   secDescriptor["ControlFlags"] = 4;
   secDescriptor["DACL"] = new ManagementObject[] { ace };


   //设置添加共享
   ManagementClass mc = new ManagementClass("win32_share");
   ManagementBaseObject inParams = mc.GetMethodParameters("Create");
   inParams["Path"] = "f:\\dannyr";
   inParams["Name"] = "share of dannyr";
   inParams["Type"] = 0x0;
   inParams["MaximumAllowed"] = null;      //=null 则用户数连接无限制
   inParams["Description"] = null;
   inParams["Password"] = null;
   inParams["Access"] = secDescriptor;  //=null 则使Everyone拥有完全控制权限

   ManagementBaseObject outParams = mc.InvokeMethod("Create", inParams, null);
   uint returnValue = (uint)outParams.Properties["ReturnValue"].Value;
   string ErrorMessage = null;
   switch (returnValue)
   {
    case 0: //Success
     break;
    case 2: //Access denied
     ErrorMessage = "无权访问";
     break;
    case 8: //Unknown failure
     ErrorMessage = "未知错误";
     break;
    case 9: //Invalid name
     ErrorMessage = "非法的共享名";
     break;
    case 10: //Invalid level
     ErrorMessage = "非法的层次";
     break;
    case 21: //Invalid parameter
     ErrorMessage = "非法的参数";
     break;
    case 22: //Duplicate share
     ErrorMessage = "重复共享";
     break;
    case 23: //Redirected path
     ErrorMessage = "重定向路径";
     break;
    case 24: //Unknown device or directory
     ErrorMessage = "未知的目录";
     break;
    case 25: //Net name not found
     ErrorMessage = "网络名不存在";
     break;
    default:
     break;
   }