CredWrite は Win32 エラー コード 2 (ERROR_INVALID_FUNCTION)「関数が正しくありません。」を返します。

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

  •  22-09-2019
  •  | 
  •  

質問

電話しようとしています クレドライト, 、しかし戻ってきています エラー_無効_機能. 。電話できます 信用読み取り パスワード ストアから資格情報を取得し、次を使用して新しい資格情報を保存できます。 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_SESSION そして CRED_PERSIST_LOCAL_MACHINE, 、 に加えて CRED_PERSIST_ENTERPRISE
役に立ちましたか?

解決

ネヴァーマインドは、私はそれを考え出します。

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

私は愚かだ。

と私は私が何をしたかと言うすることなく、オフ不機嫌にしたい:(

他のヒント

べきではありません。この

 Credentials.Type_ := CRED_TYPE_GENERIC;

は、この代わりに?

 Credentials.Type := CRED_TYPE_GENERIC;
私は好奇心、これは、スマートカードのために右でありますか?あなたは、スマートカードに何のピンを保存していると、多分アタッチメント/ドライバは仕事にcredwriteのためにセットされていませんか?標準はCredWrite機能を起動するWindowsで使用されるスマートカードのハードウェア/ソフトウェアを定義して、おそらく、私の推測では、CredWriteが何かと通信しようとしていることである(スマートカード、ハードウェア内の標準機能に、おそらく一般的なAPI呼び出し?)...ちょうど私の考え...

希望このことができます、 宜しくお願いします、 トムます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top