0

私はCredWriteを呼び出そうとしていますが、 ERROR_INVALID_FUNCTIONを返しています。CredReadを呼び出してパスワード ストアから資格情報をフェッチし、CredUIPromptForCredentialsを使用して新しい資格情報を保存できます。

しかし、CredWrite を機能させる方法がわかりません。

私が使用しているコードは次のとおりです。

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;

そして GetLastError は 1 ( ERROR_INVALID_FUNCTION)を返しています

この関数は間違っていますか? を返すことすらありませんERROR_INVALID_PARAMETER。「正しくない関数」を返します。何が間違っていますか?

CredWrite を呼び出すサンプル コードはありますか?

ノート

  • Ansi バージョン (CredWriteA) を呼び出してみましたが、同じ結果です
  • 私は と を使ってみましCRED_PERSIST_SESSIONCRED_PERSIST_LOCAL_MACHINEに加えてCRED_PERSIST_ENTERPRISE
4

3 に答える 3

1

気にしないで、私はそれを理解しました。

そして、それは API 呼び出しや私のパラメーターのせいではありません。

私はただ愚かです。

そして、私が何をしたかを言うことなく、私は不機嫌になりたいです:(

于 2010-02-25T23:25:25.020 に答える
0

これはいけません

 Credentials.Type_ := CRED_TYPE_GENERIC;

代わりにこれ?

 Credentials.Type := CRED_TYPE_GENERIC;
于 2010-02-25T21:22:05.180 に答える
0

気になるのですが、これはスマートカード用ですよね?ピン番号をスマートカードに保存していますが、クレジット書き込みが機能するためにアタッチメント/ドライバーがロードされていない可能性がありますか? おそらく、Windows で使用される標準定義のスマートカード ハードウェア/ソフトウェアが CredWrite 関数をアクティブにすると、CredWrite が何かと通信しようとしていると思います (おそらく、スマートカード ハードウェア内の標準関数への汎用 API 呼び出しですか?)...私の考え...

これがお役に立てば幸いです。よろしくお願いします、トム。

于 2010-02-25T21:28:19.330 に答える