windows gina
来源:互联网 发布:python 汉字转拼音 编辑:程序博客网 时间:2024/05/16 15:22
做过windows定制登录的(xp/2000/2003等,vista/win7/2008已经使用了另外一种叫做凭证提供程序的方式了)一定很了解这个了,写这个的主要目的是希望给刚刚接触GINA的同学一些帮助(但愿是有用的)!!
GINA英文全名叫做 Graphical Identification and Authentication,是一个图形化的登录认证模块.
首先让我们看一下windows的登录过程,了解一下GINA在登录环节中的位置
打开任务管理器,会看到一个叫做winlogon的进程,这个进程在windows做好一些初始化工作后会被启动,并且将一直存在直到系统关闭.
winlogon是windows负责用户登录、认证之类操作的进程,winlogon启动时回查看注册表中 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WInlogon的GinaDll项,
如果发现设置了这一项,则winlogon将使用GinaDll指定的动态模块,否则的话加载msgina.dll(在系统目录下)。
当有用户登录、锁屏、关机等SAS事件时,winlogon会探测到,winlogon通过调用GINA模块中导出的函数来完成这些SAS事件的处理。
开发定制GINA是一件比较繁琐的事情,需要你对windows的安全机制有很深的了解,一般情况下我们也用不着这么做(自己定制GINA除了开发繁琐外稳定性也是一大挑战),大部分人的做法是只定制(重写函数)自己感兴趣的一些操作,其他的操作通过转调msgina.dll来实现.完成这样的工作你需要:
1. 对gina导出函数有所了解
2. 了解各个函数的基本用处和调用顺序
首先说下gina的导出函数
WlxNegotiate
WlxInitialize
WlxDisplaySASNotice
WlxLoggedOutSAS
WlxActivateUserShell
WlxLoggedOnSAS
WlxDisplayLockedNotice
WlxWkstaLockedNotice
WlxlsLockOk
WlxlsLogoffOk
WlxLogoff
WlxShutdown
WlxStartApplication(v1.1 新增)
WlxScreenSaverNotify(v1.1新增)
WlxNetworkProviderLoad(v1.3新增)
WlxDisplayStatusMessage(v1.3新增)
WlxGetStatusMessage(v1.3新增)
WlxRemoveStatusMessage(v1.3新增)
WlxGetConsoleSwitchCredentials(v1.4新增)
WlxReconnectNotify(v1.4新增)
WlxDisconnectNotify(v1.4新增)
不同的平台会要求你导出上面这些导出函数的部分或全部函数.可以在平台运行库的事例代码中找到微软提供的gina事例,可以在这个基础上
修改实现你需要完成的功能,下面说下函数的作用
函数说明:
BOOL WINAPI WlxNegotiate(DWORD dwWinLogonVersion, PDWORD pdwDllVersion);
这个函数用来完成winlogon和gina的版本协商,用以确定gina是否支持当前版本的winlogon程序(如果大部分接口希望使用msgina的可以在这个函数里加载
msgina模块-LoadLibrary,并通过GetProcessAddress导出需要的函数)
BOOL WINAPI WlxActicateUserShell(PVOID pWlxContext, PWSTR pszDesktopName, PWSTR pszMprLogonScript, PVOID pEnvironment)
用户登录成功后,winlogon调用此函数启动用户shell
VOID WINAPI WlxDisplayLockedNotice(PVOID pWlxContext)
系统要锁定,调用该函数实现锁定(修改用户当前状态,显示锁定信息等)
VOID WINAPI WlxDisplaySASNotice(pWlxContext)
无任何用户登录时,调用此函数显示一些提示信息,引导用户操作
BOOL WINAPI WlxIsLockOk(PVOID pWlxContext)
试图锁定时winlogon通过调用该函数判断是否可以锁定
BOOL WINAPI WlxIsLogoffOk(PVOID pWlxContext)
winlogon 调用此函数判断是否可以注销
int WINAPI WlxLoggedOnSAS(PVOID pWlxContext, PWORD dwSasType, PVOID pReserved)
系统当前已经处于登录状态时(未处于锁定状态),winlogon接收到SAS时间后会调用该函数
int WINAPI WlxLoggedOutSAS(PVOID pWlxContext, DWORD dwSasType, PLUID pAuthenticationId, PSID pLogonSid, PDWORD pdwOptions, PHANDLE phToken,
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo, PVOID *pProfile)
当没有用户处于登录状态(包括已登录后锁定状态),winlogon接收到SAS事件后会调用该函数
VOID WINAPI WlxLogoff(PVOID pWlxContext)
用户注销时winlogon调用该函数
...
其他函数自己做实验吧.大部分定制gina要自己实现WlxLoggedOutSAS这个函数的,在这个函数里处理你关心的SAS事件,如CTRL+ALT+DEL、用户登录等
在最后想说明一下关于有些时候安装了自己的gina后会出现远程桌面无法用,会有不兼容的xxgina.dll等提示,这种情况是因为你没有导出WlxGetConsoleSwitchCredentials函数的缘故
- windows gina
- windows gina
- Windows开机登录认证与Gina DLL
- Windows开机登录认证与Gina DLL
- windows 登录模块GINA开发参考
- Windows开机登录认证与Gina DLL
- 如何编写自己的Windows登录认证模块Gina
- 自定义GINA
- 自定义GINA
- 资料: GINA
- 通过修改Gina.dll Windows指纹登录程序完成了-2
- 通过修改Gina.dll Windows指纹登录程序完成了-3
- 通过修改Gina.dll Windows指纹登录程序完成了-4
- Gina编程----Wlx.h
- Window GINA 编程
- GINA & Credential Provider
- GINA编程-1
- Gina编程----Wlx.h
- 关于linux下输入单双引号等系统不识别的问题.
- c++的面向对象程序设计
- GTK+设置控件背景图片
- SQL基础
- IE 实现文字超出指定长度后用省略号代替
- windows gina
- 新版博客体验一
- Openembedded local.conf文件配置笔记
- 如何在C++中调用C的代码
- 关于CSDN 新版本的一些建议
- Eclipse 3.7(代号Indigo)正式版发布!
- 如何迅速成为Java高手
- 数据保存时,出现‘record not found or changed by another user’错误信息的解决办法
- Java Tutorial(Java操作MongoDB入门)