我正在尝试调用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_SESSION
andCRED_PERSIST_LOCAL_MACHINE
,除了CRED_PERSIST_ENTERPRISE