通过SID解决显示用户名的最佳方法是什么?

我从registryHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList读取SID列表。

如何解决显示用户名(例如DOMAIN\userBUILT-IN\user )给定SIDstring在C#?

Win32 API函数LookupAccountSid()用于查找与SID对应的名称。

LookupAccountSid()具有以下签名:

 BOOL LookupAccountSid(LPCTSTR lpSystemName, PSID Sid,LPTSTR Name, LPDWORD cbName, LPTSTR ReferencedDomainName, LPDWORD cbReferencedDomainName, PSID_NAME_USE peUse); 

MSDN Ref 。

这是P / Invoke引用(带有示例代码): http : //www.pinvoke.net/default.aspx/advapi32.LookupAccountSid

 [DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError = true)] static extern bool LookupAccountSid ( string lpSystemName, [MarshalAs(UnmanagedType.LPArray)] byte[] Sid, StringBuilder lpName, ref uint cchName, StringBuilder ReferencedDomainName, ref uint cchReferencedDomainName, out SID_NAME_USE peUse); 

刚刚在pinvoke.net上找到它。

备用托管API:可在.Net 2.0中使用:

 using System.Security.Principal; // convert the user sid to a domain\name string account = new SecurityIdentifier(stringSid).Translate(typeof(NTAccount)).ToString();