Лучший способ разрешить отображение имени пользователя по SID? Я прочитал список SID из реестра, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList. Как разрешить имя пользователя дисплея (например, DOMAIN\user, BUILT-IN\user), учитывая строку SID на С#? Ответ 1 Функция API Win32 LookupAccountSid() используется для поиска имени, соответствующего SID. LookupAccountSid() имеет следующую подпись: BOOL LookupAccountSid(LPCTSTR lpSystemName, PSID Sid,LPTSTR Name, LPDWORD cbName, LPTSTR ReferencedDomainName, LPDWORD cbReferencedDomainName, PSID_NAME_USE peUse); MSDN Ссылка. Здесь ссылка P/Invoke (с примером кода): 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); Ответ 2 Просто нашел его на pinvoke.net. Альтернативный управляемый API: Доступно в .Net 2.0: using System.Security.Principal; // convert the user sid to a domain\name string account = new SecurityIdentifier(stringSid).Translate(typeof(NTAccount)).ToString();
Ответ 1 Функция API Win32 LookupAccountSid() используется для поиска имени, соответствующего SID. LookupAccountSid() имеет следующую подпись: BOOL LookupAccountSid(LPCTSTR lpSystemName, PSID Sid,LPTSTR Name, LPDWORD cbName, LPTSTR ReferencedDomainName, LPDWORD cbReferencedDomainName, PSID_NAME_USE peUse); MSDN Ссылка. Здесь ссылка P/Invoke (с примером кода): 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);
Ответ 2 Просто нашел его на pinvoke.net. Альтернативный управляемый API: Доступно в .Net 2.0: using System.Security.Principal; // convert the user sid to a domain\name string account = new SecurityIdentifier(stringSid).Translate(typeof(NTAccount)).ToString();