所以,这是场景.我正在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
我正在开发凭据提供程序和过滤器。我对锁定方案有一些问题。
首先,我从这里尝试了 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)