CredWrite retorna o código de erro 2 do Win32 (ERROR_INVALID_FUNCTION) “Função incorreta”.

StackOverflow https://stackoverflow.com/questions/2337672

  •  22-09-2019
  •  | 
  •  

Pergunta

estou tentando ligar CredWrite, mas está voltando ERROR_INVALID_FUNCTION.eu posso ligar CredRead para buscar credenciais do armazenamento de senhas e posso armazenar novas credenciais usando CredUIPromptForCredentials.

Mas não consigo descobrir como fazer o CredWrite funcionar.

O código que estou usando é:

var
   Target, Username, Password: WideString;
begin
   Target := 'StackOverflowSomething';
   Username := 'IanBoyd'; 
   Password := 'password69';

   ZeroMemory(@Credentials, SizeOf(Credentials));

   Credentials.TargetName := PWideChar(Target);
   Credentials.Type_ := CRED_TYPE_GENERIC;
   Credentials.UserName := PWideChar(Username);
   Credentials.Persist := CRED_PERSIST_ENTERPRISE;
   Credentials.CredentialBlob := PByte(Password);
   Credentials.CredentialBlobSize := 2*(Length(Password));
   Credentials.UserName := PWideChar(Username);

   if not CredWriteW(@Credentials, 0) then
      RaiseLastWin32Error;

E GetLastError está retornando 1 (ERROR_INVALID_FUNCTION)

Esta função está incorreta?Não está nem voltando ERROR_INVALID_PARAMETER, está retornando "Função incorreta".O que está incorreto?

Existe algum código de exemplo que chame CredWrite?

Notas

  • tentei chamar a versão Ansi (CredWriteA), mesmo resultado
  • eu tentei usar CRED_PERSIST_SESSION e CRED_PERSIST_LOCAL_MACHINE, além de CRED_PERSIST_ENTERPRISE
Foi útil?

Solução

Não preciso, eu descobri.

E não é culpa da chamada da API ou dos meus parâmetros.

Eu sou apenas estúpido.

E eu quero ficar de mau humor, sem ter que dizer o que fiz :(

Outras dicas

Isso não deveria

 Credentials.Type_ := CRED_TYPE_GENERIC;

Em vez disso, será isso?

 Credentials.Type := CRED_TYPE_GENERIC;

Estou curioso, isso é para o cartão inteligente, certo? E você está armazenando o pino não no cartão inteligente, talvez o anexo/driver não esteja carregado para que o credwrite funcione? Talvez, com um hardware/software SmartCard definido padrão usado pelo Windows ativar a função Credwrite, meu palpite é que o Credwrite está tentando se comunicar com algo (talvez uma chamada genérica de API para uma função padrão dentro do hardware do Smartcard?) ... apenas meus pensamentos...

Espero que isso ajude, cumprimentos, Tom.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top