CredWrite devuelve Win32 código de error 2 (ERROR_INVALID_FUNCTION) “Función incorrecta.”

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

  •  22-09-2019
  •  | 
  •  

Pregunta

Estoy intentando llamar CredWrite , pero se está volviendo ERROR_INVALID_FUNCTION . Puedo llamar CredRead obtener las credenciales de el almacén de contraseñas, y puedo almacenar nuevas credenciales mediante el uso de CredUIPromptForCredentials .

Pero no puedo encontrar la manera de conseguir CredWrite de trabajo.

El código que estoy usando es:

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;

Y GetLastError devuelve 1 (ERROR_INVALID_FUNCTION)

¿Es esta función incorrecta? Ni siquiera es volver ERROR_INVALID_PARAMETER, está volviendo "Función incorrecta". ¿Cuál es incorrecto?

¿Hay algún código de ejemplo por ahí que llama CredWrite?

Notas

  • He intentado llamar a la versión ANSI (CredWriteA), mismo resultado
  • He intentado usar CRED_PERSIST_SESSION y CRED_PERSIST_LOCAL_MACHINE, además de CRED_PERSIST_ENTERPRISE
¿Fue útil?

Solución

No importa, lo he descubierto.

Y no es culpa de la llamada a la API, o mis parámetros.

Sólo soy estúpida.

Y quiero estar de mal humor fuera, sin tener que decir lo que hice: (

Otros consejos

¿No debería esto

 Credentials.Type_ := CRED_TYPE_GENERIC;

Tenga esto en su lugar?

 Credentials.Type := CRED_TYPE_GENERIC;

Tengo curiosidad, esto es para la tarjeta inteligente, ¿verdad? y usted está almacenando el pasador no a la tarjeta inteligente, tal vez el archivo adjunto / no se ha cargado para la CredWrite al trabajo? Tal vez, con un estándar definido de hardware / software de tarjeta inteligente utilizada por las ventanas, se activará la función CredWrite, mi suposición es que CredWrite está tratando de comunicarse con algo (tal vez una llamada a la API genérica para una función estándar en el hardware de tarjeta inteligente?) ... sólo mis pensamientos ...

Espero que esta ayuda, Atentamente, Tom.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top