Win32: CredUIConfirmCredentials se comporta inesperadamente
-
22-09-2019 - |
Pregunta
Estoy usando CredUIConfirmCredentials en combinación con CredUIPromptForCredentials .
I establecer el EXPECT_CONFIRMATION
, y cuando las credenciales están primero proporcionada por
el usuario vuelve a la llamada CredUIConfirmCredentials
NO_ERROR como se esperaba.
Sin embargo, en todas las llamadas posteriores a CredUIConfirmCredentials
, con el mismo
credenciales, ERROR_INVALID_PARAMETER se devuelve. Esto se describe por la
docs SDK como :
Un intento para confirmar una espera credencial falló porque el credencial contenía inválida o datos inconsistentes.
que es bastante confuso, ya que son exactamente las mismas credenciales que se han guardado con éxito en un principio.
El mismo resultado se devuelve si se introduce un diferente contraseña de la misma nombre de usuario. Lo que es aún más confuso es que las nuevas credenciales son En realidad persistido - lo que parece indicar que el valor de retorno es En realidad lo que indica que las credenciales eran persistido sobrescribe - no que había un error. Me estoy perdiendo algo, o es la documentación incorrecto?
Fondo
Puede utilizar el sistema de credenciales de Ventana para almacenar credenciales para su propia aplicación. Usted le dice a Windows que desea pronta para " genéricos " credenciales para algunos " target ":
pseudo-código:
CredUIPromptForCredentials("My Application", ref username, ref password);
A continuación, la causa de Windows para mostrar un cuadro de diálogo:
Es entonces su trabajo para comprobar las credenciales ha introducido el usuario. Si son válidos, es decir Ventanas esto llamando a ConfirmCredentials . Esto es para asegurar que sólo las credenciales válidas se guardan:
CredUIConfirmCredentials("My Application", true);
Una vez que las credenciales han sido confirmadas como válidas, Windows guardarlos en el almacén seguro, que se puede ver a través del panel de control:
Palabras clave: credui, CredUIConfirmCredentials
Solución
He encontrado la respuesta: por diseño
CredUIConfirmCredentials
devolverá un error "cuando no hay nada que hacer". Esto significa que:
- si las credenciales son los mismos que lo que ya está en el almacén de credenciales
- El usuario no marca la casilla de verificación
Rembember my password
- no configuró la bandera
CREDUI_FLAGS_EXPECT_CONFIRMATION
El hecho de que CredUIConfirmCredentials
falla cuando las credenciales son los mismos que lo que ya está en la tienda documentado en MSDN. (Sé que es documentado porque he añadido a la página de documentación .)