CredWrite возвращает код ошибки Win32 2 (ERROR_INVALID_FUNCTION) «Неверная функция». - PullRequest
0 голосов
/ 26 февраля 2010

Я пытаюсь вызвать 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

Ответы [ 3 ]

1 голос
/ 26 февраля 2010

Неважно, я понял это.

И это не ошибка вызова API или моих параметров.

Я просто тупой.

И я хочу дуться, не говоря, что я сделал: (

0 голосов
/ 26 февраля 2010

Мне любопытно, это для смарт-карты, верно? и вы храните пин-код «нет» на смарт-карте, может быть, приложение / драйвер не загружен для работы credwrite? Возможно, со стандартным аппаратным / программным обеспечением для смарт-карт, используемым Windows, активируется функция CredWrite, я предполагаю, что CredWrite пытается что-то связать (возможно, общий вызов API стандартной функции в оборудовании смарт-карт?) ... просто мои мысли ...

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0 голосов
/ 26 февраля 2010

Разве это не должно

 Credentials.Type_ := CRED_TYPE_GENERIC;

Будет ли это вместо этого?

 Credentials.Type := CRED_TYPE_GENERIC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...