How to hide credential providers from Login Screen for Windows 7

How to hide credential providers from Login Screen for Windows 7

Two ways to hide other credential providers except yours.

  • Edit your group policy 
Step 1: Run command:gpedit.msc
Step 2: Go to Computer Configuration->Administrative Templates->System->Logon
Step 3: Edit the item Exclude credential providers
Step 4: Enable it, and enter CLSIDs of credential providers you want to exclude

Windows 2008 and Windows 7 have the almost the same CLSIDs.

Please see the CLSIDs below:

Credential ProviderCLSID
Generic Provider{25CBB996-92ED-457e-B28C-4774084BD562}
NPProvider{3dd6bec0-8193-4ffe-ae25-e08e39ea4063}
VaultCredProvider{503739d0-4c5e-4cfd-b3ba-d881334f0df2}
Password Provider{6f45dc1e-5384-457a-bc13-2cd81b0d28ed}
Password Provider\LogonPasswordReset{8841d728-1a76-4682-bb6f-a9ea53b4b3ba}
Smartcard Credential Provider{8bf9a910-a8ff-457f-999f-a5ca10b4a885}
Smartcard Pin Provider{94596c7e-3744-41ce-893e-bbf09122f76a}
CertCredProvider{e74e57b0-6c6d-44d5-9cda-fb2df5ed7435}
Normally you only need to hide the Password Provider or Password Provider\LogonPasswordReset if you also implement the changing password scenario.

  • Implement the credential provider filter
I tested it. 

Steps:
You should have a separate project, e.g. named "CredentialProviderFilter".
Do not use the same project with credential provider, yes, you can, but I don't suggest it, since you have to add some condition logic in the method as below:
CClassFactory_CreateInstance //dll entry point to call this factory method
if(IID_ICredentialProvider == riid)
    hr = Provider_CreateInstance(riid, ppv);
else if(IID_ICredentialProviderFilter == riid)
    hr = Filter_CreateInstance(riid, ppv);

Remind: to include credentialprovider.h

And also mess up your provider or credential.


So here we go:
in your Dll.cpp file, please pay attention to these two methods:


HRESULT CClassFactory_CreateInstance(REFCLSID rclsid, REFIID riid, void** ppv)
{
    HRESULT hr;
    if (CLSID_CSampleProviderFilter == rclsid)
    {
        CClassFactory* pcf = new CClassFactory;
        if (pcf)
        {
            hr = pcf->QueryInterface(riid, ppv);
            pcf->Release();
        }
        else
        {
            hr = E_OUTOFMEMORY;
        }
    }
    else
    {
        hr = CLASS_E_CLASSNOTAVAILABLE;
    }
    return hr;
}


And the other one:


// IClassFactory
   STDMETHOD(CreateInstance)(IUnknown* pUnkOuter, REFIID riid, void** ppv)
    {
        HRESULT hr;
        if (!pUnkOuter)
        {
           // hr = CSampleProvider_CreateInstance(riid, ppv);
            hr = CProviderFilter_CreateInstance(riid,ppv);
        }
        else
        {
            hr = CLASS_E_NOAGGREGATION;
        }
        return hr;
    }

And in your Filter.h file


STDMETHOD(QueryInterface)(REFIID riid, void** ppv)
    {
        HRESULT hr;
        if (IID_IUnknown == riid || 
           IID_ICredentialProviderFilter == riid)
        {
            *ppv = this;
            reinterpret_cast(*ppv)->AddRef();
            hr = S_OK;
        }
        else
        {
            *ppv = NULL;
            hr = E_NOINTERFACE;
        }
        return hr;
    }

And finally in your Filter.cpp file:


HRESULT CProviderFilter_CreateInstance( REFIID riid, void** ppv)
{
    HRESULT hr;
    ProviderFilter * pProvider = new ProviderFilter();

    if (pProvider)
    {
        hr = pProvider->QueryInterface(riid, ppv);
        pProvider->Release();
    }
    else
    {
        hr = E_OUTOFMEMORY;
    }    
    return hr;
}



HRESULT ProviderFilter::Filter(CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus,
        DWORD dwFlags,
        GUID *rgclsidProviders,
        BOOL *rgbAllow,
        DWORD cProviders)
{
    switch (cpus)
    {
    case CPUS_CREDUI:
        if (dwFlags & CREDUIWIN_GENERIC) 
            return S_OK;
    case CPUS_LOGON:
    case CPUS_UNLOCK_WORKSTATION:
    case CPUS_CHANGE_PASSWORD:
        for (int i = 0; i < cProviders; i++)
        {
           if (IsEqualGUID(rgclsidProviders[i],CLSID_PasswordCredentialProvider))
            {
                rgbAllow[i] = FALSE;
                break;
            }
            
        }
        return S_OK;
    default:
        return E_NOTIMPL;
    }
}

And the register file content:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Provider Filters\{BEF85591-235B-4492-A40D-C04CAEEF5D9A}]
@="SampleHardwareEventCredentialProviderFilter"

[HKEY_CLASSES_ROOT\CLSID\{BEF85591-235B-4492-A40D-C04CAEEF5D9A}]
@="SampleHardwareEventCredentialProviderFilter"

[HKEY_CLASSES_ROOT\CLSID\{BEF85591-235B-4492-A40D-C04CAEEF5D9A}\InprocServer32]
@="SampleHardwareEventCredentialProviderFilter.dll"

"ThreadingModel"="Apartment"


Unregister file:

[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Provider Filters\{BEF85591-235B-4492-A40D-C04CAEEF5D9A}]


转自:http://www.pagepinner.com/2013/12/how-to-hide-credential-providers-from.html

### 回答1: Git凭证管理器是Windows上的一个工具,用于管理Git仓库的凭证信息。它可以帮助用户在使用Git时自动缓存和存储凭证信息,从而避免频繁输入用户名和密码。此外,它还支持多种身份验证方式,如基本身份验证、OAuth、SSH密钥等。 ### 回答2: Git Credential Manager for Windows是一个工具,可以帮助Git用户轻松地管理他们的凭据信息。它可以存储Git仓库的身份验证可信信息,以避免在每次访问存储库时输入用户凭据。 Git Credential Manager for Windows提供了几种默认认证方法,如基本身份验证和个人访问令牌(PAT)验证。使用基本身份验证时,用户需要输入他们的用户名和密码。使用PAT时,用户需要首先生成一个令牌,并将其用作身份验证凭据之一。这些凭据将被存储在Windows凭据管理器中,并可以选择在每次访问存储库时使用它们。 此外,Git Credential Manager for Windows还支持第三方身份验证提供商,如GitHub、Azure DevOps和Bitbucket。用户可以通过与这些提供商进行OAuth2身份验证来自动获取访问令牌。 Git Credential Manager for Windows易于安装和配置,并且与大多数Git客户端兼容。它通过简化管理Git凭据信息,为Git用户提供了更好的体验和更高的安全性。 总之,Git Credential Manager for Windows是一个非常有用的工具,为Git用户提供了一种方便的方法来管理他们的凭据信息,并提高了安全性和用户体验。 ### 回答3: Git Credential Manager for Windows 是一种安全访问 Git 仓库的工具。它帮助用户在本地计算机上存储 Git 凭据,并为访问基于 HTTPS 的 Git 存储库提供一种简单而安全的方式。 Git Credential Manager for Windows 可以采用多种认证方式,比如:用户名和密码、基于令牌的验证、双因素认证(2FA)等。这些凭据都可以在 Windows Credential Manager 中进行存储和管理。 使用 Git Credential Manager for Windows,用户可以避免频繁输入用户名和密码,在每次访问 Git 存储库时,Git Credential Manager for Windows 会自动从 Credential Manager 获取凭据并将其传递给 Git。 Git Credential Manager for Windows 还支持 Azure Repos 和 GitHub 等托管服务。它与 Visual Studio 和 Visual Studio Code 集成良好,用户可以在使用这些 IDE 时方便地访问他们的 Git 存储库。 此外,Git Credential Manager for Windows 还简化了 Git 存储库的身份验证过程。使用此工具,用户可以安全地访问托管在 Azure DevOps、GitHub 或其他相似服务中的 Git 存储库。在不支持 SSH 的环境中,使用 HTTPS 访问 Git 存储库或者使用 Git 命令行界面时,这个工具尤其有用。 总之,Git Credential Manager for Windows 是一个很棒的安全工具,可以方便地为 Windows 用户管理 Git 凭据。 它不仅符合安全性要求,同时也极大地简化了 Git 存储库的访问和身份验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值