wincred.h) (CREDENTIALA 结构

CREDENTIAL 结构包含单个凭据。

语法

typedef struct _CREDENTIALA {
  DWORD                  Flags;
  DWORD                  Type;
  LPSTR                  TargetName;
  LPSTR                  Comment;
  FILETIME               LastWritten;
  DWORD                  CredentialBlobSize;
  LPBYTE                 CredentialBlob;
  DWORD                  Persist;
  DWORD                  AttributeCount;
  PCREDENTIAL_ATTRIBUTEA Attributes;
  LPSTR                  TargetAlias;
  LPSTR                  UserName;
} CREDENTIALA, *PCREDENTIALA;

成员

Flags

标识凭据特征的位成员。 未定义的位应初始化为零,否则不应更改以允许将来的增强。

含义
CRED_FLAGS_PROMPT_NOW
2 (0x2)
如果凭据未保留 CredentialBlob ,并且此登录会话期间尚未写入凭据,则设置位。 此位在输入时将被忽略,并在查询时自动设置。

如果 Type为CRED_TYPE_DOMAIN_CERTIFICATE,则不会跨登录会话保留 CredentialBlob ,因为证书的 PIN 是非常敏感的信息。 事实上,将凭据写入凭据管理器时,PIN 会传递给与证书关联的 CSP。 CSP 将强制实施适用于证书的 PIN 保留策略。

如果 Type为CRED_TYPE_DOMAIN_PASSWORDCRED_TYPE_DOMAIN_CERTIFICATE,则身份验证包在使用标记为 CRED_FLAGS_PROMPT_NOW的凭据时,身份验证尝试始终失败。 应用程序通常通过密钥环 UI (,) 提示用户输入密码。 应用程序保存凭据并重试身份验证。 由于凭据最近已写入,因此身份验证包现在获取的凭据未标记为CRED_FLAGS_PROMPT_NOW。

CRED_FLAGS_USERNAME_TARGET
4 (0x4)
如果此凭据的 TargetName 成员设置为与 UserName 成员相同的值,则设置位。 此类凭据旨在存储特定用户的 CredentialBlob 。 有关详细信息,请参阅 CredMarshalCredential 函数。

仅当 Type为CRED_TYPE_DOMAIN_PASSWORDCRED_TYPE_DOMAIN_CERTIFICATE时,才能指定此位。

Type

凭据的类型。 创建凭据后,无法更改此成员。 以下值有效。

含义
CRED_TYPE_GENERIC
1 (0x1)
凭据是通用凭据。 任何特定的身份验证包都不会使用该凭据。 凭据将安全地存储,但没有其他重要特征。
CRED_TYPE_DOMAIN_PASSWORD
2 (0x2)
凭据是密码凭据,特定于 Microsoft 的身份验证包。 NTLM、Kerberos 和 Negotiate 身份验证包在连接到命名目标时将自动使用此凭据。
CRED_TYPE_DOMAIN_CERTIFICATE
3 (0x3)
凭据是证书凭据,特定于 Microsoft 的身份验证包。 Kerberos、Negotiate 和 Schannel 身份验证包在连接到命名目标时会自动使用此凭据。
CRED_TYPE_DOMAIN_VISIBLE_PASSWORD
4 (0x4)
不再支持此值。

Windows Server 2003 和 Windows XP: 凭据是密码凭据,特定于 Microsoft 提供的身份验证包。 Passport 身份验证包在连接到命名目标时会自动使用此凭据。

将来将定义其他值。 应编写应用程序以允许其无法理解的凭据类型。

CRED_TYPE_GENERIC_CERTIFICATE
5 (0x5)
凭据是一个证书凭据,它是一个泛型身份验证包。

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持此值。

CRED_TYPE_DOMAIN_EXTENDED
6 (0x6)
扩展的 Negotiate 包支持凭据。

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持此值。

CRED_TYPE_MAXIMUM
7 (0x7)
支持的凭据类型的最大数目。

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持此值。

CRED_TYPE_MAXIMUM_EX
CRED_TYPE_MAXIMUM+1000
现在允许新应用程序在较旧操作系统上运行的受支持凭据类型的最大扩展数量。

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持此值。

TargetName

该凭据的名称。 TargetNameType 成员唯一标识凭据。 创建凭据后,无法更改此成员。 相反,应删除具有旧名称的凭据,并创建具有新名称的凭据。

如果 Type为CRED_TYPE_DOMAIN_PASSWORDCRED_TYPE_DOMAIN_CERTIFICATE,则此成员标识凭据要用于的服务器。 成员是 NetBIOS 或 DNS 服务器名称、包含通配符的 DNS 主机名后缀、包含通配符序列的 NetBIOS 或 DNS 域名或星号。

如果 TargetName 是 DNS 主机名, 则 TargetAlias 成员可以是主机的 NetBIOS 名称。

如果 TargetName 是包含通配符的 DNS 主机名后缀,则 DNS 主机名最左侧的标签是星号 (*) ,表示目标名称是名称以指定名称结尾的任何服务器,例如 *.microsoft.com。

如果 TargetName 是包含通配符序列的域名,则语法是域名后跟反斜杠和星号 (*) ,表示目标名称是属于命名域 (或领域) 的任何服务器。

如果 TargetName 是包含通配符序列的 DNS 域名, 则 TargetAlias 成员可以是对同一域使用通配符序列的 NetBIOS 域名。

如果 TargetName 指定 DFS 共享(例如 DfsRoot\DfsShare),则此凭据将匹配特定的 DFS 共享以及通过该 DFS 共享访问的任何服务器。

如果 TargetName 是单个星号 (*) ,则此凭据与任何服务器名称匹配。

如果 TargetName 是CRED_SESSION_WILDCARD_NAME,则此凭据与任何服务器名称匹配。 此凭据在单个星号之前匹配,并且仅在“持久化”为CRED_PERSIST_SESSION时才有效。 凭据可由希望临时替代默认凭据的应用程序设置。

此成员长度不能超过 CRED_MAX_DOMAIN_TARGET_NAME_LENGTH (337) 个字符。

如果 Type 为CRED_TYPE_GENERIC,则此成员应标识除实际目标外使用凭据的服务。 Microsoft 建议名称以实施服务的公司名称为前缀。 Microsoft 将使用前缀“Microsoft”。 Microsoft 编写的服务应追加其服务名称,例如 Microsoft_RAS_TargetName。 此成员长度不能超过 CRED_MAX_GENERIC_TARGET_NAME_LENGTH ( 32767) 个字符。

此成员不区分大小写。

Comment

描述此凭据的用户的字符串注释。 此成员长度不能超过 CRED_MAX_STRING_LENGTH (256) 个字符。

LastWritten

协调世界时 (格林威治平均时间) ,上次修改凭据的时间。 对于写入操作,忽略此成员的值。

CredentialBlobSize

CredentialBlob 成员的大小(以字节为单位)。 此成员不能大于 CRED_MAX_CREDENTIAL_BLOB_SIZE ( 5*512) 字节。

CredentialBlob

凭据的机密数据。 CredentialBlob 成员可以读取和写入。

如果 Type 成员 CRED_TYPE_DOMAIN_PASSWORD,则此成员包含 UserName 的纯文本 Unicode 密码。 CredentialBlobCredentialBlobSize 成员不包含尾随零字符。 此外,对于 CRED_TYPE_DOMAIN_PASSWORD,此成员只能由身份验证包读取。

如果 Type 成员 CRED_TYPE_DOMAIN_CERTIFICATE,则此成员包含 UserName 的清除测试 Unicode PIN。 CredentialBlobCredentialBlobSize 成员不包含尾随零字符。 此外,此成员只能由身份验证包读取。

如果 Type 成员 CRED_TYPE_GENERIC,则此成员由应用程序定义。

凭据应是可移植的。 应用程序应确保 CredentialBlob 中的数据可移植。 应用程序定义 CredentialBlob 中数据的字节尾号和对齐方式。

Persist

定义此凭据的持久性。 此成员可以读取和写入。

含义
CRED_PERSIST_SESSION
1 (0x1)
凭据在登录会话的生命周期内会保留。 它对同一用户的其他登录会话不可见。 此用户注销并重新打开后,它将不存在。
CRED_PERSIST_LOCAL_MACHINE
2 (0x2)
对于同一计算机上的所有后续登录会话,凭据将保留。 它对于同一计算机上的同一用户的其他登录会话可见,对其他用户的登录会话不可见。

Windows Vista 家庭普通版、Windows Vista 家庭高级版、Windows Vista 入门版 和 Windows XP 家庭版:不支持此值。

CRED_PERSIST_ENTERPRISE
3 (0x3)
对于同一计算机上的所有后续登录会话,凭据将保留。 此用户在同一计算机上的其他登录会话以及此用户在其他计算机上的登录会话中可见。

如果管理员或用户将用户帐户配置为不具有可漫游状态,则可以将此选项作为本地持久化凭据实现。 例如,如果用户没有漫游配置文件,则凭据将仅保留在本地。

Windows Vista 家庭普通版、Windows Vista 家庭高级版、Windows Vista 入门版 和 Windows XP 家庭版:不支持此值。

AttributeCount

要与凭据关联的应用程序定义属性的数目。 此成员可以读取和写入。 其值不能大于 CRED_MAX_ATTRIBUTES (64) 。

Attributes

与凭据关联的应用程序定义属性。 此成员可以读取和写入。

TargetAlias

TargetName 成员的别名。 此成员可以读取和写入。 长度不能超过 CRED_MAX_STRING_LENGTH (256) 个字符。

如果凭据类型CRED_TYPE_GENERIC,则此成员可以是非 NULL,但凭据管理器会忽略该成员。

UserName

用于连接到 TargetName 的帐户的用户名。

如果凭据类型CRED_TYPE_DOMAIN_PASSWORD,则此成员可以是 DomainNameUserName 或 UPN。

如果凭据类型为CRED_TYPE_DOMAIN_CERTIFICATE,则此成员必须是通过使用 CertCredential 调用 CredMarshalCredential 创建的封送证书引用。

如果凭据类型CRED_TYPE_GENERIC,则此成员可以是非 NULL,但凭据管理器会忽略该成员。

此成员长度不能超过 CRED_MAX_USERNAME_LENGTH (513) 个字符。

注解

注意

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

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 wincred.h