Der beste Weg, Anzeige Benutzername von SID zu lösen?
Frage
Ich las eine Liste von SIDs aus der Registrierung, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
.
Wie würde man die Anzeige Benutzernamen (z DOMAIN\user
, BUILT-IN\user
) lösen die SID-Zeichenfolge in C # gegeben?
Lösung
Die Win32-API-Funktion LookupAccountSid()
wird verwendet, um den Namen zu finden, die zu einem SID entspricht.
LookupAccountSid()
hat die folgende Signatur:
BOOL LookupAccountSid(LPCTSTR lpSystemName, PSID Sid,LPTSTR Name, LPDWORD cbName,
LPTSTR ReferencedDomainName, LPDWORD cbReferencedDomainName,
PSID_NAME_USE peUse);
Ref .
Hier ist die P / Invoke Referenz (mit Beispielcode): 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);
Andere Tipps
fand es einfach auf der pinvoke.net .
Alternative Managed API: Erhältlich 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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow