小编use*_*894的帖子

自定义Windows身份验证包

所以,这是场景.我正在Windows 7中开发一个登录系统.我创建了一个Credential Provider,其中包含一个Credential.凭证有三个输入字段,用户名,密码和PIN.

据我所知,文档(CMIIW)是当我们填写字段并单击登录时,WINLOGON将检索用户名和密码,并通过调用LSALogonUser()进行身份验证将其发送到LSA.然后LSA将尝试与Authentication Package KERBEROS(用于远程登录)或MSV1_0(用于本地登录)进行协商.

仅假设现在的本地方案,用户名和密码将传递给MSV1_0,并与SAM数据库中的用户和密码一起检查.现在的问题是,我不希望用SAM数据库检查它.假设我有一个文件C:\ users.txt,其中包含三元组:{username; 密码; 销}.这里的所有用户名都是Windows中的现有用户.如何使身份验证遵循我的方式(检查文件C:\ users.txt.

如果我没弄错的话,我们可以创建自己的身份验证包来"包装"MSV1_0.你们有一个示例代码吗?还是有另一种更合适的方式吗?

谢谢,非常感谢你的帮助.

c++ winlogon windows-authentication lsa credential-providers

10
推荐指数
1
解决办法
3051
查看次数

Windows 凭据提供程序、过滤器和解锁工作站方案

我正在开发凭据提供程序和过滤器。我对锁定方案有一些问题。

首先,我从这里尝试了 SampleAllControlCredentialProvider 。它有效。即使我后来登录并锁定它,它也会显示我的凭据。

其次,我尝试通过添加一些代码行来制作自己的凭据提供程序过滤器。过滤器正在过滤 Windows 的凭据,只允许出现我的凭据。这些是我添加的代码:

在 CSampleProvider.h 中,我使该类实现 ICredentialProviderFilter

class CSampleProvider : public ICredentialProvider, public ICredentialProviderFilter
Run Code Online (Sandbox Code Playgroud)

在 CSampleProvider.h 中,我将 STDMETHOD (QueryInterface) 更改为

STDMETHOD (QueryInterface)(REFIID riid, void** ppv)
{
    HRESULT hr;
    if (IID_IUnknown == riid)
        {
        *ppv = this;
        AddRef();
        hr = S_OK;
        }
        else if (IID_ICredentialProvider == riid)
        {
        *ppv = static_cast<ICredentialProvider*>(this);
        AddRef();
        hr = S_OK;
        }
        else if (IID_ICredentialProviderFilter == riid)
    {
        *ppv = static_cast<ICredentialProviderFilter*>(this);
        AddRef();
        hr = S_OK;
    }
    else
    {
        *ppv = NULL; …
Run Code Online (Sandbox Code Playgroud)

authentication credentials boilerplate visual-c++ windows-7

5
推荐指数
1
解决办法
6450
查看次数