Функция CredUICmdLinePromptForCredentialsA (wincred.h)
Функция CredUICmdLinePromptForCredentials запрашивает и принимает учетные данные от пользователя, работающего в приложении командной строки (консоли). Имя и пароль, введенные пользователем, передаются вызывающей приложению для проверки.
Синтаксис
CREDUIAPI DWORD CredUICmdLinePromptForCredentialsA(
[in] PCSTR pszTargetName,
[in] PCtxtHandle pContext,
[in, optional] DWORD dwAuthError,
[in, out] PSTR UserName,
[in] ULONG ulUserBufferSize,
[in, out] PSTR pszPassword,
[in] ULONG ulPasswordBufferSize,
[in, out] PBOOL pfSave,
[in] DWORD dwFlags
);
Параметры
[in] pszTargetName
Указатель на строку с пустым завершением, которая содержит имя целевого объекта для учетных данных, обычно это имя сервера. Для подключений DFS эта строка имеет вид ServerName\ShareName. Параметр pszTargetName используется для идентификации целевой информации и используется для хранения и извлечения учетных данных.
[in] pContext
В настоящее время зарезервировано и должно иметь значение NULL.
[in, optional] dwAuthError
Указывает, почему требуется запрашивать учетные данные. Вызывающий объект может передать этот параметр ошибки Windows, возвращаемый другим вызовом проверки подлинности, чтобы разрешить в диалоговом окне учесть определенные ошибки. Например, если передается код состояния пароля с истекшим сроком действия, диалоговое окно предложит пользователю изменить пароль в учетной записи.
[in, out] UserName
Указатель на строку, завершающуюся значением NULL, которая содержит имя пользователя учетных данных. Если для pszUserName указана строка ненулевой длины, пользователю будет предложено ввести только пароль. В случае учетных данных, отличных от имени пользователя или пароля, можно передать маршалированные формат учетных данных. Эта строка создается путем вызова CredMarshalCredential.
Эта функция записывает предоставленное пользователем имя в этот буфер, копируя максимум символов ulUserNameMaxChars . Строку в этом формате можно преобразовать в формат имени пользователя или пароля, вызвав функцию CredUIParseUsername . Строка в маршалированного формате может быть передана непосредственно поставщику поддержки безопасности (SSP).
Если флаг CREDUI_FLAGS_DO_NOT_PERSIST не указан, значение, возвращаемое в этом параметре, будет иметь форму, которую не следует проверять, печатать или сохранять, кроме передачи в CredUIParseUsername. Последующие результаты CredUIParseUsername можно передать только в API проверки подлинности на стороне клиента, например WNetAddConnection или API SSP.
[in] ulUserBufferSize
Максимальное число символов, которые можно скопировать в pszUserName , включая завершающий символ NULL .
[in, out] pszPassword
Указатель на строку, завершающуюся значением NULL, которая содержит пароль для учетных данных. Если для pszPassword указана строка ненулевой длины, параметр пароля будет предварительно заполнен строкой.
Эта функция записывает предоставленный пользователем пароль в этот буфер, копируя максимум символов ulPasswordMaxChars . Если флаг CREDUI_FLAGS_DO_NOT_PERSIST не указан, значение, возвращаемое в этом параметре, будет иметь форму, которую не следует проверять, печатать или сохранять, кроме как передавать его в функцию проверки подлинности на стороне клиента, например WNetAddConnection или функцию поставщика общих служб.
Завершив использование пароля, очистите его из памяти, вызвав функцию SecureZeroMemory . Дополнительные сведения о защите паролей см. в разделе Обработка паролей.
[in] ulPasswordBufferSize
Максимальное количество символов, которые можно скопировать в pszPassword , включая завершающий символ NULL .
[in, out] pfSave
Указатель на BOOL , который указывает начальное состояние сообщения Сохранить и получает состояние сообщения Сохранить после ответа пользователя на командную строку. Если pfSave не имеет значение NULL и CredUIPromptForCredentials возвращает NO_ERROR, функция pfSave возвращает состояние сообщения Сохранить . Если указан флаг CREDUI_FLAGS_PERSIST, сообщение "Сохранить " не отображается, но считается "y". Если флаг CREDUI_FLAGS_DO_NOT_PERSIST указан, а CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX не указан, сообщение Сохранить не отображается, но считается "n".
[in] dwFlags
Значение DWORD , указывающее специальное поведение для этой функции. Это значение может быть побитовой или комбинацией нуля или нескольких следующих значений.
Значение | Значение |
---|---|
|
Отображение пользовательского интерфейса, если учетные данные могут быть возвращены из существующих учетных данных в диспетчере учетных данных. Этот флаг разрешен, только если CREDUI_FLAGS_GENERIC_CREDENTIALS также указан и используется только в сочетании с CREDUI_FLAGS_GENERIC_CREDENTIALS. |
|
Не отображайте сообщение о сохранении или не храните учетные данные.
CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX также можно передать для отображения только сообщения сохранения и возврата результата в pfSave. |
|
Запрос имени пользователя или пароля. Если указан параметр pszUserName , имя пользователя опущено. Если учетные данные сохраняются, сохраните переданное имя пользователя вместе с учетными данными. |
|
Указывает, что вызывающий объект вызовет CredUIConfirmCredentials , чтобы определить, действительно ли возвращенные учетные данные действительны. Это гарантирует, что недопустимые учетные данные не будут сохранены в диспетчере учетных данных. Укажите этот флаг, если не указан CREDUI_FLAGS_DO_NOT_PERSIST. |
|
Учетные данные, введенные пользователем, считаются универсальными. |
|
Этот флаг игнорируется автоматически. |
|
Не показывать сообщение о сохранении, но сохраните учетные данные так, как если бы пользователь ответил "y". |
|
Этот флаг игнорируется автоматически. |
|
Зарезервировано для использования в будущем; не передавать этот флаг. |
|
Используйте смарт-карта и запросите ПИН-код. Если доступно несколько интеллектуальных карта, выберите один из них. Если параметр pszUserName передает строку, которая не является пустой, строка должна соответствовать имени участника-пользователя, связанному с сертификатом на одной из смарт-карт. Имя участника-пользователя совпадает, если строка соответствует всему имени участника-пользователя в сертификате или строка соответствует части слева от знака (@) в имени участника-пользователя сертификата. Если совпадение есть, выбирается соответствующий смарт-карта. |
|
Этот флаг имеет смысл только при поиске соответствующих учетных данных для предварительного заполнения диалогового окна в случае сбоя проверки подлинности. Если этот флаг указан, учетные данные с подстановочными знаками не будут совпадать. Это не влияет на запись учетных данных. CredUI не создает учетные данные, содержащие подстановочные знаки. Все найденные были созданы явным образом пользователем или программным способом, как это происходит при подключении RAS. |
|
Отображение сообщения о сохранении и возврат true в параметре pfSave out, если пользователь отвечает "y", false , если пользователь отвечает "n". для использования этого флага необходимо указать CREDUI_FLAGS_DO_NOT_PERSIST. |
|
Учетные данные являются учетными данными запуска от имени. Параметр pszTargetName указывает имя выполняемой команды или программы. Он используется только в целях запроса. |
Возвращаемое значение
Возвращаемое значение является DWORD и может быть одним из следующих значений.
Значение | Описание |
---|---|
|
Это состояние возвращается для любого из недопустимых сочетаний флагов. |
|
Либо pszTargetName имеет значение NULL, пустая строка или длиннее CREDUI_MAX_DOMAIN_LENGTH, либо pUiInfo не имеет значения NULL , а указанная структура CredUI_INFO не соответствует одному из следующих требований:
|
|
Нельзя использовать диспетчер учетных данных. Как правило, эта ошибка обрабатывается путем вызова CredUICmdLinePromptForCredentials и передачи флага CREDUI_FLAGS_DO_NOT_PERSIST. |
|
Пользователь выбрал ОК. Переменные pszUserName, pszPassword и pfSave возвращают задокументированные ранее значения. |
Комментарии
Флаги CREDUI_FLAGS_REQUIRE_SMARTCARD, CREDUI_FLAGS_REQUIRE_CERTIFICATE и CREDUI_FLAGS_EXCLUDE_CERTIFICATE являются взаимоисключающими.
Если указан CREDUI_FLAGS_DO_NOT_PERSIST, необходимо указать либо pszTargetName, либо uiInfo-pszMessageText> и uiInfo-pszCaption>.
Флаги CREDUI_FLAG_USERNAME_TARGET_CREDENTIALS и CREDUI_FLAGS_GENERIC_CREDENTIALS являются взаимоисключающими. Если они не указаны, учетные данные являются учетными данными домена.
Если CREDUI_FLAGS_GENERIC_CREDENTIALS не указан или CREDUI_FLAGS_COMPLETE_USERNAME указано, проверяется синтаксис типизированного имени. Проверенный синтаксис означает, что используются те же правила, что и CredUIParseUserName. Если введенное имя является недопустимым, пользователю будет предложено ввести допустимое. Если доменная часть типизированного имени отсутствует, она будет указана на основе целевого имени.
Если CREDUI_FLAGS_GENERIC_CREDENTIALS указан и CREDUI_FLAGS_VALIDATE_USERNAME также указан, проверяется синтаксис типизированного имени. Если введенное имя является недопустимым, пользователю будет предложено ввести допустимое.
Если указано CREDUI_FLAGS_GENERIC_CREDENTIALS и не указан ни CREDUI_FLAGS_COMPLETE_USERNAME, ни CREDUI_FLAGS_VALIDATE_USERNAME, то синтаксическая проверка не выполняется.
Если ни CREDUI_FLAGS_PERSIST, ни CREDUI_FLAGS_DO_NOT_PERSIST не заданы, отображается сообщение о сохранении, которое определяет, сохраняются ли учетные данные.
Если указан CREDUI_FLAGS_PROMPT_FOR_SAVE, параметр pfSave не должен иметь значение NULL.
Флаги CREDUI_FLAGS_REQUIRE_SMARTCARD и CREDUI_FLAGS_EXCLUDE_CERTIFICATES являются взаимоисключающими. CredUICmdLinePromptForCredentials поддерживает запрос на ввод сертификата смарт-карта или учетных данных на основе пароля. Он не поддерживает сертификаты, которые не являются смарт-карта сертификатами или запрашивают оба сертификата при одном вызове.
Режимы вызова
- Вызывающий объект попытается получить доступ к целевому ресурсу, вызовет credui (передав описание целевого ресурса и состояние сбоя), вызовет CredUIParseUserName, снова обращается к целевому ресурсу, а затем вызывает CredUIConfirmCredentials.
- Вызывающий объект может запрашивать учетные данные без доступа к ресурсам путем передачи CREDUI_FLAGS_DO_NOT_PERSIST.
Целевые сведения — это сведения о расположении ресурса для доступа. Чтобы получить список всех потенциальных целевых имен для ресурса, вызовите CredGetTargetInfo. CredGetTargetInfo возвращает сведения, кэшированные пакетом проверки подлинности Negotiate, NTLM или Kerberos, когда один из этих пакетов использовался для проверки подлинности в именованный целевой объект. CredGetTargetInfo возвращает некоторые или все следующие имена для целевого объекта:
- NetBIOS-имя сервера компьютера
- Имя DNS-сервера компьютера
- NetBIOS-имя домена, к которому принадлежит компьютер
- DNS-имя домена, к которому принадлежит компьютер
- DNS-имя дерева, к которому принадлежит компьютер
- Имя пакета, который собрал сведения
Учетные данные хранятся в диспетчере учетных данных на основе целевого имени. Каждое имя целевого объекта хранится как можно чаще, не сталкиваясь с учетными данными, которые уже хранятся в диспетчере учетных данных. Важным эффектом хранения учетных данных по имени целевого объекта является то, что у конкретного пользователя может быть только одна учетная запись для каждого целевого объекта, хранящегося в диспетчере учетных данных.
Примечание
Заголовок wincred.h определяет CredUICmdLinePromptForCredentials в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | wincred.h |
Библиотека | Credui.lib |
DLL | Credui.dll |