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\UserName

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

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

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

[in] pszPassword

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

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

对于 智能卡 凭据,这是 智能卡 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 [仅限桌面应用]
目标平台 窗户
标头 wincred.h
Credui.lib
DLL Credui.dll