Welcome to MSDN Blogs Sign in | Join | Help

Marcelo's WebLog

Improving the world one entity at a time
Dealing with renamed/localized user/group names with managed code

If you are a regular reader of Michael Kaplan (I know I am), you might have run across his What's in a name? (once more) post. He comments on the use of localized account names and points to the KB 157234, How to deal with localized and renamed user and group names.

For those of you running on managed code, be happy - the code to get well-known accounts is much simpler. A little bit of SecurityIdentifer, a dash of WellKnownSidType, and you should be ready to go.

// Build with: %windir%\Microsoft.Net\Framework\v2.0.50727\csc.exe foo.cs
using System;
using System.Security.Principal;

class DoIt
{
  public static void Main(string[] args)
  {
    WellKnownSidType[] knownSids = new WellKnownSidType[] {
      WellKnownSidType.LocalServiceSid,
      WellKnownSidType.NetworkServiceSid,
      WellKnownSidType.LocalSystemSid,
      WellKnownSidType.BuiltinAdministratorsSid,
    };
    foreach(WellKnownSidType knownSid in knownSids)
    {
      SecurityIdentifier identifier = new SecurityIdentifier(knownSid, null);
      NTAccount account = (NTAccount)identifier.Translate(typeof(NTAccount));
      Console.WriteLine(knownSid.ToString() + " (" + identifier.Value + "): " + account.Value);
    }
  }
}

C:\>foo.exe
LocalServiceSid (S-1-5-19): NT AUTHORITY\LOCAL SERVICE
NetworkServiceSid (S-1-5-20): NT AUTHORITY\NETWORK SERVICE
LocalSystemSid (S-1-5-18): NT AUTHORITY\SYSTEM
BuiltinAdministratorsSid (S-1-5-32-544): BUILTIN\Administrators

Enjoy!

Posted: Tuesday, December 05, 2006 8:17 PM by marcelolr
Filed under: ,

Comments

No Comments

New Comments to this post are disabled
Page view tracker