Разрешить имя пользователя из SID, используя только локальную информацию
Функция Win32API LookupAccountSID() позволяет разрешить имя, соответствующее SID. Согласно документации: функция LookupAccountSid
Функция LookupAccountSid пытается найти имя для указанного SID, сначала проверив список известных SID. Если предоставленный SID не соответствует общеизвестному SID, функция проверяет встроенные и административно определенные локальные учетные записи. Далее функция проверяет основной домен. Идентификаторы безопасности, не распознаваемые основным доменом, проверяются по доверенным доменам, которые соответствуют их префиксам SID.
Есть ли способ искать имя только локально? То есть, если имя не найдено на ПК, на котором вызывается функция, она завершается ошибкой вместо проверки основного домена.
Изменить: чтобы было понятно, я хочу разрешить имена нелокальных пользователей, не обращаясь к основному домену (проверяя только, была ли информация сохранена локально)
2 ответа
Вы можете запросить Win32_UserAccount
Класс WMI для локальных учетных записей с соответствующим SID - если ничего не возвращается, учетная запись не существует на локальном компьютере:
$SID = 'S-1-5-21-510807130-1270608819-2073245338-500'
if($user = Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True' AND SID = '$SID'")
{
$user.Name
}
Не уверен, что это то, что вам нужно, но стоит попробовать:
byte[] sid = // your SID byte array
// Convert SID byte array to readable SID string
var sidString = (new SecurityIdentifier(sid, 0)).Value;
var securityIdentifier = new SecurityIdentifier(sidString);
var identity = securityIdentifier.Translate(typeof(NTAccount)).Value;
// ... identity should be domain\user (string)