Отображение поставщика учетных данных V2 на плитке «Другой пользователь»

Я пытаюсь написать собственный поставщик учетных данных Windows. Я скачал Образец провайдера учетных данных V2 и я могу построить, зарегистрировать и использовать его.

Для тестирования я установил экземпляр Windows 8.1 hyper-v и присоединился к Windows.
тестовый домен.

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

Документация (Изменения в структуре провайдера учетных данных в Windows 8.docx)
предоставляет небольшой фрагмент:

// Gets the SID of the user corresponding to the credential. HRESULT CSampleCredential::GetUserSid(__deref_out PWSTR *ppszSid)
{
*ppszSid = nullptr;
HRESULT hr = E_UNEXPECTED;

// _pszUserSid is a private member of CSampleCredential
if (_pszUserSid != nullptr)
{
// ppszSid will be freed by Logon UI
hr = SHStrDupW(_pszUserSid, ppszSid);
}
// Return S_FALSE with a null SID in ppszSid for the
// credential to be associated with an anonymous user tile.
else if (_fIsOtherUserTile)
{
hr = S_FALSE;
}

return hr;
}

Я не уверен, откуда приходит _fIsOtherUserTile. Если я игнорирую это
и просто установите для hr значение S_FALSE, поставщик учетных данных все еще не отображается на
плитка «Другой пользователь».

Что мне не хватает? Что мне нужно изменить, чтобы я мог использовать провайдер учетных данных на плитке «Другой пользователь»?

Обычно я занимаюсь веб-проектами, поэтому у меня мало опыта работы с Windows SDK.

4

Решение

Если вы используете пример, он всегда инициализирует SID в функции Initialize, поэтому этот код всегда копирует SID в указатель возврата функции, независимо от того, что вы делаете потом (_pszUserSid! = Nullptr всегда истинно в примере ). Если вы хотите иметь эту функцию и показывать свой CP в разделе «Другой пользователь», то тело должно быть не более чем:

    *ppszSid = nullptr;
return S_FALSE;

Если вы не хотите, чтобы ваша плитка была привязана к пользователю, вам вообще не нужно реализовывать ICredentialProviderCredential2, поскольку она только добавляет эту функцию. Без этого интерфейса ваш CP всегда будет отображаться в разделе «Другой пользователь». Для этого достаточно реализации ICredentialProviderCredential.

0

Другие решения


По вопросам рекламы [email protected]