龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC实现Win2000下屏蔽Ctrl+Alt+Del键

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
导读: 大家知道,Ctrl+Alt+Del是Win2k/NT操作系统默认的系统登录/注销组合键序列,系统级别很高。在应用程序中,想要屏蔽掉该键序列的响应或得到这个"按下"事件,难度是相当大的。本

导读:

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

  一、 实现方法

  首先介绍一下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--Winntsystem32msgina.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。将该文件放到以下路径:Winntsystem32。并修改注册表,如下:

  Key Name: HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersion Winlogon
  Value Name: GinaDLL
  Value Type: [REG_SZ]
  Value: MyGina.dll

  重新启动计算机MyGina.dll即投入使用。在用户登录成功状态下,按下Ctrl+Alt+Del时系统不再弹出"Widows安全"对话框。由于并不需要改变用户名、密码这种标准的认证模式,所以可以仍然使用msgina.dll中导出的函数接口,而对WlxLoggedOnSAS函数的实现进行必要的改变,不管接收到什么SAS事件,该函数直接返回WLX_SAS_ACTION_NONE而不做其他处理。

  二、编程步骤

  1、启动Visual C++6.0,新建一个项目,选择MFC AppWizard(dll),项目名输入为MyGina,按下"OK"后,选择Regular DLL with MFC statically linked,按下"Finish";

  2、使用Class Wizard重载CmyGinaApp类的InitInstance()和ExitInstance()两个函数,并注意在Stdafx.h中加入#include ;

  3、在MyGina.h文件中说明"extern CMyGinaApp theApp",以便于程序其他地方对theApp的引用;在类CMyGinaApp中定义成员变量(具体内容见代码部分);

  4、添加代码,编译程序。

精彩图集

赞助商链接