Поскольку вы пишете провайдер учетных данных, вы уже реализуете интерфейс ICredentialProvider
и его метод Advise
:
virtual HRESULT STDMETHODCALLTYPE Advise(
/* [annotation][in] */
_In_ ICredentialProviderEvents *pcpe,
/* [annotation][in] */
_In_ UINT_PTR upAdviseContext) = 0;
Первый аргумент - указатель на интерфейс событий ICredentialProviderEvents
, который имеет только один метод: CredentialsChanged
.
Ваша задача - получить учетные данные от пользователя (логин / пароль), сохранить их внутри своих внутренних устройств и вызвать этот метод.
На следующем ходу ваш провайдер будет называться следующим методом:
virtual HRESULT STDMETHODCALLTYPE GetCredentialCount(
/* [annotation][out] */
_Out_ DWORD *pdwCount,
/* [annotation][out] */
_Out_ DWORD *pdwDefault,
/* [annotation][out] */
_Out_ BOOL *pbAutoLogonWithDefault) = 0;
Ваша задача - вернуть правильные значения в параметрах pdwDefault
и pbAutoLogonWithDefault
(я предлагаю 0
и TRUE
).
Тогда ваш класс, реализующий интерфейс ICredentialProviderCredential
, будет немедленно вызван для метода GetSerialization
.
Здесь вы можете вернуть уже сохраненные учетные данные.