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


    改造windows开机、锁屏登录流程需要使用微软停供的Credential Providers工程,编译出来是dll,安装在C:windowssystem32目录下,然后注册注册表(运行工程生成的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

  • 相关阅读:
    C# 局部函数与事件
    PHP curl_multi_strerror函数
    PHP curl_multi_setopt函数
    PHP curl_multi_select函数
    PHP curl_multi_remove_handle函数
    PHP curl_multi_init函数
    用户&权限
    HEOI2019 游记——240秒处的起死回生
    WPF 判断调用方法堆栈
    WPF 判断调用方法堆栈
  • 原文地址:https://www.cnblogs.com/rixiang/p/11120990.html
Copyright © 2020-2023  润新知