Я пытаюсь вызвать 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
и CRED_PERSIST_LOCAL_MACHINE
, в дополнение к CRED_PERSIST_ENTERPRISE