CredWrite retorna o código de erro 2 do Win32 (ERROR_INVALID_FUNCTION) “Função incorreta”.
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
eCRED_PERSIST_LOCAL_MACHINE
, além deCRED_PERSIST_ENTERPRISE
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.