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);
            }
        }
Beispiel #2
0
        /// <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");
            }
        }
Beispiel #3
0
        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);
        }