Как вызвать учетные данные Windows по умолчанию в моем коде?

У меня есть собственная реализация "поставщика учетных данных Windows".
В некоторых сценариях мои пользовательские учетные данные должны переключаться на учетные данные Windows по умолчанию, а пользователь должен видеть "поставщика учетных данных Windows" для входа в систему.
Как мне это сделать? выйти из моих собственных «учетных данных» и вызвать стандартные «учетные данные Windows»?


person rashid    schedule 15.05.2019    source источник
comment
Пользовательский интерфейс входа? Версия Windows? Если вы не видите плитку поставщика учетных данных по умолчанию, вы, скорее всего, отключили его.   -  person Kianii    schedule 15.05.2019
comment
Нет, проблема в том, как вызвать (запустить) другие учетные данные (в этом вопросе учетные данные Windows) и выйти из текущих учетных данных? проблема в любой версии винды. Спасибо   -  person rashid    schedule 15.05.2019


Ответы (2)


В новом сценарии поставщиков учетных данных Microsoft Windows вы не можете указать, какой другой поставщик должен использовать пользователь для входа в систему.

Единственное, что вы можете сделать, это принудительно войти в систему, используя вашего собственного провайдера, или отказаться от входа в систему, используя вашего провайдера.

Для этого вы должны:

  1. Установите pdwDefault на любое полезное значение, а pbAutoLogonWithDefault на true внутри вызова GetCredentialCount.

  2. Установите для параметра CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE *pcpgsr внутри метода GetSerialization одно из следующих значений:

    • CPGSR_RETURN_CREDENTIAL_FINISHED - to do auto-logon,
    • CPGSR_RETURN_NO_CREDENTIAL_FINISHED - отменить процесс входа в систему.

В любом случае ваш провайдер (плитка) потеряет фокус. Ознакомьтесь с этим документом.

Обновить

Вы можете удалить своего провайдера из всего процесса входа в систему, вернув значение E_NOTIMPL внутри вызова метода SetUsageScenario.

Пользователь и/или интерфейс входа в систему будут вынуждены использовать любого другого существующего провайдера(ов).

person Alexander    schedule 16.05.2019
comment
Большое спасибо! пожалуйста, объясните мне, как я могу получить доступ к переменной *pcpgsr и изменить ее в CommandLinkClicked(DWORD dwFieldID)? я могу получить к нему доступ только тогда, когда GetSerialization() вызывается провайдером. - person rashid; 26.05.2019
comment
Внутри обработчика событий CommandLinkClicked у вас нет шансов, только внутри GetSerialization. - person Alexander; 03.06.2019

LogonUI ищет всех «включенных» поставщиков учетных данных в системе и вызывает GetCredentialCount, чтобы получить все учетные данные для каждого конкретного поставщика.

Одна вещь, которую вы можете сделать, это вызвать ICredentialProviderEvents::CredentialsChanged, который попросит logonUI «обновить» плитки. Вы можете отключить своего провайдера и каким-то образом включить провайдера по умолчанию перед вызовом события.

Другой способ сделать это - реализовать свои собственные учетные данные пароля в вашем провайдере, я думаю. Таким образом, вы можете выбрать индекс учетных данных по сравнению с другими.

person Kianii    schedule 15.05.2019