вторник, 24 апреля 2012 г.

Set DACL field of shared folder security descriptor using wmi C#


 var searcher = new ManagementObjectSearcher("\\\\.\\ROOT\\CIMV2", "SELECT * FROM Win32_LogicalShareSecuritySetting WHERE Name = \"Share\"");

                        var queryResult = searcher.Get();

                        foreach (ManagementObject findedItem in queryResult)
                        {
                            var caption = findedItem["Caption"];

                            InvokeMethodOptions options = new InvokeMethodOptions();

                            ManagementBaseObject outParamsMthd = findedItem.InvokeMethod("GetSecurityDescriptor", null, options);

                            ManagementBaseObject descriptor = outParamsMthd["Descriptor"] as ManagementBaseObject;

                            ManagementObject newAce = new ManagementClass(new ManagementScope("\\\\.\\ROOT\\CIMV2"), new ManagementPath("Win32_ACE"), null);

                            ManagementObject trustee = new ManagementClass(new ManagementScope("\\\\.\\ROOT\\CIMV2"), new ManagementPath("Win32_Trustee"), null);

                            trustee.Properties["SIDString"].Value = "S-1-5-32-544"; //Administrators

                            newAce.Properties["Trustee"].Value = trustee;

                            newAce.Properties["AccessMask"].Value = 262144; //delete

                            // Allow access to resource.
                            newAce.Properties["AceType"].Value = 0;

                            // ACL will be inherited.
                            newAce.Properties["AceFlags"].Value = 16;

                            // Add ACE to DACL and set to descriptor.
                            ArrayList daclArray = new ArrayList() { newAce };

                            descriptor.Properties["DACL"].Value = daclArray.ToArray();

                            ManagementBaseObject inParams = findedItem.GetMethodParameters("SetSecurityDescriptor");

                            inParams["Descriptor"] = descriptor;

                            var res = findedItem.InvokeMethod("SetSecurityDescriptor", inParams, null);

                            Int32 ReturnValue = Convert.ToInt32(res.Properties["ReturnValue"].Value);
                        }

Комментариев нет:

Отправить комментарий