Win32:CredUIConfirmCredentials se comporta inesperadamente
-
22-09-2019 - |
Pergunta
estou a usar CredUIConfirmCredenciais em combinação comCredUIPromptForCredentials.
EU colocou o EXPECT_CONFIRMATION
, e quando as credenciais são primeiro Fornecido pelo usuário a chamada para CredUIConfirmCredentials
retorna NO_ERROR como esperado.
No entanto, em todas as chamadas subsequentes para CredUIConfirmCredentials
, com as mesmas credenciais, ERROR_INVALID_PARAMETER é retornado.Isto é descrito por o SDK docs como:
Uma tentativa de confirmar uma credencial de espera falhou porque a credencial continha dados inválidos ou inconsistentes.
o que é bastante confuso, pois são exatamente as mesmas credenciais que foram salvas originalmente com sucesso.
O mesmo resultado é retornado se você inserir um diferente Senha para o mesmo nome de usuário.O que é ainda mais confuso é que as novas credenciais são realmente persistidas - o que parece indicar que o valor de retorno está realmente indicando que as credenciais persistidas foram substituídas - não que houve um erro.Estou perdendo alguma coisa ou a documentação está incorreta?
Fundo
Você pode usar o sistema de credenciais do Windows para armazenar credenciais para seu próprio aplicativo.Você diz ao Windows que deseja solicitar "genérico"credenciais para alguns"alvo":
pseudo-código:
CredUIPromptForCredentials("My Application", ref username, ref password);
fará com que o Windows exiba uma caixa de diálogo:
É então sua função verificar as credenciais que o usuário inseriu.Se eles forem válidos, você informa isso ao Windows ligando para Confirmar credenciais.Isso é para garantir que apenas credenciais válidas sejam salvas:
CredUIConfirmCredentials("My Application", true);
Assim que as credenciais forem confirmadas como válidas, o Windows as salvará no armazenamento seguro, que você pode ver no Painel de Controle:
Palavras-chave:credui, CredUIConfirmCredentials
Solução
encontrei a resposta:por design
CredUIConfirmCredentials
retornará um erro "quando não houver nada para fazer".Isso significa:
- se as credenciais forem iguais às que já estão no armazenamento de credenciais
- o usuário não verificou o
Rembember my password
caixa de seleção - você não definiu o
CREDUI_FLAGS_EXPECT_CONFIRMATION
bandeira
O fato de que CredUIConfirmCredentials
falha quando as credenciais são as mesmas que já estão no armazenamento documentado no MSDN.(eu sei que está documentado porque adicionei a página de documentação.)