Лучший способ разрешить отображение имени пользователя по SID?

StackOverflow https://stackoverflow.com/questions/380031

  •  22-08-2019
  •  | 
  •  

Вопрос

Я прочитал список SID из реестра, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList.

Как можно было бы разрешить отображаемое имя пользователя (например DOMAIN\user, BUILT-IN\user) задана строка SID в C #?

Это было полезно?

Решение

Функция Win32 API 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 .Найдите ACCOUNTSID

[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); 

Другие советы

Только что нашел это на 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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top