c# windows sid

c# - ¿La mejor manera de resolver el nombre de usuario de visualización por SID?



windows (2)

Leí una lista de SID del registro, HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/ProfileList .

¿Cómo se resolvería el nombre de usuario de la pantalla (por ejemplo, DOMAIN/user , BUILT-IN/user ) dada la cadena de SID en C #?


La función API de Win32 LookupAccountSid() se utiliza para encontrar el nombre que corresponde a un SID.

LookupAccountSid() tiene la siguiente firma:

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

MSDN Ref .

Aquí está la referencia de P / Invoke (con código de muestra): 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);


Acabo de encontrarlo en el pinvoke.net .

API administrada alternativa: disponible en .Net 2.0:

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