我想叫 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;

与。是回1(ERROR_INVALID_FUNCTION)

是这样的功能不正确的?它甚至没有回来 ERROR_INVALID_PARAMETER, ,这是返回的"不正确的功能"。什么是不正确的?

是否有任何代码样本,呼吁CredWrite?

注意到

  • 我试着打电话给Ansi版本(CredWriteA),同样的结果
  • 我已经试过使用 CRED_PERSIST_SESSIONCRED_PERSIST_LOCAL_MACHINE, ,在外 CRED_PERSIST_ENTERPRISE
有帮助吗?

解决方案

没关系,我想通了。

它不出故障的API调,或者我的参数。

我只是愚蠢的。

我想要生气断,而不必说什么我做的:(

其他提示

不应该这样

 Credentials.Type_ := CRED_TYPE_GENERIC;

是这个吗?

 Credentials.Type := CRED_TYPE_GENERIC;

我很好奇,这是为智能卡,对吗?和你在储存的销,没有智能卡上,或许附件/司机是不是载于credwrite工作?也许,有一个标准的定义智能卡的硬件/软件使用的windows将激活CredWrite功能,我猜是,CredWrite是试图通信的东西(也许是一个通用的API叫到一个标准功能的内的智能卡的硬件?)...只是我的想法...

希望这会有所帮助, 最好的问候, 汤姆。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top