我正在使用CredUIConfirmCredentials CredUIPromptForCredentials
I设置EXPECT_CONFIRMATION
,当凭据第一次时提供
用户对CredUIConfirmCredentials
的调用按预期返回 NO_ERROR 。
然而,在对CredUIConfirmCredentials
的所有后续调用中,都是相同的
凭据,返回 ERROR_INVALID_PARAMETER 。这由the
SDK docs as描述:
尝试确认等待 凭证失败,因为 凭证包含无效或 不一致的数据。
这相当令人困惑,因为它们与最初成功保存的凭据完全相同。
如果您输入相同的不同密码,则会返回相同的结果 用户名。更令人困惑的是,新的凭证是 实际上是持久的 - 这似乎表明返回值是 实际上表明持久化的凭据被覆盖 - 不是 那是一个错误。我错过了什么,或者是文档 不正确的?
您可以使用Window的凭据系统来存储您自己的应用程序的凭据。您告诉Windows,您要为某些“目标”提示“通用”凭据:
伪码:
CredUIPromptForCredentials("My Application", ref username, ref password);
然后将导致Windows显示一个对话框:
alt text http://i50.tinypic.com/28a1gdi.jpg
然后,您的工作是检查用户输入的凭据。如果它们有效,您可以通过调用 ConfirmCredentials 告诉Windows。这是为了确保只保存有效的凭据:
CredUIConfirmCredentials("My Application", true);
一旦确认凭据有效,Windows就会将它们保存在安全存储中,您可以通过控制面板查看:
alt text http://i48.tinypic.com/2vi3wxu.jpg
关键词:credui,CredUIConfirmCredentials
答案 0 :(得分:1)
我找到答案:按设计
CredUIConfirmCredentials
会在“无事可做”时返回错误。这意味着:
Rembember my password
复选框CREDUI_FLAGS_EXPECT_CONFIRMATION
标志当凭据与MSDN上记录的商店中已有的凭据相同时,CredUIConfirmCredentials
失败。 (我知道它已被记录,因为我已添加到the documentation page。)