Função CredUICmdLinePromptForCredentialsA (wincred.h)
A função CredUICmdLinePromptForCredentials solicita e aceita informações de credencial de um usuário que trabalha em um aplicativo de linha de comando (console). O nome e a senha digitados pelo usuário são passados de volta para o aplicativo de chamada para verificação.
Sintaxe
CREDUIAPI DWORD CredUICmdLinePromptForCredentialsA(
[in] PCSTR pszTargetName,
[in] PCtxtHandle pContext,
[in, optional] DWORD dwAuthError,
[in, out] PSTR UserName,
[in] ULONG ulUserBufferSize,
[in, out] PSTR pszPassword,
[in] ULONG ulPasswordBufferSize,
[in, out] PBOOL pfSave,
[in] DWORD dwFlags
);
Parâmetros
[in] pszTargetName
Um ponteiro para um cadeia de caracteresterminada nula que contém o nome do destino para as credenciais, normalmente um nome de servidor. Para conexões DFS, essa cadeia de caracteres é do formulário ServerName\ShareName. O parâmetro pszTargetName é usado para identificar as informações de destino e é usado para armazenar e recuperar a credencial.
[in] pContext
Atualmente reservado e deve ser NULL.
[in, optional] dwAuthError
Especifica por que a solicitação de credenciais é necessária. Um chamador pode passar esse parâmetro de erro do Windows, retornado por outra chamada de autenticação, para permitir que a caixa de diálogo acomode determinados erros. Por exemplo, se o código de status expirado da senha for passado, a caixa de diálogo solicitará que o usuário altere a senha na conta.
[in, out] UserName
Um ponteiro para um cadeia de caracteresterminada nula que contém o nome de usuário da credencial. Se uma cadeia de caracteres de comprimento diferente de zero for especificada para pszUserName, o usuário será solicitado apenas para a senha. No caso de credenciais diferentes de nome de usuário/senha, um formato marshaled da credencial pode ser passado. Essa cadeia de caracteres é criada chamando CredMarshalCredential.
Essa função grava o nome fornecido pelo usuário nesse buffer, copiando um máximo de ulUserNameMaxChars caracteres. A cadeia de caracteres nesse formato pode ser convertida no formato nome de usuário/senha chamando a função
Se o sinalizador de CREDUI_FLAGS_DO_NOT_PERSIST não for especificado, o valor retornado nesse parâmetro será de um formulário que não deve ser inspecionado, impresso ou persistente além de passá-lo para CredUIParseUsername. Os resultados subsequentes de CredUIParseUsername só podem ser passados para uma API de autenticação do lado do cliente, como WNetAddConnection ou a API SSP.
[in] ulUserBufferSize
O número máximo de caracteres que podem ser copiados para pszUserName, incluindo a terminação caractere de nulo.
[in, out] pszPassword
Um ponteiro para um cadeia de caracteresterminada nula que contém a senha das credenciais. Se uma cadeia de caracteres de comprimento diferente de zero for especificada para pszPassword, o parâmetro de senha será preenchido previamente com a cadeia de caracteres.
Essa função grava a senha fornecida pelo usuário nesse buffer, copiando um máximo de ulPasswordMaxChars caracteres. Se o sinalizador de CREDUI_FLAGS_DO_NOT_PERSIST não for especificado, o valor retornado nesse parâmetro será de um formulário que não deve ser inspecionado, impresso ou persistente além de passá-lo para uma função de autenticação do lado do cliente, como WNetAddConnection ou uma função SSP.
Quando terminar de usar a senha, desmarque a senha da memória chamando a função SecureZeroMemory. Para obter mais informações sobre como proteger senhas, consulte Manipulando senhas.
[in] ulPasswordBufferSize
O número máximo de caracteres que podem ser copiados para pszPassword, incluindo a terminação caractere de nulo.
[in, out] pfSave
Um ponteiro para um BOOL
[in] dwFlags
Um valor DWORD que especifica um comportamento especial para essa função. Esse valor pode ser uma combinação deOR bit a bit de zero ou mais dos valores a seguir.
Valor | Significado |
---|---|
|
Exiba uma interface do usuário se as credenciais puderem ser retornadas de uma credencial existente no gerenciador de credenciais. Esse sinalizador só será permitido se CREDUI_FLAGS_GENERIC_CREDENTIALS também for especificado e for usado somente em conjunto com CREDUI_FLAGS_GENERIC_CREDENTIALS. |
|
Não exiba a mensagem de salvamento ou as credenciais do repositório.
CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX também pode ser passado para exibir somente a mensagem de salvamento e retornar o resultado em pfSave. |
|
Solicitar nome de usuário/senha. Se o parâmetro pszUserName for especificado, o nome de usuário será omitido. Se a credencial for mantida, armazene o nome de usuário passado com a credencial. |
|
Especifica que o chamador chamará CredUIConfirmCredentials para determinar se as credenciais retornadas são realmente válidas. Isso garante que as credenciais que não são válidas não sejam salvas no gerenciador de credenciais. Especifique esse sinalizador, a menos que CREDUI_FLAGS_DO_NOT_PERSIST seja especificado. |
|
Considere as credenciais inseridas pelo usuário como uma credencial genérica. |
|
Ignore silenciosamente esse sinalizador. |
|
Não mostre a mensagem de salvamento, mas salve a credencial como se o usuário respondeu "y". |
|
Ignore silenciosamente esse sinalizador. |
|
Reservado para uso futuro; não passe esse sinalizador. |
|
Use um cartão inteligente e solicite um PIN. Se mais de um cartão inteligente estiver disponível, selecione um deles. Se o parâmetro pszUserName passar uma cadeia de caracteres que não está vazia, a cadeia de caracteres deverá corresponder ao UPN associado ao certificado em um dos cartões inteligentes. Um UPN corresponde se a cadeia de caracteres corresponder a todo o UPN no certificado ou a cadeia de caracteres corresponder à parte à esquerda do sinal de at (@) no UPN do certificado. Se houver uma correspondência, o cartão inteligente correspondente será selecionado. |
|
Esse sinalizador é significativo apenas na localização de uma credencial correspondente para pré-armazenar a caixa de diálogo, caso a autenticação falhe. Quando esse sinalizador for especificado, as credenciais curinga não serão correspondidas. Ele não tem efeito ao escrever uma credencial. O CredUI não cria credenciais que contêm caracteres curinga. Qualquer um encontrado foi criado explicitamente pelo usuário ou criado programaticamente, como acontece quando uma conexão RAS é feita. |
|
Exiba a mensagem de salvamento e retorne |
|
A credencial é uma credencial executar como. O parâmetro pszTargetName especifica o nome do comando ou programa que está sendo executado. Ele é usado apenas para fins de solicitação. |
Valor de retorno
O valor retornado é um DWORD
Valor | Descrição |
---|---|
|
Esse status é retornado para qualquer uma das combinações de sinalizadores que não são válidas. |
|
pszTargetName é NULL, a cadeia de caracteres vazia ou maior que CREDUI_MAX_DOMAIN_LENGTH ou pUiInfo não é NULL e a estrutura CredUI_INFO apontada não atendia a um dos seguintes requisitos:
|
|
O gerenciador de credenciais não pode ser usado. Normalmente, esse erro é tratado chamando CredUICmdLinePromptForCredentials e passando o sinalizador CREDUI_FLAGS_DO_NOT_PERSIST. |
|
O usuário escolheu OK. As variáveis pszUserName, pszPassworde pfSave retornarão os valores documentados anteriormente. |
Observações
Os sinalizadores CREDUI_FLAGS_REQUIRE_SMARTCARD, CREDUI_FLAGS_REQUIRE_CERTIFICATE e CREDUI_FLAGS_EXCLUDE_CERTIFICATE são mutuamente exclusivos.
Se CREDUI_FLAGS_DO_NOT_PERSIST for especificado, pszTargetName deverá ser especificado ou uiInfo->pszMessageText e uiInfo->pszCaption devem ser especificados.
Os sinalizadores CREDUI_FLAG_USERNAME_TARGET_CREDENTIALS e CREDUI_FLAGS_GENERIC_CREDENTIALS são mutuamente exclusivos. Se nenhum dos dois for especificado, a credencial será uma credencial de domínio.
Se CREDUI_FLAGS_GENERIC_CREDENTIALS não for especificado ou CREDUI_FLAGS_COMPLETE_USERNAME for especificado, o nome digitado será sintaxe verificada. A sintaxe verificada significa que as mesmas regras são usadas como estão implícitas por CredUIParseUseUserName. Se o nome digitado não for válido, o usuário será solicitado a fornecer um nome válido. Se a parte de domínio do nome digitado estiver ausente, uma será fornecida com base no nome de destino.
Se CREDUI_FLAGS_GENERIC_CREDENTIALS for especificado e CREDUI_FLAGS_VALIDATE_USERNAME também for especificado, o nome digitado será verificado. Se o nome digitado não for válido, o usuário será solicitado a fornecer um nome válido.
Se CREDUI_FLAGS_GENERIC_CREDENTIALS for especificado e nem CREDUI_FLAGS_COMPLETE_USERNAME nem CREDUI_FLAGS_VALIDATE_USERNAME for especificado, o nome digitado não será verificado de forma alguma.
Se nem CREDUI_FLAGS_PERSIST nem CREDUI_FLAGS_DO_NOT_PERSIST estiverem definidos, a mensagem de salvamento será mostrada e ela controlará se a credencial é salva ou não.
Se CREDUI_FLAGS_PROMPT_FOR_SAVE for especificado, o parâmetro pfSave
Os sinalizadores CREDUI_FLAGS_REQUIRE_SMARTCARD e CREDUI_FLAGS_EXCLUDE_CERTIFICATES são mutuamente exclusivos. CredUICmdLinePromptForCredentials dá suporte à solicitação de um certificado de cartão inteligente ou uma credencial baseada em senha. Ele não dá suporte a certificados que não são certificados de cartão inteligente ou solicitação para ambos em uma única chamada.
Modos de chamada
- O chamador tentará acessar o recurso de destino, chamar credui (passando uma descrição do recurso de destino e o status de falha), chamar CredUIParseUserName, acessar o recurso de destino novamente e, em seguida, chamar CredUIConfirmCredentials.
- O chamador pode solicitar credenciais sem acessar recursos passando CREDUI_FLAGS_DO_NOT_PERSIST.
Informações de destino são informações sobre o local do recurso a ser acessado. Para obter uma lista de todos os nomes de destino potenciais para um recurso, chame credGetTargetInfo. CredGetTargetInfo retorna informações armazenadas em cache pelo pacote de autenticação Negotiate, NTLM ou Kerberos quando um desses pacotes foi usado para autenticar no destino nomeado. CredGetTargetInfo retorna alguns ou todos os seguintes nomes para o destino:
- Nome do servidor NetBIOS do computador
- Nome do servidor DNS do computador
- Nome de domínio NetBIOS do domínio ao qual o computador pertence
- Nome de domínio DNS do domínio ao qual o computador pertence
- Nome da árvore DNS à qual o computador pertence
- Nome do pacote que coletou as informações
As credenciais são armazenadas no gerenciador de credenciais com base no nome de destino. Cada nome de destino é armazenado o mais geral possível sem colidir com credenciais já armazenadas no gerenciador de credenciais. Um efeito importante do armazenamento de credenciais por nome de destino é que um usuário específico pode ter apenas uma credencial por destino armazenada no gerenciador de credenciais.
Nota
O cabeçalho wincred.h define CredUICmdLinePromptForCredentials como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows XP [somente aplicativos da área de trabalho] |
servidor com suporte mínimo | Windows Server 2003 [somente aplicativos da área de trabalho] |
da Plataforma de Destino |
Windows |
cabeçalho | wincred.h |
biblioteca | Credui.lib |
de DLL |
Credui.dll |
Consulte também
credMarshalCredential