目前位置: VCer资源中心 >>> VCer文章 >>> 其它技术

[本帖已阅读2485次 分值110 回复2次] 张贴资源 发回信箱 控制面板

Win2K/NT下屏蔽Ctrl+Alt+Del的响应

提供者:Bccv 张贴时间:2004-04-07 09:04:15.0 出处:(多年前收集的,记不得哪里来得了) 作者:不祥

Win2K/NT下屏蔽Ctrl+Alt+Del的响应(2004-04-07 09:04:15.0)


babbye


welcome to http://bccv.songstech.com/

 
级别: VCer连长
头衔: VCer会员

经验: 3510
作品: 87
分会: 西南分会
注册: 2004-03-29 16:23:29.0
登录: 2007-08-31 11:17:04.0

大家知道,Ctrl+Alt+Del是Win2k/NT操作系统默认的系统登录/注销组合键序列,系统级别很高。在应用程序中,想要屏蔽掉该键序列的响应或得到这个"按下"事件,难度是相当大的。本文介绍了一种简单易行的方法,实现在用户登录成功后,按下Ctrl+Alt+Del不再弹出"Windows安全"对话框。

关键词:GINA(Graphical Identification aNd Authentication) SAS(Secure Attention Sequence)

一. 开发原理

首先介绍一下Winlogon。Windows 2000/NT有三种系统状态:没有用户登录状态、用户成功登录状态以及工作站锁定状态。Winlogon是Windows 2000/NT操作系统提供交互式登录支持的组件。Winlogon有三个组成部分:可执行文件winlogon.exe,提供图形界面认证功能的动态库Gina Dll,以及一些网络服务提供动态库Network Provider Dll。参考模型如下: 

winlogon.exe处理一些下层导出的接口函数,而认证策略是在Gina Dll中是独立设计的。在系统启动时,Gina Dll被winlogon.exe装载。Microsoft提供了一个默认的Gina Dll--Winnt\system32\msgina.dll,提供了标准的用户名、密码认证模式。Gina Dll是可替换的,用户可以设计自己的Gina Dll,以提供其他如智能卡、视网膜、指纹或其他一些认证机制。

开发自定义的Gina Dll。必须实现并导出与winlogon.exe交互的18个标准函数接口,包括WlxNegotiate、WlxInitialize、WlxLoggedOnSAS等(其他函数接口请参考Msdn)。其中WlxNegotiate是winlogon.exe调用的第一个接口函数,进行必要的版本判断,随后调用的是WlxInitialize,主要完成winlogon.exe特定版本的函数分派表向Gina Dll的传递。笔者还要说明的是WlxLoggedOnSAS函数,这个函数主要的功能是,当winlogon在登录成功状态下,接收到SAS事件,于是调用这个函数进行SAS事件的识别以及进行各事件的相应处理。

自定义Gina Dll的使用。比如开发的Gina Dll文件名为MyGina.dll。将该文件放到以下路径:Winnt\system32。并修改注册表,如下:

Key Name: \HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ Winlogon

Value Name: GinaDLL

Value Type: [REG_SZ]

Value: MyGina.dll

重新启动计算机Gina.dll即投入使用。

二. 应用实例

应用要求:在用户登录成功状态下,按下Ctrl+Alt+Del时系统不再弹出"Widows安全"对话框。由于并不需要改变用户名、密码这种标准的认证模式,所以可以仍然使用msgina.dll中导出的函数接口,而对WlxLoggedOnSAS函数的实现进行必要的改变。

开发环境:Windows 2000,PII 400

开发工具:Microsoft Visual C++ 6.0

开发步骤:

1.新建项目,选择MFC AppWizard(dll),项目名输入为MyGina。按下"OK"后,选择Regular DLL with MFC statically linked,按下"Finish"。

2.使用View->ClassWizard为CmyGinaApp增加InitInstance和ExitInstance两个函数的覆盖。

3.由于要导入msgina.dll的接口函数,所以在MyGina.h中定义接口函数变量类型,如下:

并在类CmyGinaApp中定义成员变量,如下:

注意在MyGina.h中说明extern CMyGinaApp theApp;以便于程序其他地方对theApp的引用。

4.在MyGina.cpp中,实现InitInstance如下:

 

5.实现接口函数。由于本应用仍然保持msgina.dll的大部分操作,所以MyGina.dll的接口函数的实现较为简单。重点需要注意的是WlxLoggedOnSAS函数的实现。当在成功登录状态下,不管接收到什么SAS事件,该函数直接返回WLX_SAS_ACTION_NONE而不做其他处理。由于实现的函数较多(必须的18个),笔者仅列出代表性的五个,其余的依理类推。

6.将MyGina.dll中实现的所有接口函数,在MyGina.def中定义导出。

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/1187.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

welcome to http://bccv.songstech.com/

[回复该贴] [加入个人书签]
[投票结果]

A: 评分 10 100% (3 票)
B: 评分 5 0% (0 票)
C: 评分 0 0% (0 票)
D: 评分 -5 0% (0 票)
E: 评分 -10 0% (0 票)

 


re:Win2K/NT下屏蔽Ctrl+Alt+Del的响应
那位好心人给我个空间 ...

Bccv 于 2004-04-08 09:07:42.0 编辑 [回复该贴]

re:Win2K/NT下屏蔽Ctrl+Alt+Del的响应
这是个好东西哦!前段时间研究过一点GINA,呵呵!

jerry 于 2004-04-07 14:01:54.0 编辑 [回复该贴]