MSDN > 論壇首頁 > Visual Basic General > FileSystemAccessRule: everyone group
發問發問
 

提議的解答FileSystemAccessRule: everyone group

  • Tuesday, 29 May, 2007 15:46vistapolar 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     

    I am developping an installer class and I want to set specific permissions for all users. I know that this is possible with a code like this:

    Dim dirSec As New DirectorySecurity

    dirSec = Directory.GetAccessControl(dirPath)

    dirSec.AddAccessRule(New FileSystemAccessRule("Everyone", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit Or InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow))

    Directory.SetAccessControl(dirPath, dirSec)

     

    Unhopefully I need this code to be valid for computers with different InstalledUICulture. For instance I know that in German it is sufficient to replace "Everyone" with "Jeder". Is it possible to call a method that permits to generalize the code for every language of the operating system?

     

    Thanks in advance

所有回覆

  • Friday, 15 June, 2007 0:00TheArcticOwl 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     

     Hello !

    Use SID strings instead of  symbolic names like "Everyone", "BUILTIN\Users" etc.

    For "Everyone"     SID = "S-1-1-0".  You can look it (and other well known SIDs)   up in WinNT.h.

      AddAccessRule("S-1-1-0", ...,..);

    Also - here is a link to a helpful article --  http://support/microsoft.com/kb/243330.

    gl

  • Friday, 18 January, 2008 13:50satankidneypie 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     提議的解答
    This will give you the "Everyone" string that you require for each version of the OS e.g. English, German etc.              

    System.Security.Principal.SecurityIdentifier sid = new System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.WorldSid, null);
    System.Security.Principal.NTAccount acct = sid.Translate(typeof(System.Security.Principal.NTAccount)) as System.Security.Principal.NTAccount ;
    string strEveryoneAccount = acct.ToString();

    try
    {
    System.Security.AccessControl.FileSecurity sec = System.IO.File.GetAccessControl(FILENAME);
    sec.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule(
    strEveryoneAccount,
    System.Security.AccessControl.FileSystemRights.FullControl,
    System.Security.AccessControl.AccessControlType.Allow));
    File.SetAccessControl(FILENAME, sec);
    }
    catch(UnauthorizedAccessException)
    {
    // handle permissions problem
    }
    • 已提議為解答crashSmoke Thursday, 19 March, 2009 13:52
    •  
  • Thursday, 6 November, 2008 13:12commoduss 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     包含代碼

    thank you satankidneypie you saved my life

  • Monday, 9 March, 2009 18:53Steve_K 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    I am having trouble to get the below translated to VB.NET ... can someone help? TIA!


    System.Security.Principal.SecurityIdentifier sid = new System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.WorldSid, null);
    System.Security.Principal.NTAccount acct = sid.Translate(typeof(System.Security.Principal.NTAccount)) as System.Security.Principal.NTAccount ;
    string strEveryoneAccount = acct.ToString();

  • Tuesday, 10 March, 2009 7:47Steve_K 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    Nevermind ... got it:

            Dim sid As New System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.WorldSid, Nothing)
            Dim acct As System.Security.Principal.NTAccount = TryCast(sid.Translate(GetType(System.Security.Principal.NTAccount)), System.Security.Principal.NTAccount)
            Dim strEveryoneAccount As String = acct.ToString()
  • Thursday, 19 March, 2009 13:52crashSmoke 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    Awesomely helpful - thanks dude!!
    354 Errors.... must have missed a semi-colon somewhere