Windows vista为开发者提供了更便利的开发模式,开发自定义的登录凭据(指纹登录、usbkey认证等等)。
Windows vista不再是直接与 winlogon直接交互,而是与winlogon有了一层屏障(会话边界),将所有计算机进程和各个用户的进程进行分隔开来,这大大提高了登录的安全性。此外,对内核的全局命名空间的控制也更加严格,因为默认情况下,由用户应用程序创建的对象已不在内核全局命名控件之内。
最近,应工作需求,实现用usbkey的pin码验证登录,下面是自己查询资料,整理归纳的流程。
- winlogon启动logonUI.exe 启动成功
- logonUI.exe枚举在[HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\auntication\credential provider下注册的所有凭据提供程序(在此路径下,注册你自定义的凭据)
- 枚举完成后,每个提供程序的DLL会被加载
- 接收到Provider::CreateInstance调用
- 对于混合凭据提供程序,实例化一个CSampleProvider
- 用户看到登录界面
- CTRL+alt+delete
- 每个提供程序收到Provider::setusagescenario CPUS_LOGON通知,这向提供程序表明,用户想进行交互式登录。
- 该混合凭据提供程序将尝试从所插入的usbkey中读取凭据
- 如果和usbkey交互成功,则实例化 CSampleCredential,并将其与CSampleProvider关联
- 调用credential::initialize
- 调用provider::advise,advise的目的是为提供程序提供一种机制,将对可见的UI元素(当前还未创建)所做的任何预期的更改通知给logonUI
- 初始化之后,无论何时插入usbkey都会增加可用凭据数,而取出则会减小数字
- 发生变化,通知logonUI
有用的资料:
CredentialProvider资料
工作笔记,以免遗忘。