public void test() { try { ConnectionOptions _ConnectionOptions = new ConnectionOptions(); _ConnectionOptions.Impersonation = ImpersonationLevel.Impersonate; _ConnectionOptions.Authentication = AuthenticationLevel.Packet; _ConnectionOptions.EnablePrivileges = true; _ConnectionOptions.Username = "******"; _ConnectionOptions.Password = "******"; //_ConnectionOptions.Authority = //_ConnectionOptions.Authentication = AuthenticationLevel.PacketPrivacy; ManagementPath _ManagementPath = new ManagementPath(@"\\10.10.53.26\root\cimv2"); ManagementScope Scope = new ManagementScope(_ManagementPath, _ConnectionOptions); Scope.Connect(); //ObjectGetOptions _ObjectGetOptions = new ObjectGetOptions(); //using (ManagementClass shares = new ManagementClass(@"\\10.10.53.26\root\cimv2", "Win32_Share", _ObjectGetOptions)) //{ // foreach (ManagementObject share in shares.GetInstances()) // { // Console.WriteLine(share["Name"]); // } //} ObjectQuery Query = new ObjectQuery("SELECT * FROM Win32_LogicalShareSecuritySetting"); ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query); ManagementObjectCollection QueryCollection = Searcher.Get(); foreach (ManagementObject SharedFolder in QueryCollection) { { String ShareName = (String)SharedFolder["Name"]; String Caption = (String)SharedFolder["Caption"]; String LocalPath = String.Empty; ManagementObjectSearcher Win32Share = new ManagementObjectSearcher("SELECT Path FROM Win32_share WHERE Name = '" + ShareName + "'"); foreach (ManagementObject ShareData in Win32Share.Get()) { LocalPath = (String)ShareData["Path"]; } ManagementBaseObject Method = SharedFolder.InvokeMethod("GetSecurityDescriptor", null, new InvokeMethodOptions()); ManagementBaseObject Descriptor = (ManagementBaseObject)Method["Descriptor"]; ManagementBaseObject[] DACL = (ManagementBaseObject[])Descriptor["DACL"]; foreach (ManagementBaseObject ACE in DACL) { ManagementBaseObject Trustee = (ManagementBaseObject)ACE["Trustee"]; // Full Access = 2032127, Modify = 1245631, Read Write = 118009, Read Only = 1179817 Console.WriteLine(ShareName); Console.WriteLine(Caption); Console.WriteLine(LocalPath); Console.WriteLine((String)Trustee["Domain"]); Console.WriteLine((String)Trustee["Name"]); Console.WriteLine((UInt32)ACE["AccessMask"]); Console.WriteLine((UInt32)ACE["AceType"]); } } } } catch (Exception ex) { Console.WriteLine(ex.StackTrace); //MessageBox.Show(ex.StackTrace, ex.Message); } }
/// <summary> /// Get a list of file shares on the current machine /// </summary> /// <returns></returns> public static string GetSharedFolderAccessRule() { DataTable DT = new DataTable(); StringBuilder sb = new StringBuilder(); try { DT.Columns.Add("ShareName"); DT.Columns.Add("Caption"); DT.Columns.Add("Path"); DT.Columns.Add("Domain"); DT.Columns.Add("User"); DT.Columns.Add("AccessMask"); DT.Columns.Add("AceType"); ManagementScope Scope = new ManagementScope(@"\\.\root\cimv2"); Scope.Connect(); ObjectQuery Query = new ObjectQuery("SELECT * FROM Win32_LogicalShareSecuritySetting"); ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query); ManagementObjectCollection QueryCollection = Searcher.Get(); foreach (ManagementObject SharedFolder in QueryCollection) { { String ShareName = (String)SharedFolder["Name"]; String Caption = (String)SharedFolder["Caption"]; String LocalPath = String.Empty; ManagementObjectSearcher Win32Share = new ManagementObjectSearcher("SELECT Path FROM Win32_share WHERE Name = '" + ShareName + "'"); foreach (ManagementObject ShareData in Win32Share.Get()) { LocalPath = (String)ShareData["Path"]; } ManagementBaseObject Method = SharedFolder.InvokeMethod("GetSecurityDescriptor", null, new InvokeMethodOptions()); ManagementBaseObject Descriptor = (ManagementBaseObject)Method["Descriptor"]; ManagementBaseObject[] DACL = (ManagementBaseObject[])Descriptor["DACL"]; foreach (ManagementBaseObject ACE in DACL) { ManagementBaseObject Trustee = (ManagementBaseObject)ACE["Trustee"]; // Full Access = 2032127, Modify = 1245631, Read Write = 118009, Read Only = 1179817 DataRow Row = DT.NewRow(); Row["ShareName"] = ShareName; Row["Caption"] = Caption; Row["Path"] = LocalPath; Row["Domain"] = (String)Trustee["Domain"]; Row["User"] = (String)Trustee["Name"]; Row["AccessMask"] = (UInt32)ACE["AccessMask"]; Row["AceType"] = (UInt32)ACE["AceType"]; DT.Rows.Add(Row); DT.AcceptChanges(); Append("ShareName", ShareName, sb); Append("Caption", Caption, sb); Append("Path", LocalPath, sb); Append("Domain", (String)Trustee["Domain"], sb); Append("User", (String)Trustee["Name"], sb); //Append("AccessMask", (UInt32)ACE["AccessMask"], sb); //Append("AceType", (UInt32)ACE["AceType"], sb); } } } } catch (Exception ex) { throw new Exception(ex.Message, ex); } //return DT; return(sb.ToString()); void Append(string s1, string s2, StringBuilder sb2) { sb2.Append(s1 + ": " + s2 + "\r\n"); } }
private DataTable GetSharedFolderAccessRule() { DataTable DT = new DataTable(); try { DT.Columns.Add("ShareName"); DT.Columns.Add("Caption"); DT.Columns.Add("Path"); DT.Columns.Add("Domain"); DT.Columns.Add("User"); DT.Columns.Add("AccessMask"); DT.Columns.Add("AceType"); ManagementScope Scope = new ManagementScope(@"\\.\root\cimv2"); Scope.Connect(); ObjectQuery Query = new ObjectQuery("SELECT * FROM Win32_LogicalShareSecuritySetting"); ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query); ManagementObjectCollection QueryCollection = Searcher.Get(); foreach (ManagementObject SharedFolder in QueryCollection) { { String ShareName = (String)SharedFolder["Name"]; String Caption = (String)SharedFolder["Caption"]; String LocalPath = String.Empty; ManagementObjectSearcher Win32Share = new ManagementObjectSearcher("SELECT Path FROM Win32_share WHERE Name = '" + ShareName + "'"); foreach (ManagementObject ShareData in Win32Share.Get()) { LocalPath = (String)ShareData["Path"]; } ManagementBaseObject Method = SharedFolder.InvokeMethod("GetSecurityDescriptor", null, new InvokeMethodOptions()); ManagementBaseObject Descriptor = (ManagementBaseObject)Method["Descriptor"]; ManagementBaseObject[] DACL = (ManagementBaseObject[])Descriptor["DACL"]; foreach (ManagementBaseObject ACE in DACL) { ManagementBaseObject Trustee = (ManagementBaseObject)ACE["Trustee"]; // Full Access = 2032127, Modify = 1245631, Read Write = 118009, Read Only = 1179817 DataRow Row = DT.NewRow(); Row["ShareName"] = ShareName; Row["Caption"] = Caption; Row["Path"] = LocalPath; Row["Domain"] = (String)Trustee["Domain"]; Row["User"] = (String)Trustee["Name"]; Row["AccessMask"] = (UInt32)ACE["AccessMask"]; Row["AceType"] = (UInt32)ACE["AceType"]; DT.Rows.Add(Row); DT.AcceptChanges(); } } } } catch (Exception ex) { MessageBox.Show(ex.StackTrace, ex.Message); } return(DT); }