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

代码可下载:

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

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

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

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

所以,需要在登录失败后,弹出窗口要求用户重新输入密码。

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

这个函数其实是用来修改密码的。参数需要输入用户名、原密码、新密码。如果原密码和新密码都输入同一个密码的话,实际上并没有改密码。但可以通过返回值判断这个密码是不是对的。

例如现在系统密码为123,调用NetUserChangePassword,输入原密码123,新密码123。等于把123改为123。什么也没改,但可以通过返回值判断这个密码是不是对的。

如果输入原密码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

windows系统锁屏及修改密码项目开发经验记录的更多相关文章

  1. Windows Server 2012R2 / 2008R2 修改密码策略(password policy)

    一.  针对于未添加到域中的机器 cmd中执行gpedit.msc 打开Local Group Policy Editor查看password policy设置,修改对应的password polic ...

  2. windows下 mysql 5.6.40 卸载 安装 修改密码

    最近执行另一个mysql版本导出的sql脚本,出现问题!出于一些原因,把之前的mysql5.5卸载,由于卸载不干净出现了一些问题.特此总结方法! 参考链接: https://blog.csdn.net ...

  3. linux和windows强制用户第一次登陆修改密码

    linux: passwd -e root windows: 计算机右键->管理->本地用户和组->用户->administrator->下一次登陆修改密码 如果密码复杂 ...

  4. Windows下配置Redis,并修改密码

    原文:Windows下配置Redis,并修改密码 Windows下配置Redis,并修改密码 下载 Redis Windows版本的GitHub链接,直接下载zip文件解压到指定文件夹下或者下载msi ...

  5. Windows下GIT的用户密码修改

    Windows下GIT的用户密码修改

  6. windows下安装mysql8并修改密码

    MySQL下载地址:http://dev.mysql.com/downloads/mysql/ Windows下安装MySQL 我下的是最新版的MySQL,解压后,目录如下: 1.进入dos的命令行, ...

  7. 配置windows自动修改密码和自动登录

    日常运维多台服务器,每季度要修改一次密码,非常麻烦,现做一个VBS脚本,计划任务设置每季度第一天三点定时运行,则可解决该问题,具体实现脚本如下:autochg_pwd.vbs ystr=year(No ...

  8. windows系统远程修改密码

    1.需求:公司需要短时间.批量修改一些windows系统的管理员密码: 2.准备工作: a.下载软件:链接:https://pan.baidu.com/s/1kV52DqE1_4siPuxS5Mosc ...

  9. Windows 2019通过网页修改域用户密码

    对于域用户来说,定期修改密码是必须的.对于没有Exchange的组织,而且经常出差在外的人员,能及时修改密码就变得很重要了. 在Windows 2003的时候有iisadmpwd可以修改.但是这个页面 ...

随机推荐

  1. 数据分析1:安装tushare安装包

    1. 2. 3.重点内容

  2. 【错误收集】SVN冲突解决 标签: 错误收集 2016-03-13 08:44 624人阅读 评论(24) 收藏

    最近在倒代码,这真的是一件挺低效率的事情的,但是为了之后工作的进行,必须把这些已经做好的界面,做好的功能搬到新的框架上来,所以安排了10来个同学一起倒代码,因为大家共用一个解决方案,所以使用svn来进 ...

  3. HZOJ 太阳神

    所以我刚学反演还没学反演就要做这么一道神仙题…… 首先大于n不好求,补集转化. $ans=n*n-\sum \limits _{i=1}^{n} \sum \limits _{j=1}^{n} \le ...

  4. 13条必知必会&&测试

    1.13条必知必会 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <> get(**kwargs) ...

  5. 2018-2-13-windows-10预览版升级win10-7月29-10240.16384

    title author date CreateTime categories windows 10预览版升级win10 7月29 10240.16384 lindexi 2018-2-13 17:2 ...

  6. 04Top K算法问题

    本章阐述寻找最小的k个数的反面,即寻找最大的k个数,尽管寻找最大的k个树和寻找最小的k个数,本质上是一样的.但这个寻找最大的k个数的问题的实用范围更广,因为它牵扯到了一个Top K算法问题,以及有关搜 ...

  7. uva 11754 Code Feat (中国剩余定理)

    UVA 11754 一道中国剩余定理加上搜索的题目.分两种情况来考虑,当组合总数比较大的时候,就选择枚举的方式,组合总数的时候比较小时就选择搜索然后用中国剩余定理求出得数. 代码如下: #includ ...

  8. 最新版本的ADT使用问题

    昨天把androidsdk和adt更新到最新版本,android sdk r22版本. 更新完后原来的项目打包后出现第三方JAR包找不到,网上搜了半天终于找到问题所在: 新版本多了一个Android ...

  9. js获取当前时间戳以及前一天时间戳

    js获取当前时间戳以及前一天时间戳(毫秒) var timestamp = (new Date()).getTime(); console.log(timestamp);//打印当前时间戳 conso ...

  10. jieba完整文档

    jieba “结巴”中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese tex ...