CredWrite retourne le code d'erreur Win32 2 (ERROR_INVALID_FUNCTION) « Fonction incorrecte. »

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

  •  22-09-2019
  •  | 
  •  

Question

Je suis en train d'appeler CredWrite , mais il est de retour ERROR_INVALID_FUNCTION . je peux appeler CredRead pour récupérer les informations sur le magasin de mot de passe, et je peux stocker de nouvelles informations d'identification en utilisant CredUIPromptForCredentials .

Mais je ne peux pas comprendre comment obtenir CredWrite travailler.

Le code j'utilise est:

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;

Et GetLastError retourne 1 (ERROR_INVALID_FUNCTION)

est cette fonction incorrecte? Il est même pas revenir ERROR_INVALID_PARAMETER, il est de retour « Dysfonctionnement ». Qu'est-ce que est incorrect?

Y at-il des exemples de code qui il appelle CredWrite?

Remarques

  • je l'ai essayé d'appeler la version Ansi (de CredWriteA), même résultat
  • je l'ai essayé d'utiliser CRED_PERSIST_SESSION et CRED_PERSIST_LOCAL_MACHINE, en plus de CRED_PERSIST_ENTERPRISE
Était-ce utile?

La solution

Nevermind je compris.

Et ce n'est pas la faute de l'appel API, ou mes paramètres.

Je suis tout simplement stupide.

Et je veux bouder au large, sans avoir à dire ce que je l'ai fait: (

Autres conseils

Si pas

 Credentials.Type_ := CRED_TYPE_GENERIC;

Soyez ce lieu?

 Credentials.Type := CRED_TYPE_GENERIC;

Je suis curieux, c'est pour la carte à puce, à droite? et vous stockez la broche non à la carte à puce, peut-être la pièce jointe / pilote n'est pas chargé pour le credwrite de travailler? Peut-être, avec un matériel de carte à puce standard défini / logiciel utilisé par Windows pour activer la fonction CredWrite, je suppose que CredWrite tente de communiquer avec quelque chose (peut-être un appel API générique pour une fonction standard dans le matériel de carte à puce?) ... juste mes pensées ...

Hope this helps, Meilleures salutations, Tom.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top