Pregunta

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

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

¿Fue útil?

Solución

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

LookupAccountSid() tiene la firma siguiente:

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

Ref .

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

Otros consejos

lo encontramos en la pinvoke.net .

Alternativa API Gestionado: 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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top