2016-11-08 6 views
0

Функция LookupAccountSID() позволяет Win32API разрешить имя, соответствующее SID. Согласно документации: функции LookupAccountSid functionУстранение имени пользователя из SID с использованием только локальной информации

LookupAccountSid пытается найти имя для указанного SID по первой проверке списка известных УЛМ. Если поставляемый SID не соответствует известному SID, функция проверяет встроенные и административно определенные локальные учетные записи. Затем функция проверяет основной домен. Идентификаторы безопасности, не распознанные основным доменом, проверяются на доверенные домены, соответствующие их префиксам SID.

Есть ли способ поиска имени только локально? То есть, если имя не найдено на ПК, на котором вызывается функция, функция не работает, а не проверяет основной домен.

Edit: Чтобы было ясно, я хочу, чтобы разрешить имена нелокальных пользователей без доступа к основной домен (только проверка, если информация была сохранена локально)

+1

Вы можете инвертировать проблему: определить, является ли SID SID домена, и если да, не смотрите. SID домена - это те, которые начинаются с S-1-5-21, а затем * не * используют [идентификатор машины] (http://stackoverflow.com/questions/14113558/) для своего значения домена. Остаются встроенные учетные записи и локальные учетные записи. Отказ от ответственности: не проверен. –

+0

Проблема заключается в том, что я хочу искать информацию о пользователях домена, которые были сохранены локально. Если нелокальный пользователь вошел в систему в какой-то момент, LookupAccountSid вернет правильное имя, даже если компьютер находится в автономном режиме. – ggarcia24

+0

Это управляется кэшем LSA. Официального интерфейса к этому нет. Есть инструменты, которые могут сбрасывать его (например, mimikatz), но они, как правило, предназначены для взлома и не одобряются большинством сетевых администраторов. Какова ваша забота о поиске информации о домене - о том, что происходит сетевой трафик, о том, что поиск может занять много времени, что-то еще? Вы можете обработать тайм-аут, просто отменив поиск через небольшое время, когда локальный поиск никогда не будет превышать. –

ответ

0

Не уверен, если это то, что вы» повторно после того, но стоит выстрел:

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

Нет, при использовании SID пользователя домена, не присутствующего на локальном ПК, вышеуказанный код просматривает информацию в основном домене. В идеале, если SID не известен локально, код не должен подключаться к внешнему ресурсу. – ggarcia24

+0

Извините, у меня нет идей :( – peteski

0

Вы можете запросить Win32_UserAccount WMI class для локальных учетных записей с 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 
} 
+0

Дело в том, что я хочу получить информацию о нелокальных учетных записях. Вызов LookUpAccountSid() с SID пользователя домена, который вошел в систему в какой-то момент, возвращается успешно, даже если компьютер offline, который предполагает, что он хранится в кеше. – ggarcia24