Win32: CredUIConfirmCredentials verhält sich unerwartet
-
22-09-2019 - |
Frage
Ich bin mit CredUIConfirmCredentials in Kombination mit CredUIPromptForCredentials .
ich stellen Sie den EXPECT_CONFIRMATION
, und wenn die Anmeldeinformationen ist erste zur Verfügung gestellt von
der Benutzer den Anruf an CredUIConfirmCredentials
kehrt NO_ERROR , wie erwartet.
Doch auf alle nachfolgenden Anrufe an CredUIConfirmCredentials
, mit dem gleichen
Anmeldeinformationen, ERROR_INVALID_PARAMETER zurückgegeben. Dies wird beschrieben von der
SDK-Dokumentation als :
Ein Versuch, eine Warte zu bestätigen Credential fehlgeschlagen, da die Berechtigungsnachweis enthalten sind ungültig oder inkonsistente Daten.
, die eher verwirrend ist, da sie genau die gleichen Anmeldeinformationen sind, die ursprünglich erfolgreich gespeichert wurden.
Das gleiche Ergebnis wird zurückgegeben, wenn Sie ein anders Passwort für die gleiche eingeben Nutzername. Was noch mehr ist verwirrend ist, dass die neuen Anmeldeinformationen tatsächlich beibehalten - was, dass der Rückgabewert, um anzuzeigen scheint, ist tatsächlich anzeigt, dass die Anmeldeinformationen beibehalten überschrieben waren - nicht dass es ein Fehler. Bin ich etwas fehlt, oder ist die Dokumentation falsch?
Hintergrund
Sie können die Fenster Berechtigungsnachweis-System zum Speichern von Anmeldeinformationen für die eigene Anwendung verwenden. Sie sagen, Sie von Windows gefragt werden soll für " generic " Anmeldeinformationen für einige " target ":
Pseudo-Code:
CredUIPromptForCredentials("My Application", ref username, ref password);
wird dann Ursache von Windows ein Dialogfeld angezeigt werden:
Es ist dann Ihre Aufgabe, die Anmeldeinformationen zu überprüfen, der Benutzer eingegeben hat. Wenn sie gültig sind, sagen Sie Windows diese durch den Aufruf ConfirmCredentials . Damit soll sichergestellt werden, dass nur gültige Anmeldeinformationen gespeichert werden:
CredUIConfirmCredentials("My Application", true);
Sobald die Anmeldeinformationen als gültig bestätigt worden ist, wird Windows sie in den sicheren Speicher speichern, die Sie über die Systemsteuerung sehen:
Stichwort: credui, CredUIConfirmCredentials
Lösung
fand ich die Antwort: durch Design
CredUIConfirmCredentials
einen Fehler zurück „wenn es nichts zu tun“. Das bedeutet:
- , wenn die Anmeldeinformationen sind die gleichen wie, was bereits in dem Speicher der Anmeldeinformationen
- der Benutzer hat die
Rembember my password
Kontrollkästchen nicht überprüfen - Sie die
CREDUI_FLAGS_EXPECT_CONFIRMATION
Flag nicht gesetzt haben
Die Tatsache, dass CredUIConfirmCredentials
schlägt fehl, wenn die Anmeldeinformationen die gleichen wie sind, was bereits im Laden auf MSDN dokumentiert. (Ich weiß, es dokumentiert ist, weil ich hinzugefügt