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

2016-02-19 12:40 11 1 收藏

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的Win2K/NT下屏蔽Ctrl+Alt+Del的响应(VC),手机电脑控们准备好了吗?一起看过来吧!

【 tulaoshi.com - 编程语言 】


  作者姓名 陆其明
  文章原始出处 http://hqtech.nease.net
  介绍:改文发表于《程序员》2001年11期
  
  正文
  大家知道,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——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函数的实现进行必要的改变。
  开发环境: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两个函数的覆盖。注重在Stdafx.h中加入#include Winwlx.h。
  3.由于要导入msgina.dll的接口函数,所以在MyGina.h中定义接口函数变量类型,如下:
  typedef (WINAPI * NEGOTIATE)       (DWord,PDWORD);
  typedef (WINAPI * IN99vIALIZE)      (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,WLX_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);
  并在类CmyGinaApp中定义成员变量,如下:
  private:
      HMODULE   hMsDll;
  public:
      NEGOTIATE         MyWlxNegotiate;
      IN99vIALIZE        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;
  注重在MyGina.h中说明extern CMyGinaApp theApp;以便于程序其他地方对theApp的引用。
  4.在MyGina.cpp中,实现InitInstance如下:
      // 得到默认的gina dll
      if (hMsDll == NULL)
      {
          hMsDll = ::LoadLibrary("msgina.dll");
      }
      // 导入各个接口函数
      if (hMsDll != NULL)
      {
      MyWlxNegotiate = (NEGOTIATE)       GetProcAddress(hMsDll,"WlxNegotiate");
      MyWlxInitialize = (IN99vIALIZE)      GetProcAddress(hMsDll,"WlxInitialize");
      MyWlxActivateUserShell=(ACTIVATE_USHELL) GetProcAddress(hMsDll,"WlxActivateUserShell");
      MyWlxDisplayLockedNotice=(PARAM_PVOID) GetProcAddress(hMsDll,"WlxDisplayLockedNotice");
      MyWlxDisplaySASNotice  = (PARAM_PVOID)     GetProcAddress(hMsDll,"WlxDisplaySASNotice");
      MyWlxDisplayStatusMessage=(DISP_STATUS)   GetProcAddress(hMsDll,"WlxDisplayStatusMessage");
      MyWlxGetStatusMessage    = (GET_STATUS)      GetProcAddress(hMsDll,"WlxGetStatusMessage");
      MyWlxIsLockOk           = (PARAM_PVOID)     GetProcAddress(hMsDll,"WlxIsLockOk");
      MyWlxIsLogoffOk&nb

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

延伸阅读
安装win2K,安装IIS Indexing Service, FrontPage 2000 Server Extensions, Internet Service Manager (HTML) 这几个别装,还有其它的一些,总之不用的都别装。(根据安全原则,最少的服务+最小的权限=最大的安全。) 首先,打开internet管理器(开始--程序--管理--Internet服务管理)如果照上面所安装的,里面有一个默认站点和一个smtp...
win7屏蔽ctrl+alt+up/down快捷键 Eclipse有个非常好用的快捷键(当然Eclipse好用的快捷键有N个)Ctrl+Alt+UP/DOWN,用于复制当前行的内容,用法很简单,将光标置与要复制的行任意位置,然后按快捷键Ctrl+Alt+UP/DOWN(UP、DOWN分别对应与键盘的上下键按键),将分别在当前行的上一行或者下一行复制一行当前的内容,复制后光标位于复制后的行内...
Windows95/98下怎样隐藏应用程序不让它出现在CTRL-ALT-DEL对话框中? 把你的应用程序从CTRL-ALT-DEL对话框中隐藏的一个简单办法是去应用程序的标题。假如一个程序的主窗口没以标题,Windows95不把它放到CTRL-ALT-DEL对话框中。清除标题属性的最好地方是在WinMain函数里。 WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { ...
Setdom=GetObject("WinNT://aDomain") Setusr=dom.Create("user","jsmith") usr.SetInfo Setgrp=GetObject("WinNT://aDomain/group") grp.Add("WinNT://aDomain/jsmith") 注意 1.aDomain改为机器名 2.Win2k自带ADSI,并不需要安装ActiveDirectory->
[本站原创]安全防御篇: 1.使用微软的辅助工具配置策略 微软提供了一套的基于MMC(管理控制台)安全配置和分析工具,利用他们你可以很方便的配置你的服务器以满足你的要求。具体内容请参考微软主页: http://www.microsoft.com/windows2000/techinfo/howitworks/security/sctoolset.asp 2.关闭不必要的服务 ...

经验教程

812

收藏

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