2008-12-19 4 views

Antwort

9

Die Win32-API-Funktion LookupAccountSid() wird verwendet, um den Namen zu finden, der einer 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); 

MSDN 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); 
+0

Gibt es eine andere Möglichkeit, es zu tun, ohne p mit/aufrufen in C#? –

+0

@DennisC können Sie es ohne P/Invoke tun. Bitte sehen Sie meine Antwort: http://StackOverflow.com/questions/7593005/convert-sid-to-username-in-c-sharp/7593200 –

+0

@EriawanKusumawardhono Ich denke, Sie können die Fragen nicht sehr gut lesen. Weil sie genau entgegengesetzt sind API –

26

fand es einfach auf den 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(); 
+0

Diese Lösung ist nicht in allen Situationen zuverlässig. Es gibt manchmal SIDs, die nicht übersetzt werden können, und dies wird eine Ausnahme auslösen. Ich habe LookupAccountSid() als zuverlässiger gefunden. –