赞
踩
下面是我自己弄的一个例子,就是自定义window7登陆,
才能进入
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
http://download.csdn.net/detail/li740207611/9497173
SSCredProvider__ 我的
Untitled Folder 微软的,里面有些我也修改了,没有原版得了
把登陆的dll 或者fileter 添加到注册表里面。然后把项目自带的或者生成的dll拷贝到
c/window/system32/ 目录下面
注意:这些是在32位的操作系统下面进行的,如果想兼容64位系统,首先需要使用vs生成属性平台改为64位,然后生成64位的dll,就可以了。如果是32位的dll是不行的。
CSSCredential.h文件 控件的定义
CSSCredential.cpp文件
- ISSUnknown_REF_IMPL(CSSCredential)
- CSSCredential::CSSCredential()
- {
- SS_AUTO_FNC_TRACE;
- SSWACredProvAddRef();
- ISSUnknown_REF_INIT;
- m_cpus = CPUS_INVALID;
- m_dwCredUIFlags = 0;
- m_pCredentialProvider = NULL;
- m_pcpce = NULL;
- loginSuccess = 0;
- SS_AUTO_FNC_TRACE;
-
- int x = 0;
- for(x=0; x<_countof(m_pwszFieldStrings); x++)
- {
- m_pwszFieldStrings[x] = NULL;
- ::SHStrDupW(L"", &m_pwszFieldStrings[x]);
- }
- //在这里设置链接和登录的图标下面显示的字符
- ::CoTaskMemFree(m_pwszFieldStrings[SSFI_LARGE_TEXT]);
- //设置显示的用户名
- ::SHStrDupW(L"Logan", &m_pwszFieldStrings[SSFI_LARGE_TEXT]);
- ::CoTaskMemFree(m_pwszFieldStrings[SSFI_COMMAND_LINK]);
- //设置显示的链接名字
- ::SHStrDupW(L"your link", &m_pwszFieldStrings[SSFI_COMMAND_LINK]);
- ::CoTaskMemFree(m_pwszFieldStrings[SSFI_SUBMIT_BUTTON]);
- //设置提交按钮显示
- ::SHStrDupW(L"Submit", &m_pwszFieldStrings[SSFI_SUBMIT_BUTTON]);
-
- }
- STDMETHODIMP CSSCredential::SetSelected(BOOL *pbAutoLogon)
- {
- SS_AUTO_FNC_TRACE;
- //在这里可以进行,登录界面图标的隐藏的切换,当点击登录或者Enter 键的时候
- if(loginSuccess == 1)
- {
- //当window密码和pin码不一样的时候,就弹出密码框
- ::MessageBox(::GetForegroundWindow(), TEXT("请在输入框输入Windows密码"), TEXT("Windows 密码错误"), MB_ICONQUESTION|MB_OK);
- //set SSFI_PASSWORD to visiable
- m_pcpce->SetFieldState(this,SSFI_PASSWORD,CPFS_DISPLAY_IN_SELECTED_TILE);
- /*设置提交按钮在密码框后面 SSFI_SUBMIT_BUTTON是提交按钮控件的id,后面的是密码的
- 更详细的姐失控可以看msdn 都有解释
- */
- m_pcpce->SetFieldSubmitButton(this, SSFI_SUBMIT_BUTTON, SSFI_PASSWORD);
- }
-
-
- *pbAutoLogon = FALSE;
- return S_OK;
- }
- //修改提交按钮显示的位置,初始化的时候使用,动态显示需要在SetSelected 控制
- STDMETHODIMP CSSCredential::GetSubmitButtonValue(DWORD index, DWORD *pdwAdjacentTo)
- {
- SS_AUTO_FNC_TRACE;
- if(m_cpus == CPUS_CHANGE_PASSWORD)
- {
- *pdwAdjacentTo = SSFI_NEWPASSWORD_CONFIRM;
- } else {
- //set submit keyboard follow the SSFI_PIN
- //::MessageBox(::GetForegroundWindow(), TEXT("pin"), TEXT("submit"), MB_ICONQUESTION|MB_YESNO);
- //设置提交按钮在哪个控件后面显示
- *pdwAdjacentTo = SSFI_PIN;
- }
- return S_OK;
- }
- CSSCredential::GetSerialization(CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE *pcpgsr
- , CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION *pcpcs
- , PWSTR *ppwszOptionalStatusText, CREDENTIAL_PROVIDER_STATUS_ICON *pcpsi)
- {
- SS_AUTO_FNC_TRACE;
- LPWSTR lpPasswordEncrypted = NULL;
- LPWSTR lpPasswordNewEncrypted = NULL;
- LPWSTR lpDomainUsername = NULL;
-
- BYTE *pRgb = NULL;
- DWORD cbRgb = 0;
-
- SS_LOG_V(LL_TRACE, _T("CredInfo : %s,%s"), m_pwszFieldStrings[SSFI_USERNAME], m_pwszFieldStrings[SSFI_PASSWORD]);
- //设置用户名 SSFI_USERNAME 是id ,在定义控件的地方看看都有
- SetStringValue(SSFI_USERNAME,L"logan");
-
- //下面是用户名 密码 还有pin码的获取
- PWSTR pin_psw = NULL;
- GetStringValue(SSFI_PIN, &pin_psw);
- ::MessageBox(::GetForegroundWindow(), pin_psw, TEXT(" pin "), MB_ICONQUESTION|MB_YESNO);
- CoTaskMemFree(pin_psw);
- loginSuccess = 1;//为了动态显示密码输入框 主要是为了测试
-
-
- PWSTR u_psw = NULL;
-
- GetStringValue(SSFI_USERNAME,&u_psw);
- ::MessageBox(::GetForegroundWindow(), u_psw, TEXT(" usename"), MB_ICONQUESTION|MB_YESNO);
- CoTaskMemFree(u_psw);
-
-
- PWSTR psw = NULL;
- GetStringValue(SSFI_PASSWORD,&psw);
- ::MessageBox(::GetForegroundWindow(), psw, TEXT(" password "), MB_ICONQUESTION|MB_YESNO);
- CoTaskMemFree(psw);
-
-
-
- //下面的是系统的,不用管
- }
文章最后发布于: 2016-04-20 16:51:58
有 0 个人打赏
©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。