I read a list of SID from the registry, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList.
How to resolve the display username (e.g. DOMAIN\user, BUILDIN\user) by a given SID string in C#?
I read a list of SID from the registry, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList.
How to resolve the display username (e.g. DOMAIN\user, BUILDIN\user) by a given SID string in C#?
The Win32 API function LookupAccountSid() is used to find the name that corresponds to a SID.
LookupAccountSid() has the following signature:
BOOL LookupAccountSid(LPCTSTR lpSystemName, PSID Sid,LPTSTR Name, LPDWORD cbName,
LPTSTR ReferencedDomainName, LPDWORD cbReferencedDomainName,
PSID_NAME_USE peUse);
MSDN Ref.
Here's the P/Invoke reference (with sample code): http://www.pinvoke.net/default.aspx/advapi32.LookupAccountSid
Just found it on the pinvoke.net.
Alternative Managed API: Available in .Net 2.0:
using System.Security.Principal;
// convert the user sid to a domain\name
string account = new SecurityIdentifier(stringSid).Translate(typeof(NTAccount)).ToString();