Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Win32:CredUIConfirmCredentials的行为异常_Windows_Security_Credentials_Credui - Fatal编程技术网

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确认
    标志
当凭证与MSDN上记录的存储中的凭证相同时,
CredUIConfirmCredentials
会失败。(我知道它有文档记录,因为我添加了。)