Il modo migliore per risolvere visualizzazione nome utente da SID?
Domanda
Ho letto un elenco di SID dal Registro di sistema, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
.
Come si potrebbe risolvere il nome utente di visualizzazione (ad esempio DOMAIN\user
, BUILT-IN\user
) dando la stringa SID in C #?
Soluzione
La funzione API Win32 LookupAccountSid()
viene utilizzato per trovare il nome che corrisponde a un SID.
LookupAccountSid()
ha la seguente firma:
BOOL LookupAccountSid(LPCTSTR lpSystemName, PSID Sid,LPTSTR Name, LPDWORD cbName,
LPTSTR ReferencedDomainName, LPDWORD cbReferencedDomainName,
PSID_NAME_USE peUse);
Rif .
Ecco il P / Invoke di riferimento (con il codice di esempio): 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);
Altri suggerimenti
appena trovato sul pinvoke.net .
Alternativa API gestito: Disponibile 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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow