Я прочитал список SID из реестра, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
.
Как можно разрешить отображаемое имя пользователя (например, DOMAIN\user
, BUILT-IN\user
) с учетом строки SID в C #?
Я прочитал список SID из реестра, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
.
Как можно разрешить отображаемое имя пользователя (например, DOMAIN\user
, BUILT-IN\user
) с учетом строки SID в C #?
Функция Win32 API LookupAccountSid()
< / a> используется для поиска имени, соответствующего 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);
Только что нашел его на 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();