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();