我正在嘗試撥打CredWrite,但它正在返回ERROR_INVALID_FUNCTION。我可以撥打CredRead從密碼存儲中提取憑證,並且我可以使用CredUIPromptForCredentials存儲新的憑據。CredWrite返回Win32錯誤代碼2(ERROR_INVALID_FUNCTION)「函數不正確。」
但我不知道如何讓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
會投票關閉爲「不再有意義」,因爲顯然有什麼不對發佈的代碼,但該選項不可可以選擇「過於本地化」,因爲只有伊恩知道發生了什麼 – 2010-02-26 03:58:51
是的,我不允許刪除它;而我的粗略瀏覽,雖然原因列表顯示沒有任何原因是正確的。 ,也許完美的功能代碼可以有用的其他人尋找使用CredWrite,特別是從Delphi。 – 2010-02-27 02:51:31