LsaLookupSids 函数 (ntsecapi.h)

[LsaLookupSids 可用于“要求”部分中指定的操作系统。 它可能在后续版本中变更或不可用。 请改用 LsaLookupSids2。]

LsaLookupSids 函数查找与 SID) (安全标识符数组对应的名称。 如果 LsaLookupSids 找不到与 SID 对应的名称,则函数将返回字符形式的 SID。

语法

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

参数

[in] PolicyHandle

Policy 对象的句柄。 此句柄必须具有POLICY_LOOKUP_NAMES访问权限。 有关详细信息,请参阅 打开策略对象句柄

[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 值之一。

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

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

返回代码 说明
STATUS_NONE_MAPPED
没有翻译 SID。 这是错误级别的返回值。
STATUS_TOO_MANY_SIDS
Sids 数组参数太大。
 

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

注解

对于帐户 SID,Name 成员中返回的字符串是帐户 (的独立名称,例如,user_name) 。 如果需要帐户的复合名称 (例如 Acctg\user_name) ,请从 ReferencedDomains 缓冲区获取域名,并追加反斜杠和独立名称。

如果 LsaLookupSids 函数无法转换 SID,该函数将使用以下算法:

  1. 如果 SID 的域已知, 则 ReferencedDomains 缓冲区包含域的条目, 在 Names 参数中返回的字符串是帐户相对标识符的 Unicode 表示形式, (来自 SID 的 RID) 。
  2. 如果 SID 的域未知,则 Names 参数中返回的字符串是整个 SID 的 Unicode 表示形式,并且 ReferencedDomains 缓冲区中没有此 SID 的域记录。
除了为本地帐户、本地域帐户和显式受信任的域帐户查找 SID 外, LsaLookupSids 还可以查找 Windows 林中任何域中任何帐户的 SID,包括仅在林中某个帐户的 SIDhistory 字段中显示的 SID。 SIDhistory 字段存储已从另一个域移动的帐户的前 SID。 若要执行这些搜索,函数会查询林的全局编录。

要求

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

另请参阅

LSA_REFERENCED_DOMAIN_LIST

LSA_TRANSLATED_NAME

LsaOpenPolicy