Windows Win32:CredUIConfirmCredentials的行为异常
我正在与联合使用 设置Windows Win32:CredUIConfirmCredentials的行为异常,windows,security,credentials,credui,Windows,Security,Credentials,Credui,我正在与联合使用 设置EXPECT\u CONFIRMATION,以及当凭证首先由提供时 调用CredUIConfirmCredentials的用户返回无错误 但是,在所有后续调用CredUIConfirmCredentials时 凭据,返回错误\u无效\u参数。这由以下内容描述: 试图确认等待状态的尝试 凭据失败,因为 包含的凭据无效或无效 数据不一致 这相当令人困惑,因为它们与最初成功保存的凭据完全相同 如果为相同的密码输入不同的密码,则返回相同的结果 用户名。更令人困惑的是,新的凭证 实
EXPECT\u CONFIRMATION
,以及当凭证首先由提供时
调用CredUIConfirmCredentials
的用户返回无错误
但是,在所有后续调用CredUIConfirmCredentials
时
凭据,返回错误\u无效\u参数。这由以下内容描述:
试图确认等待状态的尝试
凭据失败,因为
包含的凭据无效或无效
数据不一致
这相当令人困惑,因为它们与最初成功保存的凭据完全相同
如果为相同的密码输入不同的密码,则返回相同的结果
用户名。更令人困惑的是,新的凭证
实际持久化-这似乎表明返回值是
实际上表明持久化的凭据已被覆盖-不是
这是一个错误。我是遗漏了什么,还是文档
不对
背景 您可以使用Windows的凭据系统为自己的应用程序存储凭据。您告诉Windows要提示某些“目标”的“通用”凭据: 伪代码:
CredUIPromptForCredentials("My Application", ref username, ref password);
然后将使Windows显示一个对话框:
然后,您的工作就是检查用户输入的凭据。如果它们有效,您可以通过调用ConfirmCredentials告诉Windows这一点。这是为了确保只保存有效的凭据:
CredUIConfirmCredentials("My Application", true);
确认凭据有效后,Windows会将其保存在安全存储中,您可以通过控制面板看到:
关键词:credui,CredUIConfirmCredentials我找到了答案:通过设计
CredUIConfirmCredentials
将在“无事可做时”返回错误。这意味着:
- 如果凭据与凭据存储中已有的凭据相同
- 用户没有选中
复选框Rembember my password
- 您没有设置
标志CREDUI\u标志\u EXPECT\u确认
CredUIConfirmCredentials
会失败。(我知道它有文档记录,因为我添加了。)