yanghao988 2014-12-19 09:21 采纳率: 0%
浏览 2719

win7下登录屏蔽系统登录凭据

//cpp
//功能:实现自定义win7登录替换原有的window登录凭据,并屏蔽原来的登录.
#pragma once
#include "MyCredentailProviderFilter.h"
#include "Log.h"
CMyCredentailProviderFilter::CMyCredentailProviderFilter(void)
{
}

CMyCredentailProviderFilter::~CMyCredentailProviderFilter(void)
{
}

HRESULT CMyCredentailProviderFilter::Filter(
CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus,
DWORD dwFlags,
GUID* rgclsidProviders,
BOOL* rgbAllow, DWORD cProviders)
{
dwFlags;
WriteFileLog(L"CMyCredentailProviderFilter::Filter() called.");
MessageBox(NULL,"Filter called","Filter",MB_OK|MB_TOPMOST);
switch(cpus)
{
case CPUS_LOGON:
case CPUS_UNLOCK_WORKSTATION:
{
for(DWORD i = 0;i<cProviders;i++)
{
if(IsEqualGUID(rgclsidProviders[i],CLSID_PasswordCredentialProvider))
rgbAllow[i] = FALSE;
}
return S_OK;
}
break;
case CPUS_CHANGE_PASSWORD:
return E_NOTIMPL;
default:
return E_INVALIDARG;
}
}

HRESULT CMyCredentailProviderFilter::UpdateRemoteCredential(
const CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION* pcpcsIn,
CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION* pcpcsOut)
{
pcpcsOut;
pcpcsIn;
return E_NOTIMPL;
}

//h
#pragma once
#include "common.h"
#include
class CMyCredentailProviderFilter : public ICredentialProviderFilter
{

public:
CMyCredentailProviderFilter();
__override ~CMyCredentailProviderFilter();
public:
//This section contains some COM boilerplate code

    // IUnknown
STDMETHOD_(ULONG, AddRef)()
{
    return _cRef++;
}

STDMETHOD_(ULONG, Release)()
{
    LONG cRef = _cRef--;
    if (!cRef)
    {
        delete this;
    }
    return cRef;
}

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

public:
friend HRESULT CSampleProvider_CreateInstance(REFIID riid, __deref_out void** ppv);

//Implementation of ICredentialProviderFilter
IFACEMETHODIMP Filter(
    CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus, 
    DWORD dwFlags,
    GUID* rgclsidProviders, 
    BOOL* rgbAllow, DWORD cProviders);

IFACEMETHODIMP UpdateRemoteCredential(
    const CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION* pcpcsIn,
    CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION* pcpcsOut);

private:
LONG _cRef;

};
//dll.cpp
STDMETHOD (CreateInstance)(IUnknown* pUnkOuter, REFIID riid, void** ppv)
{
HRESULT hr;
if (!pUnkOuter)
{
if (IID_ICredentialProvider == riid)
{
hr = CSampleProvider_CreateInstance(riid, ppv);
WriteFileLog(L"IID_ICredentialProvider");
}
else
{
if (IID_ICredentialProviderFilter == riid)
{
hr = CSampleProvider_CreateInstance(riid, ppv);
WriteFileLog(L"IID_ICredentialProviderFilter");
}
else
{
hr = CSampleProvider_CreateInstance(riid, ppv);
WriteFileLog(L"IID_DEFAULT:CSampleProvider_CreateInstance");
}
}
}
else
{
hr = CLASS_E_NOAGGREGATION;
}
return hr;
}
//register.reg
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers{ACFC407B-266C-4085-8DAE-F3E276336E4B}]
@="SampleWrapExistingCredentialProvider"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Provider Filters{A5DA53F9-D475-4080-A120-910C4A739880}]
@="SampleWrapExistingCredentialProvider"

[HKEY_CLASSES_ROOT\CLSID{ACFC407B-266C-4085-8DAE-F3E276336E4B}]
@="SampleWrapExistingCredentialProvider"

[HKEY_CLASSES_ROOT\CLSID{ACFC407B-266C-4085-8DAE-F3E276336E4B}\InprocServer32]
@="SampleWrapExistingCredentialProvider.dll"
"ThreadingModel"="Apartment"
//问题1:
我的filter没有被调用.
//问题2:
STDMETHOD (CreateInstance)(IUnknown* pUnkOuter, REFIID riid, void** ppv)这个中我的两个IID_ICredentialProvider和IID_ICredentialProviderFilter需要在头文件中做改动马?

  • 写回答

1条回答

  • linranguo 2019-10-11 09:18
    关注

    filter功能实现了吗?请指教
    filter_CreateInstance 函数需要吗? 我看你createInstance函数都全部都是调的provider_createIntance啊?

    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办