windows系统锁屏及修改密码项目开发经验记录
改造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系统锁屏及修改密码项目开发经验记录的更多相关文章
- Windows Server 2012R2 / 2008R2 修改密码策略(password policy)
一. 针对于未添加到域中的机器 cmd中执行gpedit.msc 打开Local Group Policy Editor查看password policy设置,修改对应的password polic ...
- windows下 mysql 5.6.40 卸载 安装 修改密码
最近执行另一个mysql版本导出的sql脚本,出现问题!出于一些原因,把之前的mysql5.5卸载,由于卸载不干净出现了一些问题.特此总结方法! 参考链接: https://blog.csdn.net ...
- linux和windows强制用户第一次登陆修改密码
linux: passwd -e root windows: 计算机右键->管理->本地用户和组->用户->administrator->下一次登陆修改密码 如果密码复杂 ...
- Windows下配置Redis,并修改密码
原文:Windows下配置Redis,并修改密码 Windows下配置Redis,并修改密码 下载 Redis Windows版本的GitHub链接,直接下载zip文件解压到指定文件夹下或者下载msi ...
- Windows下GIT的用户密码修改
Windows下GIT的用户密码修改
- windows下安装mysql8并修改密码
MySQL下载地址:http://dev.mysql.com/downloads/mysql/ Windows下安装MySQL 我下的是最新版的MySQL,解压后,目录如下: 1.进入dos的命令行, ...
- 配置windows自动修改密码和自动登录
日常运维多台服务器,每季度要修改一次密码,非常麻烦,现做一个VBS脚本,计划任务设置每季度第一天三点定时运行,则可解决该问题,具体实现脚本如下:autochg_pwd.vbs ystr=year(No ...
- windows系统远程修改密码
1.需求:公司需要短时间.批量修改一些windows系统的管理员密码: 2.准备工作: a.下载软件:链接:https://pan.baidu.com/s/1kV52DqE1_4siPuxS5Mosc ...
- Windows 2019通过网页修改域用户密码
对于域用户来说,定期修改密码是必须的.对于没有Exchange的组织,而且经常出差在外的人员,能及时修改密码就变得很重要了. 在Windows 2003的时候有iisadmpwd可以修改.但是这个页面 ...
随机推荐
- spring data jpa使用别名--as
使用jpa进行两表联查时总会有字段名相同,所以需要用别名进行区分: 例子: department表同时包含子级id和父级id: 查询语句为: select d.id,d.name,d.descript ...
- 关于使用JavaMail发送邮件
import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import javax.activati ...
- 洛谷P1807 最长路_NOI导刊2010提高(07)
//拓扑排序求最长路 #include<bits/stdc++.h> #include<queue> using namespace std; const int INF=0x ...
- TCP/IP 、HTTP和SOCKET
TCP/IP协议概念 TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这 ...
- 07Redis入门指南笔记(主从复制、哨兵)
现实项目中通常需要若干台Redis服务器的支持: 结构上,单个 Redis 服务器会发生单点故障,而且一台服务器需要承受所有的请求负载.这就需要为数据生成多个副本并分配在不同的服务器上: 容量上,单个 ...
- mysql 优化 1
一. 数据库索引 规则8:业务需要的相关索引是根据实际的设计所构造sql语句的where条件确定的,业务不需要的不要建索引,不允许在联合索引(或主键)中存在多余的字段,特别是该字段根本不会在条件语句中 ...
- 传说中Python最难理解的点|看这完篇就够了(装饰器)
https://mp.weixin.qq.com/s/B6pEZLrayqzJfMtLqiAfpQ 1.什么是装饰器 网上有人是这么评价装饰器的,我觉得写的很有趣,比喻的很形象 每个人都有的内裤主要是 ...
- oracle用UNION-ALL 替换UNION ( 如果有可能的话)
当SQL语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序. 如果用UNION ALL替代UNION, 这样排序就不是必要了. 效率 ...
- 搭建服务器上的GIT并实现自动同步到站点目录(www)
https://blog.csdn.net/baidu_30000217/article/details/51327289 前言:当我们想要实现几个小伙伴合作开发同一个项目,或者建立一个资源分享平台的 ...
- python单例模式的实现与优化
python单例模式的实现与优化 阅读目录(Content) 单例模式 实现单例模式的几种方式 1.使用模块 2.使用装饰器 3.使用类 4.基于__new__方法实现(推荐使用,方便) 5.基于me ...