LsaLookupSids2 函数 (ntsecapi.h)
LsaLookupSids2 函数查找与安全标识符数组相对应的名称,这些标识符 (SID) 并支持 Internet 提供程序标识。 如果 LsaLookupSids2 找不到与 SID 对应的名称,则函数以字符形式返回 SID。 应使用此函数而不是 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
修改查找行为的标志。
[in] Count
指定 Sids 数组中的 SID 数。 这也是 在 Names 数组中返回的条目数。 此值必须小于或等于 20480。
[in] Sids
指向要查找的 SID 指针数组的指针。 SID 可以是众所周知的 SID、用户、组或本地组帐户 SID 或域 SID。
[out] ReferencedDomains
接收指向 指向LSA_REFERENCED_DOMAIN_LIST 结构的指针的指针。 此结构的 Domains 成员是一个数组,其中包含在其中找到 SID 的每个域的条目。 每个域的条目都包含域的 SID 和平面名称。 对于 Windows 域,平面名称是 NetBIOS 名称。 对于具有非 Windows 域的链接,平面名称是该域的标识名称,或者为 NULL。
如果不再需要这些信息,请将返回的指针传递给 LsaFreeMemory。 即使函数因错误代码STATUS_NONE_MAPPED或STATUS_SOME_NOT_MAPPED而失败,也必须释放此内存
[out] Names
接收指向 LSA_TRANSLATED_NAME 结构的数组的指针。 Names 数组中的每个条目都包含 Sids 数组中相应条目的名称信息。 对于帐户 SID,每个结构的 Name 成员都包含帐户的独立名称。 对于域 SID,Name 成员无效。
Names 数组中每个条目的 DomainIndex 成员是 ReferencedDomains 参数中返回的 Domains 数组中某个条目的索引。 索引标识在其中找到 SID 的域的域数组。
如果不再需要这些信息,请将返回的指针传递给 LsaFreeMemory。 即使函数因错误代码STATUS_NONE_MAPPED或STATUS_SOME_NOT_MAPPED而失败,也必须释放此内存
返回值
如果函数成功,则返回值是以下 NTSTATUS 值之一。
返回代码 | 说明 |
---|---|
|
某些 SID 无法翻译。 这是一个信息级返回值。 |
|
所有 SID 都已找到并成功翻译。 |
如果函数失败,则返回值是 NTSTATUS 代码,可以是以下值之一或 LSA 策略函数返回值之一。
返回代码 | 说明 |
---|---|
|
没有翻译 SID。 这是错误级别的返回值。 |
|
Sids 数组参数太大。 |
可以使用 LsaNtStatusToWinError 函数将 NTSTATUS 代码转换为 Windows 错误代码。
注解
标志LSA_LOOKUP_PREFER_INTERNET_NAMES应用于 Internet 帐户,例如 MicrosoftAccount 和 Azure Active Directory 帐户。 指定此标志后,SID-Name 查找以 MicrosoftAccount\ 或 AzureAD\foo@outlook.comfoo@contoso.com 的形式返回帐户的 UPN。 对于 Microsoft 帐户,如果指定了此标志,则本地 SAM SID 和 Internet SID 都会导致 UPN 返回。 如果未指定LSA_LOOKUP_PREFER_INTERNET_NAMES,则为 AAD 帐户返回 AzureAD\foo 格式的 NT4 样式名称。 NT4 样式名称特定于计算机,应仔细评估其用法,如果可能,应避免使用。 对于 MicrosoftAccounts,如果未指定LSA_LOOKUP_PREFER_INTERNET_NAMES,则帐户的本地 SID 将转换为本地 SAM 名称,Internet SID 将转换为 UPN 名称。
对于帐户 SID,Name 成员中返回的字符串是帐户 (的独立名称,例如,user_name) 。 如果需要帐户的复合名称 (例如 Acctg\user_name) ,请从 ReferencedDomains 缓冲区获取域名,并追加反斜杠和独立名称。
如果 LsaLookupSids2 函数无法转换 SID,该函数将使用以下算法:
- 如果 SID 的域已知, 则 ReferencedDomains 缓冲区包含域的条目, 在 Names 参数中返回的字符串是帐户相对标识符的 Unicode 表示形式, (来自 SID 的 RID) 。
- 如果 SID 的域未知,则 Names 参数中返回的字符串是整个 SID 的 Unicode 表示形式,并且 ReferencedDomains 缓冲区中没有此 SID 的域记录。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2012 [仅限桌面应用] |
目标平台 | Windows |
标头 | ntsecapi.h |
Library | Advapi32.lib |
DLL | Advapi32.dll |