CredWriteW 函数 (wincred.h)

CredWrite 函数创建新的凭据或修改用户凭据集中的现有凭据。 新凭据与当前令牌的登录会话相关联。 令牌不得禁用用户的 安全标识符(SID)。

语法

BOOL CredWriteW(
  [in] PCREDENTIALW Credential,
  [in] DWORD        Flags
);

参数

[in] Credential

指向要写入 CREDENTIAL 结构的指针。

[in] Flags

用于控制函数操作的标志。 定义了以下标志。

价值 意义
CRED_PRESERVE_CREDENTIAL_BLOB
现有凭据中的凭据 BLOB 保留具有相同的凭据名称和凭据类型。 传入 凭据 结构的 CredentialBlobSize 必须为零。

返回值

如果函数成功,该函数将返回 true

如果该函数失败,则返回 FALSE。 调用 GetLastError 函数以获取更具体的状态代码。 可以返回以下状态代码。

编写CRED_TYPE_CERTIFICATE凭据时,可以返回其他智能卡错误。

返回代码/值 描述
ERROR_NO_SUCH_LOGON_SESSION
登录会话不存在,或者没有与此登录会话关联的凭据集。 网络登录会话没有关联的凭据集。
ERROR_INVALID_PARAMETER
某些字段不能在现有凭据中更改。 如果字段与现有凭据的受保护字段中的值不匹配,则返回此错误。
ERROR_INVALID_FLAGS
标志 参数指定了无效的值。
ERROR_BAD_USERNAME
传入 凭据 结构的 UserName 成员无效。 有关有效用户名语法的说明,请参阅该成员的定义。
ERROR_NOT_FOUND
CRED_PRESERVE_CREDENTIAL_BLOB已指定,并且没有同一 TargetName类型的现有凭据。
SCARD_E_NO_READERS_AVAILABLE
要写入的CRED_TYPE_CERTIFICATE凭据需要智能卡读卡器可用。
SCARD_E_NO_SMARTCARD 或SCARD_W_REMOVED_CARD
写入CRED_TYPE_CERTIFICATE凭据需要插入智能卡。
SCARD_W_WRONG_CHV
为写入的CRED_TYPE_CERTIFICATE凭据提供了错误的 PIN。

言论

如果具有指定 TargetName 且不存在 类型 的凭据,则此函数将创建凭据。 如果存在具有指定 TargetName类型 的凭据,则新的指定凭据将替换现有凭据。

当此函数写入CRED_TYPE_CERTIFICATE凭据时,Credential->CredentialBlob 成员指定保护由 Credential指定的证书私钥的 PIN ->UserName 成员。 凭据管理器不维护 PIN。 相反,PIN 将传递给证书上指示的 加密服务提供商(CSP),供 CSP 和身份验证包稍后使用。 CSP 定义 PIN 的生存期。 当智能卡从智能卡读取器中删除时,大多数 CSP 会刷新 PIN。

如果 Credential 参数指定的 CREDENTIAL 结构的 Type 成员的值 CRED_TYPE_DOMAIN_EXTENDED,则必须在目标名称中指定命名空间。 此函数不支持写入包含通配符的目标名称。

注意

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

要求

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

另请参阅

CREDENTIAL