Win32:CredUIConfirmCredentials 行为异常
-
22-09-2019 - |
题
我在用着 CredUIConfirmCredentials 结合CredUIPromptForCredentials.
我 设置 EXPECT_CONFIRMATION
, ,并且当凭证是 第一的 由用户提供的电话 CredUIConfirmCredentials
回报 无错误 正如预期的那样。
但是,在所有后续调用中 CredUIConfirmCredentials
, ,具有相同的证书, 错误_无效_参数 被返回。这是由 SDK文档为:
试图确认等待凭据失败,因为凭证包含无效或不一致的数据。
这相当令人困惑,因为它们与最初成功保存的凭据完全相同。
如果您输入 a,则会返回相同的结果 不同的 相同用户名的密码。更令人困惑的是,新的凭据实际上是持续存在的 - 这似乎表明返回值实际上表明持续的凭据被覆盖了 - 不是有错误。我是否缺少某些东西,还是文档不正确?
背景
您可以使用 Window 的凭据系统来存储您自己的应用程序的凭据。您告诉 Windows 您想要提示“通用的“某些人的凭据”目标":
伪代码:
CredUIPromptForCredentials("My Application", ref username, ref password);
然后 Windows 将显示一个对话框:
然后您的工作就是检查用户输入的凭据。如果它们有效,您可以通过调用告诉 Windows 确认凭证. 。这是为了确保仅保存有效的凭据:
CredUIConfirmCredentials("My Application", true);
一旦凭证被确认有效,Windows 会将它们保存在安全存储中,您可以通过控制面板查看:
关键词:credui、CredUIConfirmCredentials
解决方案
我找到了答案:按设计
CredUIConfirmCredentials
将返回错误“当无事可做时”。这意味着:
- 如果凭证与凭证存储中已有的凭证相同
- 用户没有检查
Rembember my password
复选框 - 你没有设置
CREDUI_FLAGS_EXPECT_CONFIRMATION
旗帜
事实是 CredUIConfirmCredentials
当凭据与 MSDN 上记录的商店中已有的凭据相同时,会失败。(我知道它已记录在案,因为我添加了 文档页面.)