CredWriteDomainCredentialsA 函数 (wincred.h)
CredWriteDomainCredentials 函数将域凭据写入用户的凭据集。 使用的凭据集是与当前令牌的登录会话关联的凭据集。 令牌不得禁用用户的 SID。
语法
BOOL CredWriteDomainCredentialsA(
[in] PCREDENTIAL_TARGET_INFORMATIONA TargetInfo,
[in] PCREDENTIALA Credential,
[in] DWORD Flags
);
参数
[in] TargetInfo
标识目标服务器。 至少有一个命名成员必须是非 NULL 成员,可以是 NetbiosServerName、 DnsServerName、 NetbiosDomainName、 DnsDomainName 或 DnsTreeName。
[in] Credential
要写入的凭据。
凭据必须是与 TargetInfo 匹配的凭据。例如,如果 TargetName 是通配符 DNS 名称,则凭据的 TargetName 成员必须是 TargetInfo 中 DnsServerName 成员的后缀。
[in] Flags
用于控制 API 操作的标志。 定义了以下标志。
值 | 含义 |
---|---|
|
应从具有相同凭据名称和凭据类型的现有凭据中保留凭据 BLOB。 在 Credential 结构中传递的 的 CredentialBlobSize 必须为零。 |
返回值
如果函数成功,则函数返回 TRUE。
如果函数失败,则返回 FALSE。 调用 GetLastError 函数以获取更具体的状态代码。 可以返回以下状态代码。
编写CRED_TYPE_CERTIFICATE凭据时,可能会返回其他智能卡错误。
返回代码 | 说明 |
---|---|
|
一个或多个参数无效。 未指定任何命名参数,或者指定的凭据未将 Type 成员设置为 CRED_TYPE_DOMAIN_PASSWORD 或 CRED_TYPE_DOMAIN_CERTIFICATE,或者 Credential 与 TargetInfo 不匹配。 |
|
登录会话不存在,或者没有与此登录会话关联的凭据集。 网络登录会话没有关联的凭据集。 |
|
为 Flags 参数指定了无效的值。 |
|
凭据结构中传递的 的 UserName 成员无效。 有关有效语法的说明,请参阅该成员的定义。 |
|
CRED_PRESERVE_CREDENTIAL_BLOB已指定,并且没有同一 TargetName 和 Type 的现有凭据。 |
|
正在写入CRED_TYPE_CERTIFICATE凭据需要智能卡读取器可用。 |
|
要写入的凭据需要插入智能卡。 |
|
为正在写入的CRED_TYPE_CERTIFICATE凭据提供了错误的 PIN。 |
注解
当此函数写入CRED_TYPE_CERTIFICATE凭据时,Credential-CredentialBlob> 成员指定用于保护 Credential-UserName> 所指定证书的私钥的 PIN。 凭据管理器不维护 PIN。 而是将 PIN 传递给证书的 CSP,供 CSP 和身份验证包稍后使用。 CSP 定义 PIN 的生存期。 例如,大多数 CSP 在智能卡删除时刷新 PIN。
CredWriteDomainCredentials 与 CredWrite 的不同之处在于,它处理域 (CRED_TYPE_DOMAIN_PASSWORD 或CRED_TYPE_DOMAIN_CERTIFICATE) 凭据的特性。 域凭据包含多个目标成员。
如果 credential 参数指定的CREDENTIAL 结构的 Type 成员的值CRED_TYPE_DOMAIN_EXTENDED,则必须在目标名称中指定命名空间。
注意
wincred.h 标头将 CredWriteDomainCredentials 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | wincred.h |
Library | Advapi32.lib |
DLL | Advapi32.dll |