在'其他用户'上显示V2凭证提供商瓦

时间:2015-04-13 11:13:04

标签: c++ windows winapi credentials credential-providers

我正在尝试编写自定义Windows凭据提供程序。我已经下载了V2 credential provider sample,我可以构建,注册和使用它。

为了进行测试,我已经设置了一个hyper-v Windows 8.1实例并加入了一个窗口 测试域。

但是,自定义凭据提供程序仅显示在用户磁贴上,而不显示在“其他用户”上。瓦。

文档(Credential Provider Framework Changes in 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没什么经验。

1 个答案:

答案 0 :(得分:0)

如果您正在使用该示例,它总是在Initialize函数中初始化SID,因此此代码将始终将SID复制到函数的返回指针中,而不管您之后执行的操作(_pszUserSid!= nullptr始终为true)在示例中)。如果您想拥有此功能并让您的CP显示在"其他用户"下,那么正文应该只是:

    *ppszSid = nullptr;
    return S_FALSE;

如果您不希望将您的磁贴绑定到用户,则根本不必实现ICredentialProviderCredential2,因为它只会添加此功能。如果未实施此界面,您的CP将始终显示在"其他用户"下。实现ICredentialProviderCredential就足够了。