CredReadDomainCredentialsA 函数 (wincred.h)

CredReadDomainCredentials 函数从用户的凭据集中读取域凭据。 使用的凭据集是与当前令牌的登录会话关联的凭据集。 该令牌不得禁用用户的 SID。

语法

BOOL CredReadDomainCredentialsA(
  [in]  PCREDENTIAL_TARGET_INFORMATIONA TargetInfo,
  [in]  DWORD                           Flags,
  [out] DWORD                           *Count,
  [out] PCREDENTIALA                    **Credential
);

参数

[in] TargetInfo

标识目标服务器的目标信息。 至少一个命名成员不得为 NULL:NetbiosServerName、DnsServerName、NetbiosDomainName、DnsDomainName 或 DnsTreeName。

[in] Flags

控制函数操作的标志。

定义了以下标志:

CRED_CACHE_TARGET_INFORMATION

使用 CredGetTargetInfo 缓存 TargetInfo 以供后续读取。

[out] Count

凭据数组中返回的 凭据 计数。

[out] Credential

指向指向凭据的指针数组的指针的指针。 返回与 TargetInfo 匹配的最具体的现有凭据。 例如,如果 (各种类型的凭据) 存在CRED_TYPE_DOMAIN_PASSWORD和CRED_TYPE_DOMAIN_CERTIFICATE凭据,则返回每种类型之一。 如果要与命名目标建立连接,则将使用此最特定的凭据。

TargetInfo 指定的凭据类型。返回 CredTypes 数组。 返回的 Credentials 数组的排序顺序与 TargetInfo 相同。CredTypes 数组。 也就是说,身份验证包通过前面在 TargetInfo 中指定它来指定首选凭据类型。CredTypes 数组。如果 TargetInfo。CredTypeCount 为零, 凭据 数组按以下排序顺序返回:

  • CRED_TYPE_DOMAIN_CERTIFICATE
  • CRED_TYPE_DOMAIN_PASSWORD

返回的缓冲区是单个分配的块。 缓冲区中包含的任何指针都是指向此单个分配块内的位置的指针。 必须通过调用 CredFree 来释放单个返回的缓冲区。

返回值

该函数在成功时返回 TRUE ,在失败时返回 FALSE 。 可以调用 GetLastError 函数以获取更具体的状态代码。 可以返回以下状态代码:

  • ERROR_INVALID_PARAMETER

    未指定任何命名参数。

  • ERROR_NOT_FOUND

    没有与指定的命名参数匹配的凭据。

  • ERROR_NO_SUCH_LOGON_SESSION

    登录会话不存在,或者没有与此登录会话关联的凭据集。 网络登录会话没有关联的凭据集。

  • ERROR_INVALID_FLAGS

    Flags 参数指定了无效的标志。

注解

此函数返回与命名参数匹配的最具体凭据。 例如,如果有与目标服务器名称匹配的凭据和与目标域名匹配的凭据,则仅返回特定于服务器的凭据。 这是要使用的凭据。

以下列表指定 (从最特定到最不具体的) 如果多个凭据匹配时返回的顺序:

  • 凭据目标名称的格式<为 DfsRoot>\<DfsShare>,并且与 TargetName 完全匹配。
  • DnsServerName 上的完全匹配项。
  • NetBIOSServerName 上的完全匹配项。
  • TargetName 上的完全匹配项。
  • DnsServerName 与通配符服务器凭据的匹配项。 如果多个通配符服务器凭据匹配,则使用 TargetName 较长的凭据。 也就是说,使用 *.example.microsoft.com 凭据而不是 *.microsoft.com 凭据。
  • DnsDomainNameDnsDomainName>\* 格式<的通配符域凭据的完全匹配。
  • NetBIOSDomainName NetBIOSDomainName>\* 格式<的通配符域凭据的完全匹配项
  • 名为 CRED_SESSION_WILDCARD_NAME 的凭据。
  • 名为“*”的凭据。
CredReadDomainCredentialsCredRead 的不同之处在于,它处理域 (CRED_TYPE_DOMAIN_PASSWORD 或CRED_TYPE_DOMAIN_CERTIFICATE) 凭据的 i 特性。 域凭据包含多个目标成员。

如果 Credentials 参数指定的CREDENTIAL 结构的 Type 成员的值CRED_TYPE_DOMAIN_EXTENDED,则必须在目标名称中指定命名空间。 此函数只能返回指定类型的一个凭据。

此函数可以返回此类型的多个凭据,但CRED_TYPE_DOMAIN_EXTENDED不能与 TargetInfo 参数指定的 CREDENTIAL_TARGET_INFORMATION 结构的 CredTypes 成员中的其他类型混合。

注意

wincred.h 标头将 CredReadDomainCredentials 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

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