凭证提供者 V2 对所有用户有效(Tiles)

Credential Providers V2 Active for All users(Tiles)

我用的是"Credential Providers in Windows 10"的示例代码。我开发我的代码,修改得很好。

但是我遇到了一些问题:

我的 windows 中的所有用户均未启用(显示磁贴)。 (仅对一位用户显示)

我看到这个问题:

所以我更改了我的代码,但是当从我的 DLL 中使用时,win-login 没有加载,我必须在安全模式下删除,这样我就可以在没有凭据提供程序的情况下进入我的 windows。

我更改我的代码如下:

std::vector<CSamanCredential*>          _pCredential;    // SampleV2Credential

HRESULT CSamanProvider::GetCredentialAt(
    DWORD dwIndex,
    _Outptr_result_nullonfailure_ ICredentialProviderCredential** ppcpc)
{
    HRESULT hr = E_INVALIDARG;
    *ppcpc = nullptr;

    hr = _pCredential[dwIndex]->QueryInterface(IID_PPV_ARGS(ppcpc));

    return hr;
}


HRESULT CSamanProvider::GetCredentialCount(
    _Out_ DWORD* pdwCount,
    _Out_ DWORD* pdwDefault,
    _Out_ BOOL* pbAutoLogonWithDefault)
{
    *pdwDefault = CREDENTIAL_PROVIDER_NO_DEFAULT;
    *pbAutoLogonWithDefault = FALSE;

    if (_fRecreateEnumeratedCredentials)
    {
        _fRecreateEnumeratedCredentials = false;
        _ReleaseEnumeratedCredentials();
        _CreateEnumeratedCredentials();
    }

    DWORD dwUserCount = 0;
    HRESULT hr;

    if (_pCredProviderUserArray != nullptr) {
        hr = _pCredProviderUserArray->GetCount(&dwUserCount);
    }

    if ((dwUserCount == 0) || (IsOS(OS_DOMAINMEMBER) == 1)) {
        dwUserCount += 1;//display additional empty tile
    }
    *pdwCount = dwUserCount;

    return S_OK;
}


void CSamanProvider::_ReleaseEnumeratedCredentials()
{
    DWORD dwUserCount;
    _pCredProviderUserArray->GetCount(&dwUserCount);
    for (DWORD i = 0; i < dwUserCount; i++) {
        if (_pCredential[i] != nullptr)
        {
            _pCredential[i]->Release();
            _pCredential[i] = nullptr;
        }
    }
}

所以我更改了代码中的其他位置,但没有得到结果。

您必须按照您提到的帖子中的说明进行操作。

作为对 ICredentialProviderSetUserArray::SetUserArray 的间接响应,您必须为提供的列表中的每个用户准备磁贴。

稍后将要求您提供 ICredentialProviderCredential2::GetUserSid
您的磁贴必须 return 上一步列表中的 SID 之一。

当我实现这个逻辑时,我不得不重新设计很大一部分代码来支持这个特性。

我阅读了这段代码。这对于了解说明和其他细节非常有帮助。

https://github.com/multiOTP/multiOTPCredentialProvider

此代码 (C++) 为计算机上的所有用户激活 CP。

谢谢