CredWrite devuelve Win32 código de error 2 (ERROR_INVALID_FUNCTION) “Función incorrecta.”
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
yCRED_PERSIST_LOCAL_MACHINE
, además deCRED_PERSIST_ENTERPRISE
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.