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

Функция LsaLookupNames2 извлекает идентификаторы безопасности (ИДЕНТИФИКАТОРЫ) для указанных имен учетных записей. LsaLookupNames2 может искать идентификатор безопасности для любой учетной записи в любом домене в лесу Windows.

Функция LsaLookupNames заменена функцией LsaLookupNames2 . Приложения должны использовать функцию LsaLookupNames2 для обеспечения совместимости в будущем.

Эта функция отличается от функции LsaLookupNames тем, что LsaLookupNames2 возвращает каждый идентификатор безопасности в виде одного элемента, а LsaLookupNames делит каждый sid на пару RID/домен.

Синтаксис

NTSTATUS LsaLookupNames2(
  [in]  LSA_HANDLE                  PolicyHandle,
  [in]  ULONG                       Flags,
  [in]  ULONG                       Count,
  [in]  PLSA_UNICODE_STRING         Names,
  [out] PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,
  [out] PLSA_TRANSLATED_SID2        *Sids
);

Параметры

[in] PolicyHandle

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

[in] Flags

Значения, управляющие поведением этой функции. В настоящее время определено следующее значение.

Значение Значение
LSA_LOOKUP_ISOLATED_AS_LOCAL
0x80000000
Функция выполняет поиск имен, не указывающих домен, только в локальных системах. Функция выполняет поиск в удаленных системах имен, указывающих домен.

[in] Count

Указывает количество имен в массиве Имен . Это также количество записей, возвращаемых в массиве Sids .

[in] Names

Указатель на массив LSA_UNICODE_STRING структур, содержащих имена для поиска. Эти строки могут быть именами учетных записей пользователей, групп или локальных групп, а также именами доменов. Доменные имена могут быть dns-именами или именами доменов NetBIOS.

Дополнительные сведения о формате строк имен см. в разделе Примечания.

[out] ReferencedDomains

Получает указатель на структуру LSA_REFERENCED_DOMAIN_LIST . Элемент Domains этой структуры — это массив, содержащий запись для каждого домена, в котором было найдено имя. Элемент DomainIndex каждой записи в массиве Sids — это индекс записи массива Domains для домена, в котором было найдено имя.

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

[out] Sids

Получает указатель на массив LSA_TRANSLATED_SID2 структур. Каждая запись в массиве Sids содержит сведения о идентификаторе безопасности для соответствующей записи в массиве Имен .

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

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

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

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

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

Значение Описание
STATUS_NONE_MAPPED
Ни одно из имен не было переведено.
 

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

Комментарии

Используйте полные имена учетных записей (например, Имя_\пользователя домена) вместо изолированных имен (например, UserName). Полные имена являются однозначными и обеспечивают лучшую производительность при выполнении поиска. Эта функция также поддерживает полные DNS-имена (например, Example.Пример.com\Имя_пользователя) и имена субъектов-пользователей (UPN) (например, Someone@Example.com).

Преобразование изолированных имен представляет возможность конфликтов имен, так как одно и то же имя может использоваться в нескольких доменах. Функция LsaLookupNames2 использует следующий алгоритм для преобразования изолированных имен.

Перевод изолированных имен

  1. Если это хорошо известное имя, например Local или Interactive, функция возвращает соответствующий хорошо известный идентификатор безопасности (SID).
  2. Если имя является именем встроенного домена, функция возвращает идентификатор безопасности этого домена.
  3. Если имя является именем домена учетной записи, функция возвращает идентификатор безопасности этого домена.
  4. Если имя является именем основного домена, функция возвращает идентификатор безопасности этого домена.
  5. Если имя является одним из имен доверенного домена, функция возвращает идентификатор безопасности этого домена.
  6. Если имя является учетной записью пользователя, группы или локальной группы во встроенном домене, функция возвращает идентификатор безопасности этой учетной записи.
  7. Если имя является учетной записью пользователя, группы или локальной группы в домене учетной записи в локальной системе, функция возвращает идентификатор безопасности этой учетной записи.
  8. Если имя является пользователем, группой или локальной группой в основном домене, функция возвращает идентификатор безопасности этой учетной записи.
  9. После просмотра основного домена функция выполняет поиск в каждом из доверенных доменов основного домена.
  10. В противном случае имя не преобразуется.

Требования

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

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

LSA_REFERENCED_DOMAIN_LIST

LSA_TRANSLATED_SID2

LSA_UNICODE_STRING

LsaFreeMemory