CredWrite は Win32 エラー コード 2 (ERROR_INVALID_FUNCTION)「関数が正しくありません。」を返します。
質問
電話しようとしています クレドライト, 、しかし戻ってきています エラー_無効_機能. 。電話できます 信用読み取り パスワード ストアから資格情報を取得し、次を使用して新しい資格情報を保存できます。 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呼び出し?)...ちょうど私の考え...
希望このことができます、 宜しくお願いします、 トムます。