windows系统锁屏及修改密码项目开发经验记录

改造windows开机、锁屏登陆流程须要使用微软停供的Credential Providers工程,编译出来是dll,安装在C:\windows\system32目录下,而后注册注册表(运行工程生成的Register.reg文件)便可。html

 

代码可下载:git

Win7: Samples/Win7Samples/security/credentialproviders
Win8: Samples/CredentialProvidergithub

 

通常这种工程的开发逻辑是,将本来的用户密码登陆改造为指纹、指静脉、人脸一类的验证方式。不过windows系统最终执行的终究仍是用户名、密码验证。只不过在那以前可添加一层拦截,加入指纹、指静脉、人脸一类的验证方式,这里不过的话,直接无限循环后面就进行不了。windows

而后再将保存好的用户名密码取出,自动进行windows系统验证。ide

 

因而有了一个问题,当用户,在登陆系统后,经过控制面板更改了用户密码。再登陆系统时,程序取出原来存储的用户密码后,就没法登陆成功了。本来验证指纹、指静脉、人脸后即可自动登陆的程序便卡住了。函数

 

因此,须要在登陆失败后,弹出窗口要求用户从新输入密码。.net

 

我最开始想到的是,微软提供的系统函数:NetUserChangePasswordcode

这个函数实际上是用来修改密码的。参数须要输入用户名、原密码、新密码。若是原密码和新密码都输入同一个密码的话,实际上并无改密码。但能够经过返回值判断这个密码是否是对的。orm

例如如今系统密码为123,调用NetUserChangePassword,输入原密码123,新密码123。等于把123改成123。什么也没改,但能够经过返回值判断这个密码是否是对的。htm

若是输入原密码321,新密码321,由于原密码不符合,因此返回值是错的。判断密码是错的。

 

而后我在Credential Providers系统登陆以前,调用NetUserChangePassword判断密码是否正确,不对则弹出窗口输入新密码。

结果发现无论输入的密码是否是对的,NetUserChangePassword返回值都是 错。

则很奇怪,可能在系统登陆成功以前,NetUserChangePassword仍是没法调用的吧。

 

最后我认识到,

Credential Providers这个工程里面有个函数叫ReportResult。

这里会返回系统登陆结果,能够在这里弹出窗口输入密码。

 

 

 

Credential Providers的工程,其余一些重要函数这里也说下:

SetUsageScenario函数能够区分是锁屏仍是开机,可选择不一样界面

Initialize初始化界面

SetSelected初始化界面后选择显示什么

GetSerialization函数,一些登陆前的准备工做,能够在这里添加循环和别的验证方式拦截,另外,登陆判断是不在这里

ReportResult返回登陆结果

 

 

具体能够参考这篇文章:https://www.mycode.net.cn/platform/windows/1945.html

相关文章
相关标签/搜索