CredUIConfirmCredentialsをCredUIPromptForCredentialsと組み合わせ て使用しています。
を設定し、ユーザーが最初EXPECT_CONFIRMATION
にクレデンシャルを提供したときに、を呼び出すと期待どおりにNO_ERRORが返されます。CredUIConfirmCredentials
ただし、CredUIConfirmCredentials
同じクレデンシャルを使用した以降のすべての呼び出しで、ERROR_INVALID_PARAMETERが返されます。これは、SDKドキュメントで次のように説明されています。
クレデンシャルに無効または一貫性のないデータが含まれているため、待機中のクレデンシャルを確認しようとして失敗しました。
これは、元々正常に保存されたのとまったく同じクレデンシャルであるため、かなり混乱します。
同じユーザー名に別のパスワードを入力した場合も、同じ結果が返されます。さらに紛らわしいのは、新しいクレデンシャルが実際に永続化されていることです。これは、エラーが発生したことではなく、永続化されたクレデンシャルが実際に上書きされたことを戻り値が示していることを示しているようです。何かが足りないのですか、それともドキュメントが間違っていますか?
バックグラウンド
Windowのクレデンシャルシステムを使用して、独自のアプリケーションのクレデンシャルを保存できます。いくつかの「ターゲット」の「一般的な」クレデンシャルの入力を求めるプロンプトをWindowsに指示します。
擬似コード:
CredUIPromptForCredentials("My Application", ref username, ref password);
次に、Windowsにダイアログボックスが表示されます。
次に、ユーザーが入力した資格情報を確認するのはあなたの仕事です。それらが有効な場合は、ConfirmCredentialsを呼び出してWindowsにこれを通知します。これは、有効な資格情報のみが保存されるようにするためです。
CredUIConfirmCredentials("My Application", true);
クレデンシャルが有効であることが確認されると、Windowsはそれらをセキュアストアに保存します。これは、コントロールパネルで確認できます。
キーワード:credui、CredUIConfirmCredentials