改造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. 【JZOJ4882】【NOIP2016提高A组集训第12场11.10】多段线性函数

    题目描述 数据范围 解法 三分找出极值,两个二分找出极值的范围. 代码 #include<iostream> #include<stdio.h> #include<str ...

  2. 洛谷P3286 [SCOI2014]方伯伯的商场之旅

    题目:洛谷P3286 [SCOI2014]方伯伯的商场之旅 思路 数位DP dalao说这是数位dp水题,果然是我太菜了... 自己是不可能想出来的.这道题在讲课时作为例题,大概听懂了思路,简单复述一 ...

  3. Java练习 SDUT-3849_分数四则运算

    分数四则运算 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 编写程序,实现两个分数的加减法 Input 输入包含多行数 ...

  4. 微信小程序左滑显示按钮demo

    wxml结构(删除部分代码): <view class="chapter-item" wx:for="{{klgData}}" data-index=&q ...

  5. UVa 10502【dp】

    uva 10502 题意:给定01矩阵,求有多少个由1构成的矩阵.1本事也算一个矩阵. 到最后还是想不出来..... 每次枚举两行,从第i行到第j行,k枚举矩阵的宽(column).这样就相当于每次看 ...

  6. 2018-9-30-C#-从零开始写-SharpDx-应用-画三角

    title author date CreateTime categories C# 从零开始写 SharpDx 应用 画三角 lindexi 2018-09-30 18:30:14 +0800 20 ...

  7. vmware中centos、redhat桥接网络配置

    第一步 第二步 第三步 centos: redhat:

  8. QQ 聊天机器人API

    QQ机器人是腾讯陆续推出的的人工智能聊天机器人的总称. 都说小Q妹妹聪明好学,我们能够教她说话.也能够请他帮忙查询邮编.手机号,或者解释成语.翻译成语,据说她还会查询手机号码归属地.应用科学计算器. ...

  9. mybatis-generator1.3.6的使用

    下载地址: http://blog.mybatis.org/2017/12/mybatis-generator-version-136-released.html 参考了 http://blog.cs ...

  10. SDO_RELATE和SDO_GEOM.RELATE

    SDO_RELATE需要事先建立索引,而SDO_GEOM.RELATE不用. SDO_RELATE返回True或False, SDO_GEOM.RELATE除可返回True或False外,还可返回关系 ...