Win32: CredUIConfirmCredentials si comporta in modo imprevisto
-
22-09-2019 - |
Domanda
CredUIConfirmCredentials in combinazione con CredUIPromptForCredentials .
ho impostato il EXPECT_CONFIRMATION
, e quando le credenziali sono prima fornito da
l'utente la chiamata a CredUIConfirmCredentials
rendimenti NO_ERROR come previsto.
Tuttavia, su tutte le chiamate successive a CredUIConfirmCredentials
, con la stessa
le credenziali, ERROR_INVALID_PARAMETER viene restituito. Questo è descritto da la
docs SDK come :
Un tentativo di confermare un'attesa credenziale non riuscita perché la credenziale conteneva valida o dati incoerenti.
che è piuttosto confusa in quanto sono esattamente le stesse credenziali che sono state salvate con successo in origine.
Lo stesso risultato viene restituito se si entra in un diverso la password per lo stesso nome utente. Che cosa è ancora più confusa è che le nuove credenziali sono in realtà persistito - che sembra indicare che il valore di ritorno è in realtà indica che le credenziali persistenti sono stati sovrascritti - non che c'era un errore. Mi sto perdendo qualcosa, o è la documentazione errato?
Sfondo
È possibile utilizzare il sistema di credenziali di finestra per archiviare le credenziali per la propria applicazione. Dite di Windows si desidera richiedere per " generici " credenziali per un po ' " obiettivo ":
pseudo-codice:
CredUIPromptForCredentials("My Application", ref username, ref password);
sarà poi causare Windows per visualizzare una finestra di dialogo:
E 'quindi il vostro lavoro per controllare le credenziali che l'utente ha inserito. Se sono validi, dici di Windows questo chiamando ConfirmCredentials . Questo per garantire che solo le credenziali valide vengono salvate:
CredUIConfirmCredentials("My Application", true);
Una volta che le credenziali sono stati confermati come validi, Windows li salverà nel negozio sicuro, che si può vedere attraverso il pannello di controllo:
Parole chiave: credui, CredUIConfirmCredentials
Soluzione
Ho trovato la risposta: in base alla progettazione
CredUIConfirmCredentials
restituirà un errore "quando non c'è niente da fare". Ciò significa:
- se le credenziali sono le stesse di ciò che è già in archivio credenziali
- l'utente non controllare la casella di controllo
Rembember my password
- non è stato impostato il flag
CREDUI_FLAGS_EXPECT_CONFIRMATION
Il fatto che CredUIConfirmCredentials
fallisce quando le credenziali sono le stesse di ciò che è già presente nel negozio documentato su MSDN. (Lo so che è documentato perché ho aggiunto a la pagina di documentazione .)