LsaLookupNames2 函数 (ntsecapi.h)

LsaLookupNames2 函数检索指定帐户名称) SID (安全标识符LsaLookupNames2 可以查找 Windows 林中任何域中任何帐户的 SID。

LsaLookupNames 函数被 LsaLookupNames2 函数取代。 应用程序应使用 LsaLookupNames2 函数来确保将来的兼容性。

此函数与 LsaLookupNames 函数的不同之处在于 ,LsaLookupNames2 将每个 SID 作为单个元素返回,而 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

指定 Names 数组中的名称数。 这也是 Sids 数组中返回的条目数。

[in] Names

指向包含要查找的名称的 LSA_UNICODE_STRING 结构的数组的指针。 这些字符串可以是用户、组或本地组帐户的名称,也可以是域的名称。 域名可以是 DNS 域名或 NetBIOS 域名。

有关名称字符串格式的详细信息,请参阅备注。

[out] ReferencedDomains

接收指向 LSA_REFERENCED_DOMAIN_LIST 结构的指针。 此结构的 Domains 成员是一个数组,其中包含在其中找到名称的每个域的条目。 Sids 数组中每个条目的 DomainIndex 成员是在其中找到名称的域的 Domains 数组条目的索引。

使用完返回的指针后,通过调用
LsaFreeMemory 函数。 即使函数失败并出现错误代码STATUS_NONE_MAPPEDSTATUS_SOME_NOT_MAPPED,也必须释放此内存

[out] Sids

接收指向LSA_TRANSLATED_SID2结构的数组 指针。 Sids 数组中的每个条目都包含 Names 数组中相应条目的 SID 信息。

使用完返回的指针后,通过调用
LsaFreeMemory 函数。 即使函数失败并出现错误代码STATUS_NONE_MAPPEDSTATUS_SOME_NOT_MAPPED,也必须释放此内存

返回值

如果函数成功,该函数将返回以下 NTSTATUS 值之一。

说明
STATUS_SOME_NOT_MAPPED
某些名称无法翻译。 这是一个信息级返回值。
STATUS_SUCCESS
所有名称都已找到并成功翻译。
 

如果函数失败,则返回值为以下 NTSTATUS 值或 LSA 策略函数返回值之一。

说明
STATUS_NONE_MAPPED
没有翻译任何名称。
 

使用 LsaNtStatusToWinError 函数将 NTSTATUS 代码转换为 Windows 错误代码。

注解

使用完全限定的帐户名 (例如 DomainName\UserName) ,而不是 (独立名称,例如 UserName) 。 完全限定的名称是明确的,在执行查找时提供更好的性能。 此函数还支持 (完全限定的 DNS 名称,例如 Example例如.com\UserName) 和 用户主体名称 (UPN) (例如 Someone@Example.com) 。

独立名称的转换引入了名称冲突的可能性,因为同一名称可能在多个域中使用。 LsaLookupNames2 函数使用以下算法来转换独立名称。

转换独立名称

  1. 如果名称是已知名称(如 Local 或 Interactive),则函数将返回相应的已知 安全标识符 (SID) 。
  2. 如果该名称是内置域的名称,则函数将返回该域的 SID。
  3. 如果该名称是帐户域的名称,则函数返回该域的 SID。
  4. 如果该名称是主域的名称,则函数将返回该域的 SID。
  5. 如果该名称是受信任域的名称之一,则函数将返回该域的 SID。
  6. 如果名称是内置域中的用户、组或本地组帐户,则函数将返回该帐户的 SID。
  7. 如果名称是本地系统上帐户域中的用户、组或本地组帐户,则函数将返回该帐户的 SID。
  8. 如果名称是主域中的用户、组或本地组,则函数将返回该帐户的 SID。
  9. 在主域中查找后, 函数将查找每个主域的受信任域。
  10. 否则,不会转换名称。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 ntsecapi.h
Library Advapi32.lib
DLL Advapi32.dll

另请参阅

LSA_REFERENCED_DOMAIN_LIST

LSA_TRANSLATED_SID2

LSA_UNICODE_STRING

LsaFreeMemory