У меня есть собственная реализация "поставщика учетных данных Windows".
В некоторых сценариях мои пользовательские учетные данные должны переключаться на учетные данные Windows по умолчанию, а пользователь должен видеть "поставщика учетных данных Windows" для входа в систему.
Как мне это сделать? выйти из моих собственных «учетных данных» и вызвать стандартные «учетные данные Windows»?
Как вызвать учетные данные Windows по умолчанию в моем коде?
Ответы (2)
В новом сценарии поставщиков учетных данных Microsoft Windows вы не можете указать, какой другой поставщик должен использовать пользователь для входа в систему.
Единственное, что вы можете сделать, это принудительно войти в систему, используя вашего собственного провайдера, или отказаться от входа в систему, используя вашего провайдера.
Для этого вы должны:
Установите
pdwDefault
на любое полезное значение, аpbAutoLogonWithDefault
наtrue
внутри вызоваGetCredentialCount
.Установите для параметра
CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE *pcpgsr
внутри методаGetSerialization
одно из следующих значений:CPGSR_RETURN_CREDENTIAL_FINISHED
- to do auto-logon,CPGSR_RETURN_NO_CREDENTIAL_FINISHED
- отменить процесс входа в систему.
В любом случае ваш провайдер (плитка) потеряет фокус. Ознакомьтесь с этим документом.
Обновить
Вы можете удалить своего провайдера из всего процесса входа в систему, вернув значение E_NOTIMPL
внутри вызова метода SetUsageScenario
.
Пользователь и/или интерфейс входа в систему будут вынуждены использовать любого другого существующего провайдера(ов).
CommandLinkClicked
у вас нет шансов, только внутри GetSerialization
.
- person Alexander; 03.06.2019
LogonUI ищет всех «включенных» поставщиков учетных данных в системе и вызывает GetCredentialCount, чтобы получить все учетные данные для каждого конкретного поставщика.
Одна вещь, которую вы можете сделать, это вызвать ICredentialProviderEvents::CredentialsChanged, который попросит logonUI «обновить» плитки. Вы можете отключить своего провайдера и каким-то образом включить провайдера по умолчанию перед вызовом события.
Другой способ сделать это - реализовать свои собственные учетные данные пароля в вашем провайдере, я думаю. Таким образом, вы можете выбрать индекс учетных данных по сравнению с другими.