MSDN > フォーラム ホーム > Visual Basic General > FileSystemAccessRule: everyone group
質問する質問する
 

回答の候補FileSystemAccessRule: everyone group

  • 2007年5月29日 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

すべての返信

  • 2007年6月15日 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

  • 2008年1月18日 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 2009年3月19日 13:52
    •  
  • 2008年11月6日 13:12commoduss ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     コードあり

    thank you satankidneypie you saved my life

  • 2009年3月9日 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();

  • 2009年3月10日 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()
  • 2009年3月19日 13:52crashSmoke ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    Awesomely helpful - thanks dude!!
    354 Errors.... must have missed a semi-colon somewhere