CredPackAuthenticationBufferA 函数 (wincred.h)

CredPackAuthenticationBuffer 函数将字符串用户名和密码转换为身份验证缓冲区。

从 Windows 8 和 Windows Server 2012 开始, CredPackAuthenticationBuffer 函数将标识凭据转换为身份验证缓冲区,这是 一个SEC_WINNT_AUTH_IDENTITY_EX2 结构。 此缓冲区可以传递到 LsaLogonUserAcquireCredentialsHandle 或其他标识提供者接口。

语法

CREDUIAPI BOOL CredPackAuthenticationBufferA(
  [in]      DWORD dwFlags,
  [in]      LPSTR pszUserName,
  [in]      LPSTR pszPassword,
  [out]     PBYTE pPackedCredentials,
  [in, out] DWORD *pcbPackedCredentials
);

参数

[in] dwFlags

指定应如何打包凭据。 这可以是以下标志的组合。

含义
CRED_PACK_PROTECTED_CREDENTIALS
加密凭据,使其只能由调用方登录会话中的进程解密。
CRED_PACK_WOW_BUFFER
加密 WOW 缓冲区中的凭据。
CRED_PACK_GENERIC_CREDENTIALS
加密CRED_GENERIC缓冲区中的凭据。
CRED_PACK_ID_PROVIDER_CREDENTIALS
将联机标识的凭据加密为 SEC_WINNT_AUTH_IDENTITY_EX2 结构。 如果未设置CRED_PACK_GENERIC_CREDENTIALS和CRED_PACK_ID_PROVIDER_CREDENTIALS,则加密KERB_INTERACTIVE_LOGON缓冲区中的凭据。

Windows 7、Windows Server 2008 R2、Windows Vista、Windows Server 2008: 不支持此值。

[in] pszUserName

指向以 null 结尾的字符串的指针,该字符串指定要转换的用户名。 对于域用户,字符串必须采用以下格式:

DomainName\用户

对于联机标识,如果凭据是纯文本密码,则用户名格式为 ProviderName\UserName。 如果凭据是SEC_WINNT_AUTH_IDENTITY_EX2结构,则用户名是一个编码字符串,它是对 SspiEncodeAuthIdentityAsStrings 的函数调用的 UserName 参数输出。

对于智能卡或证书凭据,用户名是一个编码字符串,该字符串是使用 CertCredential 选项对 CredMarshalCredential 进行函数调用的输出。

Windows Server 2008 R2、Windows 7、Windows Server 2008 和 Windows Vista: 不支持联机标识。

[in] pszPassword

指向以 null 结尾的字符串的指针,该字符串指定要转换的密码。

对于SEC_WINNT_AUTH_IDENTITY_EX2凭据,密码是一个编码字符串,位于对 SspiEncodeAuthIdentityAsStrings 的函数调用的 ppszPackedCredentialsString 输出中。

对于智能卡凭据,这是智能卡 PIN。

Windows Server 2008 R2、Windows 7、Windows Server 2008 和 Windows Vista: 不支持联机标识。

[out] pPackedCredentials

指向字节数组的指针,该数组在输出时接收打包的身份验证缓冲区。 此参数可以为 NULL ,以接收所需的缓冲区大小,该大小位于 该参数中

[in, out] pcbPackedCredentials

指向 DWORD 值的指针,该值指定 pPackedCredentials 缓冲区的大小(以字节为单位)。 在输出中,如果缓冲区大小不足,则指定 pPackedCredentials 缓冲区的所需大小(以字节为单位)。

返回值

如果函数成功,则为 TRUE;否则为 FALSE

对于扩展的错误信息,请调用 GetLastError 函数,该函数可能会返回以下错误代码。

返回代码 说明
ERROR_INSUFFICIENT_BUFFER
pPackedCredentials 提供的缓冲区太小。

注解

注意

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

要求

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