Win32: CredUIConfirmCredentials ведет себя неожиданно - PullRequest
0 голосов
/ 26 января 2010

Я использую CredUIConfirmCredentials в сочетании с CredUIPromptForCredentials .

I установить EXPECT_CONFIRMATION, а когда учетные данные сначала , предоставленные пользователь звонит на CredUIConfirmCredentials возвращает NO_ERROR , как и ожидалось.

Однако при всех последующих вызовах на CredUIConfirmCredentials, с тем же учетные данные, ERROR_INVALID_PARAMETER возвращается. Это описано SDK docs as :

Попытка подтвердить ожидание учетные данные не удалось, потому что учетные данные содержат недействительные или противоречивые данные.

, что довольно запутанно, поскольку они представляют собой те же учетные данные, которые были успешно сохранены изначально.

Тот же результат возвращается, если вы введете другой пароль для одного и того же имя пользователя. Что еще более запутанно, так это то, что новые учетные данные на самом деле сохраняется - что, кажется, указывает на то, что возвращаемое значение фактически указывает на то, что сохраненные учетные данные были перезаписаны - не что произошла ошибка. Я что-то упустил, или документация неправильно?


Фон

Вы можете использовать систему учетных данных Window для хранения учетных данных для вашего собственного приложения. Вы сообщаете Windows, что хотите запросить учетные данные « generic » для некоторых « target »:

псевдо-код:

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

приведет к тому, что Windows отобразит диалоговое окно:

alt text

Тогда ваша задача - проверить учетные данные, введенные пользователем. Если они действительны, вы сообщаете Windows об этом, вызывая ConfirmCredentials . Это необходимо для сохранения только действительных учетных данных:

CredUIConfirmCredentials("My Application", true);

Как только учетные данные будут подтверждены как действительные, Windows сохранит их в безопасном хранилище, которое вы можете увидеть через Панель управления:

alt text

Ключевые слова: credui, CredUIConfirmCredentials

1 Ответ

1 голос
/ 27 октября 2011

я нашел ответ: по проекту

CredUIConfirmCredentials вернет ошибку "когда нечего делать". Это значит:

  • если учетные данные те же, что и в хранилище учетных данных
  • пользователь не установил флажок Rembember my password
  • Вы не установили флаг CREDUI_FLAGS_EXPECT_CONFIRMATION

Тот факт, что CredUIConfirmCredentials дает сбой, когда учетные данные совпадают с теми, которые уже находятся в хранилище, задокументированном в MSDN. (я знаю, что это задокументировано, потому что я добавил на страницу документации .)

...