zoukankan      html  css  js  c++  java
  • How to set Directory share permission to erveryone via C#

    1 ) Set Access Control

    DirectoryInfo dInfo = new DirectoryInfo(fileName);
    DirectorySecurity dSecurity = dInfo.GetAccessControl();
    dSecurity.AddAccessRule(new FileSystemAccessRule("everyone",FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly,AccessControlType.Allow));
    dInfo.SetAccessControl(dSecurity);
    
    

    2) Sharing foldel

    ManagementClass mc = new ManagementClass("win32_share");
    ManagementBaseObject inParams = mc.GetMethodParameters("Create");
    inParams("Description") = "My Shared Folder";
    inParams("Name") = "Shared Folder Name";
    inParams("Path") = "C:\Folder1";
    inParams("Type") = ShareResourceType.DiskDrive;
    inParams("MaximumAllowed") = null;
    inParams("Password") = null;
    inParams("Access") = null; // Make Everyone has full control access.
    ManagementBaseObject outParams = classObj.InvokeMethod("Create", inParams, null);
    
    

    3) Only in Windows 7 and Vista, upgrade "Everyone" sharing right

    //user selection
    NTAccount ntAccount = new NTAccount("Everyone");
    
    //SID
    SecurityIdentifier userSID = (SecurityIdentifier)ntAccount.Translate(typeof(SecurityIdentifier));
    byte[] utenteSIDArray = new byte[userSID.BinaryLength];
    userSID.GetBinaryForm(utenteSIDArray, 0);
    
    //Trustee
    ManagementObject userTrustee = new ManagementClass(new ManagementPath("Win32_Trustee"), null);
    userTrustee["Name"] = "Everyone";
    userTrustee["SID"] = utenteSIDArray;
    
    //ACE
    ManagementObject userACE = new ManagementClass(new ManagementPath("Win32_Ace"), null);
    userACE["AccessMask"] = 2032127;                                 //Full access
    userACE["AceFlags"] = AceFlags.ObjectInherit | AceFlags.ContainerInherit;
    userACE["AceType"] = AceType.AccessAllowed;
    userACE["Trustee"] = userTrustee;
    
    ManagementObject userSecurityDescriptor = new ManagementClass(new ManagementPath("Win32_SecurityDescriptor"), null);
    userSecurityDescriptor["ControlFlags"] = 4; //SE_DACL_PRESENT 
    userSecurityDescriptor["DACL"] = new object[] { userACE };
    
    //UPGRADE SECURITY PERMISSION
    ManagementClass mc = new ManagementClass("Win32_Share");
    ManagementObject share = new ManagementObject(mc.Path + ".Name='" + CondivisionName + "'");
    share.InvokeMethod("SetShareInfo", new object[] { Int32.MaxValue, description, userSecurityDescriptor });
    

    This allow me to upgrade the security permission of "Everyone" in Windows Vista & 7 and get "Full Control".

     /*
              * This method is used to perform the main actions of sharing the folders
              * It accepts three arguments: -
              * A path of the folder,
              * A ShareName by which you would want to share the folder
              * Description of the folder
              * You cannot have the first two arguments as empty. They should consist of 
              * data. The third arguments can be an empty string.
              */
             private static void QshareFolder(string FolderPath, string ShareName, string Description)
             {
                 try
                 {
                     // Create a ManagementClass object
                     ManagementClass managementClass = new ManagementClass("Win32_Share");
    
                     // Create ManagementBaseObjects for in and out parameters
                     ManagementBaseObject inParams = managementClass.GetMethodParameters("Create");
                     ManagementBaseObject outParams;
    
                     // Set the input parameters
                     inParams["Description"] = Description;
                     inParams["Name"] = ShareName;
                     inParams["Path"] = FolderPath;
                     inParams["Type"] = 0x0; // Disk Drive
                     //Another Type:
                     //        DISK_DRIVE = 0x0
                     //        PRINT_QUEUE = 0x1
                     //        DEVICE = 0x2
                     //        IPC = 0x3
                     //        DISK_DRIVE_ADMIN = 0x80000000
                     //        PRINT_QUEUE_ADMIN = 0x80000001
                     //        DEVICE_ADMIN = 0x80000002
                     //        IPC_ADMIN = 0x8000003
                     inParams["MaximumAllowed"] = null;
                     inParams["Password"] = null;
                     inParams["Access"] = null; // Make Everyone has full control access.                
                     //inParams["MaximumAllowed"] = int maxConnectionsNum;
    
                     // Invoke the method on the ManagementClass object
                     outParams = managementClass.InvokeMethod("Create", inParams, null);
                     // Check to see if the method invocation was successful
                     if ((uint)(outParams.Properties["ReturnValue"].Value) != 0)
                     {
                         //MessageBox.Show ("Unable to share the folder: " + outParams.Properties["ReturnValue"].Value);
                         MessageBox.Show("Error sharing MMS folders. Please make sure you install as Administrator.", "Error!");
                     }
    
                     //user selection
                     NTAccount ntAccount = new NTAccount("Everyone");
    
                     //SID
                     SecurityIdentifier userSID = (SecurityIdentifier)ntAccount.Translate(typeof(SecurityIdentifier));
                     byte[] utenteSIDArray = new byte[userSID.BinaryLength];
                     userSID.GetBinaryForm(utenteSIDArray, 0);
    
                     //Trustee
                     ManagementObject userTrustee = new ManagementClass(new ManagementPath("Win32_Trustee"), null);
                     userTrustee["Name"] = "Everyone";
                     userTrustee["SID"] = utenteSIDArray;
    
                     //ACE
                     ManagementObject userACE = new ManagementClass(new ManagementPath("Win32_Ace"), null);
                     userACE["AccessMask"] = 2032127;                                 //Full access
                     userACE["AceFlags"] = AceFlags.ObjectInherit | AceFlags.ContainerInherit;
                     userACE["AceType"] = AceType.AccessAllowed;
                     userACE["Trustee"] = userTrustee;
    
                     ManagementObject userSecurityDescriptor = new ManagementClass(new ManagementPath("Win32_SecurityDescriptor"), null);
                     userSecurityDescriptor["ControlFlags"] = 4; //SE_DACL_PRESENT 
                     userSecurityDescriptor["DACL"] = new object[] { userACE };
                     //can declare share either way, where "ShareName" is the name used to share the folder
                     //ManagementPath path = new ManagementPath("Win32_Share.Name='" + ShareName + "'");
                     //ManagementObject share = new ManagementObject(path);
                     ManagementObject share = new ManagementObject(managementClass.Path + ".Name='" + ShareName + "'");
    
                     share.InvokeMethod("SetShareInfo", new object[] { Int32.MaxValue, Description, userSecurityDescriptor });
    
                 }
                 catch (Exception ex)
                 {
                     MessageBox.Show("Error sharing folders. Please make sure you install as Administrator. ERROR: " + ex.Message, "Error!");
                 }
             }
             /*
              * this method is called as soon the app is started.
              * this method gets the current directory of the application,
              * calls another method which creates and shares the apps and logs folders
              * under the current directory. 
              */
             private static void Share()
             {
                 string strfol;
                 string folder;
                 string newFolder;
                 DirectoryInfo di;
                 try
                 {
                     strfol = Application.ExecutablePath;
                     strfol = strfol.Substring(0,strfol.IndexOf(Application.ProductName + ".EXE"));
                     newFolder = "apps";
                     folder = strfol + newFolder;
                     if (!Directory.Exists(folder))
                         Directory.CreateDirectory(folder);
                     di = new DirectoryInfo(folder);
                     DirectorySecurity dSecurity = di.GetAccessControl();
                     dSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
                     di.SetAccessControl(dSecurity);
                     if (di != null)
                         QshareFolder(folder, newFolder, "");
                 }
                 catch (Exception ex)
                 {
                     MessageBox.Show("Error sharing folders. Please make sure you install as Administrator. ERROR: " + ex.Message, "Error!");
                 }
    
             }

    转: http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/de213b61-dc7e-4f33-acdb-893aa96837fa/c-set-directory-sharing-permission-full-control-for-everyone-programmatically-in-windows-7-or

  • 相关阅读:
    selenium webdriver 的环境搭建时注意事项
    python之文件处理
    python的if语句、while循环、for循环
    mysql从库Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'报错处理
    openstack之keystone部署
    网关协议
    HTTP协议
    Openstack keystone组件详解
    jboss服务启动失败报:Error occurred during initialization of VM
    python字典的常用操作
  • 原文地址:https://www.cnblogs.com/Blackeye286/p/3208085.html
Copyright © 2011-2022 走看看