当前位置:   article > 正文

window7 登陆机制 CredentialProvider_windows7 credential

windows7 credential

window7 登陆机制 CredentialProvider

example

下面是我自己弄的一个例子,就是自定义window7登陆,

1.1 首先拦截了其余的登陆方式

这里写图片描述

1.2 简单的模拟智能卡登陆模式

这里写图片描述

1.3 模拟智能卡登陆失败,需要输入window登陆密码

才能进入
这里写图片描述

1.4 里面有俩个项目,看清楚了,下面是项目结构

这里写图片描述

1.5 关于自定义登陆的一些文章,有详细的介绍

http://baike.baidu.com/link?url=AIJWwcDTVUxlx0CTOPyQCu8UFxzRs-OeL5DI9DI2DQi8xAdBiOTLPrnelx1b1SYGMSToCfFCiklJbh3w0Y–o_
https://blog.leetsys.com/2012/01/02/capturing-windows-7-credentials-at-logon-using-custom-credential-provider/
https://kb.swivelsecure.com/wiki/index.php/Microsoft_Windows_Credential_Provider_Integration
https://github.com/LastSquirrelIT/MultiOneTimePassword-CredentialProvider

1.6项目下载 ,包括微软的五个例子

http://download.csdn.net/detail/li740207611/9497173
SSCredProvider__ 我的
Untitled Folder 微软的,里面有些我也修改了,没有原版得了

1.7使用 就是运行相应项目目录下面的 Register.reg

把登陆的dll 或者fileter 添加到注册表里面。然后把项目自带的或者生成的dll拷贝到
c/window/system32/ 目录下面
注意:这些是在32位的操作系统下面进行的,如果想兼容64位系统,首先需要使用vs生成属性平台改为64位,然后生成64位的dll,就可以了。如果是32位的dll是不行的。


细节

CSSCredential.h文件 控件的定义


CSSCredential.cpp文件

初始化

  1. ISSUnknown_REF_IMPL(CSSCredential)
  2. CSSCredential::CSSCredential()
  3. {
  4. SS_AUTO_FNC_TRACE;
  5. SSWACredProvAddRef();
  6. ISSUnknown_REF_INIT;
  7. m_cpus = CPUS_INVALID;
  8. m_dwCredUIFlags = 0;
  9. m_pCredentialProvider = NULL;
  10. m_pcpce = NULL;
  11. loginSuccess = 0;
  12. SS_AUTO_FNC_TRACE;
  13. int x = 0;
  14. for(x=0; x<_countof(m_pwszFieldStrings); x++)
  15. {
  16. m_pwszFieldStrings[x] = NULL;
  17. ::SHStrDupW(L"", &m_pwszFieldStrings[x]);
  18. }
  19. //在这里设置链接和登录的图标下面显示的字符
  20. ::CoTaskMemFree(m_pwszFieldStrings[SSFI_LARGE_TEXT]);
  21. //设置显示的用户名
  22. ::SHStrDupW(L"Logan", &m_pwszFieldStrings[SSFI_LARGE_TEXT]);
  23. ::CoTaskMemFree(m_pwszFieldStrings[SSFI_COMMAND_LINK]);
  24. //设置显示的链接名字
  25. ::SHStrDupW(L"your link", &m_pwszFieldStrings[SSFI_COMMAND_LINK]);
  26. ::CoTaskMemFree(m_pwszFieldStrings[SSFI_SUBMIT_BUTTON]);
  27. //设置提交按钮显示
  28. ::SHStrDupW(L"Submit", &m_pwszFieldStrings[SSFI_SUBMIT_BUTTON]);
  29. }

动态控件显示

  1. STDMETHODIMP CSSCredential::SetSelected(BOOL *pbAutoLogon)
  2. {
  3. SS_AUTO_FNC_TRACE;
  4. //在这里可以进行,登录界面图标的隐藏的切换,当点击登录或者Enter 键的时候
  5. if(loginSuccess == 1)
  6. {
  7. //当window密码和pin码不一样的时候,就弹出密码框
  8. ::MessageBox(::GetForegroundWindow(), TEXT("请在输入框输入Windows密码"), TEXT("Windows 密码错误"), MB_ICONQUESTION|MB_OK);
  9. //set SSFI_PASSWORD to visiable
  10. m_pcpce->SetFieldState(this,SSFI_PASSWORD,CPFS_DISPLAY_IN_SELECTED_TILE);
  11. /*设置提交按钮在密码框后面 SSFI_SUBMIT_BUTTON是提交按钮控件的id,后面的是密码的
  12. 更详细的姐失控可以看msdn 都有解释
  13. */
  14. m_pcpce->SetFieldSubmitButton(this, SSFI_SUBMIT_BUTTON, SSFI_PASSWORD);
  15. }
  16. *pbAutoLogon = FALSE;
  17. return S_OK;
  18. }

提交按钮控件

  1. //修改提交按钮显示的位置,初始化的时候使用,动态显示需要在SetSelected 控制
  2. STDMETHODIMP CSSCredential::GetSubmitButtonValue(DWORD index, DWORD *pdwAdjacentTo)
  3. {
  4. SS_AUTO_FNC_TRACE;
  5. if(m_cpus == CPUS_CHANGE_PASSWORD)
  6. {
  7. *pdwAdjacentTo = SSFI_NEWPASSWORD_CONFIRM;
  8. } else {
  9. //set submit keyboard follow the SSFI_PIN
  10. //::MessageBox(::GetForegroundWindow(), TEXT("pin"), TEXT("submit"), MB_ICONQUESTION|MB_YESNO);
  11. //设置提交按钮在哪个控件后面显示
  12. *pdwAdjacentTo = SSFI_PIN;
  13. }
  14. return S_OK;
  15. }

获取用户输入信息

  1. CSSCredential::GetSerialization(CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE *pcpgsr
  2. , CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION *pcpcs
  3. , PWSTR *ppwszOptionalStatusText, CREDENTIAL_PROVIDER_STATUS_ICON *pcpsi)
  4. {
  5. SS_AUTO_FNC_TRACE;
  6. LPWSTR lpPasswordEncrypted = NULL;
  7. LPWSTR lpPasswordNewEncrypted = NULL;
  8. LPWSTR lpDomainUsername = NULL;
  9. BYTE *pRgb = NULL;
  10. DWORD cbRgb = 0;
  11. SS_LOG_V(LL_TRACE, _T("CredInfo : %s,%s"), m_pwszFieldStrings[SSFI_USERNAME], m_pwszFieldStrings[SSFI_PASSWORD]);
  12. //设置用户名 SSFI_USERNAME 是id ,在定义控件的地方看看都有
  13. SetStringValue(SSFI_USERNAME,L"logan");
  14. //下面是用户名 密码 还有pin码的获取
  15. PWSTR pin_psw = NULL;
  16. GetStringValue(SSFI_PIN, &pin_psw);
  17. ::MessageBox(::GetForegroundWindow(), pin_psw, TEXT(" pin "), MB_ICONQUESTION|MB_YESNO);
  18. CoTaskMemFree(pin_psw);
  19. loginSuccess = 1;//为了动态显示密码输入框 主要是为了测试
  20. PWSTR u_psw = NULL;
  21. GetStringValue(SSFI_USERNAME,&u_psw);
  22. ::MessageBox(::GetForegroundWindow(), u_psw, TEXT(" usename"), MB_ICONQUESTION|MB_YESNO);
  23. CoTaskMemFree(u_psw);
  24. PWSTR psw = NULL;
  25. GetStringValue(SSFI_PASSWORD,&psw);
  26. ::MessageBox(::GetForegroundWindow(), psw, TEXT(" password "), MB_ICONQUESTION|MB_YESNO);
  27. CoTaskMemFree(psw);
  28. //下面的是系统的,不用管
  29. }

文章最后发布于: 2016-04-20 16:51:58

有 0 个人打赏

私信求帮助

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/522053
推荐阅读
相关标签
  

闽ICP备14008679号