Greek Varak Ответов: 1

Как я могу получить(Добавить пользователя или удалить пользователя) список разрешений для общей папки ?


Я пытаюсь получить все разрешения доступа к общей папке ( Примечание : обратите внимание, что это не разрешения безопасности )

Но я могу получить все правила безопасности папки.

Что я уже пробовал:

Я попробовал следующие коды:

var directoryInfo = new DirectoryInfo(sharedFolderPath);
                var directorySecurity = directoryInfo.GetAccessControl();
                var currentUserIdentity = WindowsIdentity.GetCurrent();

                foreach (FileSystemAccessRule rule in directoryInfo.GetAccessControl().GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier)))
                {

                    
                }


Когда я пытаюсь просмотреть это для всех элементов . Я получаю все правила безопасности, а не список разрешений общей папки



Может ли кто-нибудь помочь мне в этом

1 Ответов

Рейтинг:
5

#realJSOP

Я нашел этот код с помощью простого поиска в google.

using System;
   using System.Management;

   ...

   private static void ShareSecurity(string ServerName)
   {
       ConnectionOptions myConnectionOptions = new  ConnectionOptions();

       myConnectionOptions.Impersonation = ImpersonationLevel.Impersonate;
       myConnectionOptions.Authentication = AuthenticationLevel.Packet;

       ManagementScope myManagementScope =
           new ManagementScope(@"\\" + ServerName + @"\root\cimv2", myConnectionOptions);

       myManagementScope.Connect();

       if (!myManagementScope.IsConnected)
           Console.WriteLine("could not connect");
       else
       {
           ManagementObjectSearcher myObjectSearcher =
               new ManagementObjectSearcher(myManagementScope.Path.ToString(), "SELECT * FROM Win32_LogicalShareSecuritySetting");

           foreach(ManagementObject share in myObjectSearcher.Get())
           {
               Console.WriteLine(share["Name"] as string);
               InvokeMethodOptions options = new InvokeMethodOptions();
               ManagementBaseObject outParamsMthd = share.InvokeMethod("GetSecurityDescriptor", null, options);
               ManagementBaseObject descriptor = outParamsMthd["Descriptor"] as ManagementBaseObject;
               ManagementBaseObject[] dacl =  descriptor["DACL"] as ManagementBaseObject[];

               foreach (ManagementBaseObject ace in dacl)
               {
                   try
                   {
                       ManagementBaseObject trustee = ace["Trustee"] as ManagementBaseObject;
                       Console.WriteLine(
                           trustee["Domain"] as string + @"\" + trustee["Name"] as string + ": " +
                           ace["AccessMask"] as string + " " + ace["AceType"] as string
                       );
                   }
                   catch (Exception error)
                   {
                       Console.WriteLine("Error: "+ error.ToString());
                   }
               }
           }
       }
   }


Greek Varak

Привет, Джон Симмонс . Большое вам спасибо, что он может получить список.
Можно ли отсюда удалить или добавить права пользователя ?

#realJSOP

Я предполагаю, что вам нужны разрешения "полного контроля" над общей папкой, о которой идет речь.

API, который вас интересует, вероятно, будет включать в себя Directory.SetAccessControl.

И снова Google-ваш друг.