Поделиться через


Функция LsaLookupSids2 (ntsecapi.h)

Функция LsaLookupSids2 ищет имена, которые соответствуют массиву идентификаторов безопасности (SID) и поддерживают удостоверения интернет-поставщиков. Если LsaLookupSids2 не удается найти имя, соответствующее идентификатору безопасности, функция возвращает идентификатор безопасности в символьной форме. Эту функцию следует использовать вместо функции LsaLookupSids .

Синтаксис

NTSTATUS LsaLookupSids2(
  [in]  LSA_HANDLE                  PolicyHandle,
  [in]  ULONG                       LookupOptions,
  [in]  ULONG                       Count,
  [in]  PSID                        *Sids,
  [out] PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,
  [out] PLSA_TRANSLATED_NAME        *Names
);

Параметры

[in] PolicyHandle

Дескриптор объекта Policy . Этот дескриптор должен иметь право доступа POLICY_LOOKUP_NAMES. Дополнительные сведения см. в разделе Открытие дескриптора объекта политики.

[in] LookupOptions

Флаги, которые изменяют поведение поиска.

Значение Значение
LSA_LOOKUP_DISALLOW_CONNECTED_ACCOUNT_INTERNET_SID
Идентификаторы безопасности Интернета от поставщиков удостоверений для подключенных учетных записей запрещены. Подключенные учетные записи — это учетные записи, имеющие соответствующую теневую учетную запись в локальной базе данных SAM, подключенную к сетевому поставщику удостоверений. Например, MicrosoftAccount — это подключенная учетная запись.
LSA_LOOKUP_PREFER_INTERNET_NAMES
Возвращает имена в Интернете. В противном случае возвращается имя стиля NT4 (домен\имя_пользователя). Исключением является, если указан идентификатор безопасности Интернета учетной записи Майкрософт. В этом случае возвращается имя Интернета, если не указано LSA_LOOKUP_DISALLOW_NON_WINDOWS_INTERNET_SID .
LSA_LOOKUP_RETURN_LOCAL_NAMES
Всегда возвращает имена локальных учетных записей SAM даже для удостоверений интернет-поставщиков.

[in] Count

Указывает количество идентификаторов безопасности в массиве Sids . Это также количество записей, возвращаемых в массиве Names . Это значение должно быть меньше или равно 20480.

[in] Sids

Указатель на массив указателей sid для поиска. Идентификаторы безопасности могут быть хорошо известными идентификаторами безопасности, идентификаторами безопасности пользователей, групп или локальных групп учетных записей или идентификаторами безопасности домена.

[out] ReferencedDomains

Получает указатель на указатель на структуру LSA_REFERENCED_DOMAIN_LIST . Элемент Domains этой структуры — это массив, содержащий запись для каждого домена, в котором был найден идентификатор безопасности. Запись для каждого домена содержит идентификатор безопасности и неструктурированное имя домена. Для доменов Windows неструктурированным именем является NetBIOS-имя. Для ссылок с доменами, отличными от Windows, неструктурированное имя — это идентифицируемое имя этого домена или значение NULL.

Если сведения больше не нужны, передайте возвращенный указатель в LsaFreeMemory. Эта память должна быть освобождена, даже если функция завершается сбоем с помощью любого из кодов ошибок STATUS_NONE_MAPPED или STATUS_SOME_NOT_MAPPED

[out] Names

Получает указатель на массив LSA_TRANSLATED_NAME структур. Каждая запись в массиве Names содержит сведения об имени соответствующей записи в массиве Sids . Для идентификаторов безопасности учетных записей элемент Name каждой структуры содержит изолированное имя учетной записи. Для идентификаторов безопасности домена элемент Name является недопустимым.

Элемент DomainIndex каждой записи в массиве Names — это индекс записи в массиве Domains, возвращенный в параметре ReferencedDomains . Индекс идентифицирует массив Domains для домена, в котором был найден идентификатор безопасности.

Если сведения больше не нужны, передайте возвращенный указатель в LsaFreeMemory. Эта память должна быть освобождена, даже если функция завершается сбоем с помощью любого из кодов ошибок STATUS_NONE_MAPPED или STATUS_SOME_NOT_MAPPED

Возвращаемое значение

Если функция выполняется успешно, возвращаемое значение будет одним из следующих значений NTSTATUS .

Код возврата Описание
STATUS_SOME_NOT_MAPPED
Некоторые идентификаторы безопасности не могут быть переведены. Это возвращаемое значение информационного уровня.
STATUS_SUCCESS
Все идентификаторы безопасности были найдены и успешно переведены.
 

Если функция завершается сбоем, возвращаемое значение представляет собой код NTSTATUS , который может быть одним из следующих значений или одним из возвращаемых значений функции политики LSA.

Код возврата Описание
STATUS_NONE_MAPPED
Ни один из идентификаторов безопасности не был переведен. Это возвращаемое значение уровня ошибки.
STATUS_TOO_MANY_SIDS
Параметр массива Sids был слишком большим.
 

Для преобразования кода NTSTATUS в код ошибки Windows можно использовать функцию LsaNtStatusToWinError.

Комментарии

Флаг LSA_LOOKUP_PREFER_INTERNET_NAMES следует использовать для учетных записей Интернета, таких как Учетные записи MicrosoftAccount и Azure Active Directory. Если этот флаг указан, SID-Name подстановка возвращает имя участника-пользователя учетной записи в формате MicrosoftAccount\foo@outlook.com или AzureAD\foo@contoso.com. Для учетных записей Майкрософт локальный ИД БЕЗОПАСНОСТИ SAM и идентификатор безопасности Интернета приводят к возврату имени участника-пользователя, если указан этот флаг. Если LSA_LOOKUP_PREFER_INTERNET_NAMES не указан, для учетных записей AAD возвращается имя стиля NT4 в формате AzureAD\foo. Имя стиля NT4 зависит от компьютера, и его использование следует тщательно оценивать и по возможности избегать. Для MicrosoftAccounts, если LSA_LOOKUP_PREFER_INTERNET_NAMES не указан, локальный идентификатор безопасности учетной записи преобразуется в локальное имя SAM, а идентификатор безопасности Интернета — в имя участника-пользователя.

Для идентификаторов безопасности учетных записей строка, возвращаемая в элементе Name , представляет собой изолированное имя учетной записи (например, user_name). Если требуется составное имя учетной записи (например, Acctg\user_name), получите доменное имя из буфера ReferencedDomains и добавьте обратную косую черту и изолированное имя.

Если функция LsaLookupSids2 не может преобразовать идентификатор безопасности, функция использует следующий алгоритм:

  1. Если домен идентификатора безопасности известен, буфер ReferencedDomains содержит запись для домена, а строка, возвращаемая в параметре Names , является представлением относительного идентификатора учетной записи (RID) в Юникоде из sid.
  2. Если домен идентификатора безопасности неизвестен, строка, возвращаемая в параметре Names , представляет собой представление всего идентификатора безопасности в Юникоде, и в буфере ReferencedDomains нет записи домена для этого идентификатора безопасности.
Помимо поиска идентификаторов безопасности для локальных учетных записей, учетных записей локального домена и явно доверенных учетных записей домена , LsaLookupSids2 может искать идентификаторы безопасности для любой учетной записи в любом домене в лесу Windows, включая идентификаторы безопасности, которые отображаются только в поле SIDhistory учетной записи в лесу. В поле SIDhistory хранятся бывшие идентификаторы безопасности учетной записи, которая была перемещена из другого домена. Для выполнения этих операций поиска функция запрашивает глобальный каталог леса.

Требования

Требование Значение
Минимальная версия клиента Windows 8 [только классические приложения]
Минимальная версия сервера Windows Server 2012 [только классические приложения]
Целевая платформа Windows
Header ntsecapi.h
Библиотека Advapi32.lib
DLL Advapi32.dll

См. также раздел

LSA_REFERENCED_DOMAIN_LIST

LSA_TRANSLATED_NAME

LsaOpenPolicy