0

我将CredUIConfirmCredentialsCredUIPromptForCredentials结合使用。

设置了, 并且当用户首次提供EXPECT_CONFIRMATION凭据时,调用返回NO_ERROR按预期。CredUIConfirmCredentials

CredUIConfirmCredentials但是,在使用相同凭据的所有后续调用中,将返回ERROR_INVALID_PARAMETERSDK 文档将其描述为:

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

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

如果您为相同的用户名输入不同的密码,则会返回相同的结果。更令人困惑的是,新凭据实际上是持久化的——这似乎表明返回值实际上表明持久化的凭据被覆盖了——而不是存在错误。我错过了什么,还是文档不正确?


背景

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

伪代码:

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

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

替代文字

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

CredUIConfirmCredentials("My Application", true);

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

替代文字

关键词:credui, CredUIConfirmCredentials

4

1 回答 1

1

我找到了答案:设计使然

CredUIConfirmCredentials将返回错误“当无事可做时”。这表示:

  • 如果凭据与凭据存储中已有的相同
  • 用户没有Rembember my password选中复选框
  • 你没有设置CREDUI_FLAGS_EXPECT_CONFIRMATION标志

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

于 2011-10-26T20:38:47.197 回答