我在用着 CredUIConfirmCredentials 结合CredUIPromptForCredentials.

设置 EXPECT_CONFIRMATION, ,并且当凭证是 第一的 由用户提供的电话 CredUIConfirmCredentials 回报 无错误 正如预期的那样。

但是,在所有后续调用中 CredUIConfirmCredentials, ,具有相同的证书, 错误_无效_参数 被返回。这是由 SDK文档为:

试图确认等待凭据失败,因为凭证包含无效或不一致的数据。

这相当令人困惑,因为它们与最初成功保存的凭据完全相同。

如果您输入 a,则会返回相同的结果 不同的 相同用户名的密码。更令人困惑的是,新的凭据实际上是持续存在的 - 这似乎表明返回值实际上表明持续的凭据被覆盖了 - 不是有错误。我是否缺少某些东西,还是文档不正确?


背景

您可以使用 Window 的凭据系统来存储您自己的应用程序的凭据。您告诉 Windows 您想要提示“通用的“某些人的凭据”目标":

伪代码:

CredUIPromptForCredentials("My Application", ref username, ref password);

然后 Windows 将显示一个对话框:

alt text

然后您的工作就是检查用户输入的凭据。如果它们有效,您可以通过调用告诉 Windows 确认凭证. 。这是为了确保仅保存有效的凭据:

CredUIConfirmCredentials("My Application", true);

一旦凭证被确认有效,Windows 会将它们保存在安全存储中,您可以通过控制面板查看:

alt text

关键词:credui、CredUIConfirmCredentials

有帮助吗?

解决方案

我找到了答案:按设计

CredUIConfirmCredentials 将返回错误“当无事可做时”。这意味着:

  • 如果凭证与凭证存储中已有的凭证相同
  • 用户没有检查 Rembember my password 复选框
  • 你没有设置 CREDUI_FLAGS_EXPECT_CONFIRMATION 旗帜

事实是 CredUIConfirmCredentials 当凭据与 MSDN 上记录的商店中已有的凭据相同时,会失败。(我知道它已记录在案,因为我添加了 文档页面.)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top