CredWriteA 函数 (wincred.h)

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

语法

BOOL CredWriteA(
  [in] PCREDENTIALA 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
Flags 参数指定了无效的值。
ERROR_BAD_USERNAME
凭据结构中传递的 的 UserName 成员无效。 有关有效用户名语法的说明,请参阅该成员的定义。
ERROR_NOT_FOUND
CRED_PRESERVE_CREDENTIAL_BLOB已指定,并且没有同一 TargetNameType 的现有凭据。
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。

注解

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

当此函数写入CRED_TYPE_CERTIFICATE凭据时,Credential-CredentialBlob> 成员指定用于保护 Credential-UserName> 成员所指定证书私钥的 PIN。 凭据管理器不维护 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 [仅限桌面应用]
目标平台 Windows
标头 wincred.h
Library Advapi32.lib
DLL Advapi32.dll

另请参阅

凭据