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

2016-02-19 21:06 17 1 收藏

下面请跟着图老师小编一起来了解下VC实现Win2000下屏蔽Ctrl+Alt+Del键,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

【 tulaoshi.com - 编程语言 】

导读:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  大家知道,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而不做其他处理。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  二、编程步骤

  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、添加代码,编译程序。

  三、程序代码

  // //////////////////////////////////////////MyGina.h : main header file for the MYGINA DLL
  #if !defined(AFX_MYGINA_H__5959C4FD_1D31_4E51_B3CD_B5649C8473B7__INCLUDED_)
  #define AFX_MYGINA_H__5959C4FD_1D31_4E51_B3CD_B5649C8473B7__INCLUDED_
  #if _MSC_VER 1000
  #pragma once
  #endif // _MSC_VER 1000
  #ifndef __AFXWIN_H__
  #error include 'stdafx.h' before including this file for PCH
  #endif
  #include "resource.h" // main symbols
  //定义的函数类型;
  typedef (WINAPI * NEGOTIATE) (DWORD,PDWORD);
  typedef (WINAPI * INITIALIZE) (LPWSTR,HANDLE,PVOID,PVOID,PVOID *);
  typedef (WINAPI * ACTIVATE_USHELL) (PVOID,PWSTR,PWSTR,PVOID);
  typedef (WINAPI * PARAM_PVOID) (PVOID);
  typedef (WINAPI * DISP_STATUS) (PVOID,HDESK,DWORD,PWSTR,PWSTR);
  typedef (WINAPI * GET_STATUS) (PVOID,DWORD *,PWSTR,DWORD);
  typedef (WINAPI * LogoN_SAS) (PVOID,DWORD,PVOID);
  typedef (WINAPI * LogoUT_SAS) (PVOID,DWORD,PLUID,PSID,PDWORD,
  PHANDLE,PWLX_MPR_NOTIFY_INFO,PVOID *);
  typedef (WINAPI * NETWORK_LOAD) (PVOID,PWLX_MPR_NOTIFY_INFO);
  typedef (WINAPI * SCR_SAVER) (PVOID,BOOL *);
  typedef (WINAPI * SHUT_DOWN) (PVOID,DWORD);
  typedef (WINAPI * START_APP) (PVOID,PWSTR,PVOID,PWSTR);
  typedef (WINAPI * LOCKED_SAS) (PVOID,DWORD);
  class CMyGinaApp : public CWinApp
  {
  private:
  HMODULE hMsDll;
  public:
  NEGOTIATE MyWlxNegotiate;
  INITIALIZE MyWlxInitialize;
  ACTIVATE_USHELL MyWlxActivateUserShell;
  PARAM_PVOID MyWlxDisplayLockedNotice;
  PARAM_PVOID MyWlxDisplaySASNotice;
  DISP_STATUS MyWlxDisplayStatusMessage;
  GET_STATUS MyWlxGetStatusMessage;
  PARAM_PVOID MyWlxIsLockOk;
  PARAM_PVOID MyWlxIsLogoffOk;
  LogoN_SAS MyWlxLoggedOnSAS;
  LogoUT_SAS MyWlxLoggedOutSAS;
  PARAM_PVOID MyWlxLogoff;
  NETWORK_LOAD MyWlxNetworkProviderLoad;
  PARAM_PVOID MyWlxRemoveStatusMessage;
  SCR_SAVER MyWlxScreenSaverNotify;
  SHUT_DOWN MyWlxShutdown;
  START_APP MyWlxStartApplication;
  LOCKED_SAS MyWlxWkstaLockedSAS;
  public:
  CMyGinaApp();
  // Overrides
  // ClassWizard generated virtual function overrides
  //{{AFX_VIRTUAL(CMyGinaApp)
  public:
  virtual BOOL InitInstance();
  virtual int ExitInstance();
  /

来源:http://www.tulaoshi.com/n/20160219/1625264.html

延伸阅读
Windows95/98下怎样隐藏应用程序不让它出现在CTRL-ALT-DEL对话框中? 把你的应用程序从CTRL-ALT-DEL对话框中隐藏的一个简单办法是去应用程序的标题。假如一个程序的主窗口没以标题,Windows95不把它放到CTRL-ALT-DEL对话框中。清除标题属性的最好地方是在WinMain函数里。 WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { ...
标签: Java JAVA基础
布丁在大作我的在WIN2000下的jsp的安装中提到: 1.下载jdk1.3和tomcat; 2.安装jdk1.3和解压tomcat到c:盘根目录下; 3.进入tomcat的目录里,找到startup.bat文件,打开编辑。 在行call tomcat start的前面加上两行: SET TOMCAT_HOME=c:\tomcat 和 SET JAVA_HOME=c:\jdk1.3 注:c:\jdk1.3是jdk1.3安装的位置。 4.然后鼠标右键点击“我的电...
标签: 办公软件
《解决Word应用中的两个问题》中介绍了一个“随心所欲移图片”的方法,只是将“水平间距”和“垂直间距”调小至“1磅”,有治标不治本之嫌,因为系统规定度量值都有最小值界限。在Word的“绘图网格”对话窗口(在“绘图”工具中)中有“对象与网格对齐”及“对象与其他对象对齐”两个选项...
安装选默认目录就可以了 c:mysql 把 c:mysqlmy-example.cnf copy 为 c:my.cnf 要修改的自己去看看吧,很简单的 把 c:mysqllibcygwinb19.dll copy 到 winntsystem32 启动 mysql c:mysqlinmysqld-shareware --install net start mysql 启动啦 更改 root 的 password C:mysqlinmysql mysql mysql UPDATE user SET password=PASSWORD(''...
刚开始的时候,我把系统改成可管理性较强的Windows2000(文件系统必须采用NTFS格式),建立两个同属User组的受限制帐户Game(用于游戏)和Study(学习帐户)并为他们设置相应文件、文件夹的安全权限,然后利用系统管理工具中“本地安全策略”(开启“当登录时间用完时自动注销用户”)结合netuser命令来限制特定游戏帐号(如Game)的登录时间,...

经验教程

86

收藏

67
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部