




已阅读5页,还剩185页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对于用过Windows的人 几乎没有人不知道Ctrl Alt Del组合键 尤其是在使用经常死机的Windows9x时 使用它的频率更高 这 一组合键是专门为了系统安全起见提供的紧急出口 VC知识库在线杂志第11期 ac952 z cn在他的个人专栏中写过一篇关于这方面的文章 W INDOWSNT 2000下如何屏蔽CTRL ALT DEL 因此本文侧重于介绍在WindowsXP中如何实现屏蔽CTRL ALT DEL 组合键 也就是任务管理器 任务切换组合键 Alt Tab 任务栏和 开始 菜单 Ctrl Esc VK LWIN VK RWIN 这个方 法也能应用于Windows2000环境 在Windows9x Me系统中 屏蔽Ctrl Alt Del和各种任务开关键的方法是通过下面的 方法实现的 BOOLbOldState SystemParametersInfo SPI SETSCREENSAVERRUNNING TRUE MS大佬认为这种方法很业余 所以在WindowsNT 2000 XP中对此进行了修改 在这些较新 的Windows版本中用户登陆使用Winlogon和GINA GraphicalIdentificationandAuthenticati on 意思是图形化的身份认证 挺吓唬人的是不是 其实就那么回事 Winlogon是Windows系统的一部分 它专门提供交互式登陆支持 而G INA则是Winlogon用来实现认证的一个DLL 这个DLL就是msgina dll WlxInitialize WlxActivate UserShell便是其中输出 当然不知这两个 还有别的 前者进行自身的初始化 后者激活用户的外壳程序 Windows就是用这个DLL来实现 用户名 口令的身份认证的 但是开发人员可以用自己的GINA代替msgina dll 例如 实现智能卡 视网膜扫描仪 DNA检查等等认证机制来 代替输入用户名 口令形式的身份检查 下面的表格中列出了与GINA有关的全部函数 其中有一个是WlxLoggedOnSAS 当按下Ctrl A lt Del键时 Winlogon便调用这个函数 表一 GINA函数一览表函数描述WlxActivateUserShell激活用户 外壳程序WlxDisplayLockedNotice允许GINADLL显示锁定信息WlxDisplaySASNotice当没有用户登 陆时 Winlogon调用此函数WlxDisplayStatusMessageWinlogon用一个状态信息调用此函数进行显示Wlx GetConsoleSwitchCredentialsWinlogon调用此函数读取当前登陆用户的信任信息 并透明地将它们传到目标会话W lxGetStatusMessageWinlogon调用此函数获取当前状态信息WlxInitialize针对指定的窗口位置进行GINAD LL初始化WlxIsLockOk验证工作站正常锁定WlxIslogoffOk验证注销正常WlxLoggedonSAS用户已登陆并 且工作站没有被加锁 如果此时接收到SAS事件 则Winlogon调用此函数WlxLoggedOutSAS没有用户登陆 如果此时收到SAS 事件 则Winlogon调用此函数WlxLogoff请求注销操作时通知GINADLLWlxNegotiate表示当前的Winlogo n版本是否能使用GINADLLWlxNetworkProviderLoad在加载网络服务提供程序收集了身份和认证信息后 Winlogon 调用此函数WlxRemoveStatusMessageWinlogon调用此函数告诉GINADLL停止显示状态信息WlxScreen saverNotify允许GINA与屏幕保护操作交互WlxShutdown在关闭之前Winlogon调用此函数 允许GINA实现任何关闭 任务 例如从读卡器中退出智能卡WlxStartApplication当系统需要在用户的上下文中启动应用程序时调用此函数WlxWkst aLockedSAS当工作站被锁定 如果接收到一个SAS 则Winlogon调用此函数在默认情况下 GINA显示登陆对话框 用户输入用户 名及口令 所以要想屏蔽掉Ctrl Alt Del 则可以写一个新的MyGina dll 其中提供接口调用msgina dll的函数WlxLo ggedOnSAS 从而实现Ctrl Alt Del屏蔽 或者编写一个键盘驱动程序来实现 难道屏蔽Ctrl Alt Del真的象上述所说 的那么麻烦吗 有没有更好的方法呢 答案是肯定的 所以忘掉GINA吧 使用操作系统的策略设置完全可以搞掂这个问题 方法是进入 开始 菜单 选择 运行 然后在运行对话框中输入 gpedit msc 启动Windows系统的组策略编辑器 在左边窗格查看 用户配置 管理模板 系统 登 录 注销 则在右边窗格策略里不难发现 禁用任务管理器 一项 组策略编辑器通过对这个策略的设置可以屏蔽掉Ctrl Alt Del 如 果要通过编写代码来实现 则必须操作下面的注册表项 HKCUSoftwareMicrosoftWindowsCurrent VersionPoliciesSystemDisableTaskMgr dword 1如此设置之后 则在WindowsXP中 如 果用户按下Ctrl Alt Del 则会弹出一个出错对话框 注意这里假设在控制面板中 用户帐号 管理的 选择登录和注销选项 设置启用了 使用欢迎屏幕 一项 否则 XP将使用Windows的传统登录模式 要求用户输入帐户名 并且Ctrl Alt Del组合键的行为也和传统的 行为一样 注册表中DisableTaskMgr的设置也只是将登录 注销对话框中的任务管理器按钮屏蔽或置灰 有人可能会问 有关任务管理器的文档 又没有明确说明 那你是怎么知道DisableTaskMgr是用来禁用任务管理器的呢 告诉你吧 我是在使用GPEDIT时发现的 GPEDIT是 一个非常有用的工具 不仅可以用它来编辑策略 还可以用它来发现策略 利用这个工具可以轻松控制Windows的许多东西 从许可权限的存取到是否使 用IE的传统外观 从是否显示对话框中的PlacesBar到是否用Ctrl Alt Del启动任务管理器 总之用它可以配置上百个界面行为 因此 它是一个足以让系统管理员垂延三尺的工具 一旦找到了感兴趣的策略 那如何知道相应的注册表位置呢 有两种方法 第一种是比较粗鲁的办法 在修改策略 的前后将注册表输出到一个 reg文件 然后比较它们有什么不同 所有的策略无外乎以下的四个注册表键 用户指定HKEY CURREN T USERSoftwarePoliciesHKEY CURRENT USERSoftwareMicrosoftWindowsCurre ntVersionPolicies 机器指定HKEY LOCAL MACHINESoftwarePoliciesHKEY LO CAL MACHINESoftwareMicrosoftWindowsCurrentVersionPolicies第二种方法是直捣信息源 头 检查描述策略的管理模板文件 adm 下面是WindowsXP的system adm文件对DisableTaskMgr的描述 Wi ndows2000对此的描述稍有不同 其细节请参考Windows2000的资源开发包 CATEGORY CADOptions if version 4EXPLAIN CADOptions Help endifKEYNAME SoftwareMicrosof tWindowsCurrentVersionPoliciesSystem POLICY DisableTaskMgr ifvers ion 4SUPPORTED SUPPORTED Win2k endifEXPLAIN DisableTaskMgr He lpVALUENAME DisableTaskMgr ENDPOLICY MoreCtrl Alt Delpolicies here ENDCATEGORY Ctrl Alt Deloptions DisableTaskMgr He lp 防止用户启动 任务管理器 Taskmgr exe nn如果该设置被启用 并且用户试图启动任务管理器 系统会显示消息 解释 是一个策略禁止了这个操作 nn任务管理器让用户启动或终止程序 监视计算机性能 查看及监视计算机上所有运行中的程序 包含系统服务 搜索程 序的执行文件名 及更改程序运行的优先顺序 DisableTaskMgr 删除任务管理器 以上是DisableTaskMgr的描述 片断正是在这段描述中KEYNAME和VALUENAME指定了注册表的键值对 利用这种方法 你可以为自己的应用程序创建管理模板和策略 但编 辑和浏览 adm模板文件的编辑器必须支持Unicode字符 如Notepad或者WordPad等都可以 此外 使用管理模板文件 系统管理员可 以用它为整个组织配置需要的策略 由此可以看出 此文件在系统中的地位举足轻重 有关模板管理文件格式的详细信息请参考平台SDK 最后需要强调的 是DisableTaskMgr只是禁用Ctrl Alt Del的功能 下面我们来讨论如何捕获它的按键序列 要想截获Ctrl Alt Del 有三种可选择的方法 1 编写一个GINA代理 此方法我们在以后的文章中介绍 实际上 ac952 z cn的个人专栏文章 WINDOWS NT 2000下如何屏蔽CTRL ALT DEL 使用的就是这种方法 2 编写一个键盘驱动程序 本文例子程序使用的方法 3 用自己的 程序代替任务管理器程序TaskMgr exe 屏蔽Ctrl Alt Del解决方案的具体实现细节请参考本文的例子代码 下面让我们来解 决屏蔽任务切换键序列的问题 这些键序列包括Alt Tab Ctrl Esc Alt Esc VK LWIN VK RWIN以及任务栏 在很早 以前的Window3 1年代 处理这个问题的方法是通过WM SYSKEYDOWN实现 到了Windows9x时期 本文前面提到过对这个问题的 处理方法 使用SPI SETSCREENSAVERRUNNING 但是进入WindowsNT4 0 SP3 Windows2000以及W indowsXP时代 对这个问题的处理已经有所不同 必须写一个低级的键盘驱动钩子 不要怕 因为要实现这个钩子并不是很难 本文下面会介绍如何实 现这个键盘钩子 一般来讲 系统级钩子必须是一个DLL 下面是本文提供的一个键盘钩子DLL的源代码片断 TaskKeyHook dll 头文件 TaskKeyHook h defineDLLimport declspec dllimport DLLimport BOOLDisableTaskKeys BOOLbEnable BOOLbBeep DLLimportBOOLAreTaskKeysD isabled 实现文件 TaskKeyHook cpp define WIN32 WINNT00500 forKBDL LHOOKSTRUCT include MFCcoreandstandardcomponents defineDLLEXPORT declspec dllexport App DLL object classC TaskKeyHookDll publicCWinApp public CTaskKeyHookDll CTaskKey HookDll MyDll 下面的代码表示这一部分在此DLL所有实例之间共享 低级键盘钩子一定是系统级的钩子 pragmadata seg mydata HHOOKg hHookKbdLL NULL 钩子句柄BOOLg bBeep FALSE 按下非法键时蜂鸣 响铃 pragmadata seg pragmacomment linker SECTION mydata RWS 告诉链接器 建立数据共享段 低级键盘钩子 截获任务转换键 不传递直接返回 LRESULTCALLBACKMyTaskKeyHookLL intnCode WPARAMwp LPARAMl p KBDLLHOOKSTRUCT pkh KBDLLHOOKSTRUCT lp if nCode HC ACTION BOOLbCtrlKeyDown GetAsyncKeyState VK CONTROL sizeof SHORT 8 1 if pkh vkCode VK ESCAPE bCtrlKeyDown Ctrl Esc Alt TAB pkh vkCode VK TAB pkh flags LLKHF ALTDOWN Alt Esc pkh vkCode VK ESCAPE pkh flags LLKHF ALTDOWN pkh vkCode VK LWIN pkh vkCode VK RWIN 开始菜单if g bBeep wp WM SYSKEYDOWN wp WM KEYDOWN MessageBeep 0 蜂鸣return1 不再往CallNextHookEx传递 直接返回 returnCallNextHookEx g hHookKbdLL nCode wp lp 是否屏蔽任务键序列 也就是说键盘钩子是否安装 注 这 里假设没有其它钩子做同样的事情 DLLEXPORTBOOLAreTaskKeysDisabled returng hH ookKbdLL NULL 屏蔽任务键 安装低级键盘构 返回当前是否屏蔽标志 TRUE FALSE DLLEXPORTBOOLDisableTas kKeys BOOLbDisable BOOLbBeep if bDisable if g hHookKbdLL g hHookKbdLL SetWindowsHookEx WH KEYBOARD LL MyTaskKeyHookLL MyDll m hInstance 0 elseif g hHookKbdLL NULL UnhookWindowsHookEx g hHookKbdLL g hHookKbdLL NULL g bBeep bBeep returnAreTaskKeys Disabled TaskKeyHook输出两个函数 DisableTaskKeys和AreTaskKeysDisabled 前者安装WH KEYBOARD LL钩子 后者判断这个钩子是否安装 此键盘钩子的处理思路是截获Alt Tab Ctrl Esc Alt Es c以及Windows键VK LWIN VK RWIN 关于这两个键 稍候会有详细描述 当钩子碰到这些键时 它直接返回到调用者 而不是将处理传 递给CallNextHookEx LRESULTCALLBACKMyTaskKeyHookLL if 任务键 return1 立即返回returnCallNextHookEx TaskKeyHook的大部分实现都很简单 只有一个地方用到了一点小技巧 既使用 pragmadata seg命名包含全程数据的数据段 并且用 pragmacomment linker 告诉链接器让这个数据段为共享段 实现细节请参考源代码 本文附带的例子程序 TrapKeys exe 汇集了上述几个有关屏蔽键盘按键序 列的功能 除此之外 它还有一个功能就是禁用任务栏 因为既然禁用了任务转换键 那么一般来说 也必然要禁用任务栏 否则禁用任务转换键就没有意义了 禁用任务栏的具体方法如下 HWNDhwnd FindWindow Shell traywnd NULL 找到任务栏Ena bleWindow hwnd FALSE 禁用任务栏如图四是例子程序运行画面 图四TrapKeys程序运行画面以下是Tra pKeys程序的实现代码 Tr apKeys cpp include stdafx h include resource h include Sta tlink h include TaskKeyMgr h 主对话框 cl assCMyDialog publicCDialog public CMyDialog CWnd pParent NULL CDi alog IDD MYDIALOG pParent protected HICONm hIcon CStaticlinkm wndlink1 CStaticlinkm wndlink2 CStaticlinkm wndlink3 virtualBOOL onInitDialog 命令 UI的更新处理afx msgvoidonDisableTaskMgr afx msg voidonDisableTaskKeys afx msgvoidonDisableTaskbar afx msgvoido nUpdateDisableTaskMgr CCmdUI pCmdUI afx msgvoidonUpdateDisableTaskK eys CCmdUI pCmdUI afx msgvoidonUpdateDisableTaskbar CCmdUI pCmdUI afx msgLRESULTonKickIdle WPARAM LPARAM DECLARE MESSAGE MAP 标准的MFC对话框应 用类代码 classCMyApp publicCWinApp public virtualBOOLInitInstanc e 初始化app 运行对话框CMyDialogdlg m pMainWnd returnFALSE virtualintExitInstance 为了按全起见 在退出程序的时候 将所有禁用的项 目复原CTaskKeyMgr Disable CTaskKeyMgr ALL FALSE return0 theA pp BEGIN MESSAGE MAP CMyDialog CDialog ON COMMAND IDC DISABLE TASK KEYS OnDisableTaskKeys ON COMMAND IDC DISABLE TASKBAR OnDisableTaskb ar ON COMMAND IDC DISABLE TASKMGR OnDisableTaskMgr ON UPDATE COMMA ND UI IDC DISABLE TASKKEYS OnUpdateDisableTaskKeys ON UPDATE COMMAND UI IDC DISABLE TASKBAR OnUpdateDisableTaskbar ON UPDATE COMMAND UI IDC DISABLE TASKMGR OnUpdateDisableTaskMgr ON MESSAGE WM KICKIDLE On KickIdle END MESSAGE MAP 初始化对话框 子类化超链接柄加栽图标 BOOLCMyDialog onInitDialog C Dialog onInitDialog 初始化超链接m wndlink1 SubclassDlgItem IDC EMAI L this m wndlink2 SubclassDlgItem IDC VCKbaseURL this m wndlink3 SubclassDlgItem IDC VCKbaselink this 自己设置对话框图标 MFC不会为对话框应用程序设置它 m hIcon AfxGetApp LoadIcon IDR MAINframe SetIcon m hIcon TRUE 打图标SetIcon m hIcon FALSE 小图标returnTRUE 命令 UI更新处理 写这些东西应该很轻松 void CMyDialog onDisableTaskKeys CTaskKeyMgr Disable CTaskKeyMgr T ASKKEYS CTaskKeyMgr AreTaskKeysDisabled TRUE 蜂鸣 voidCMyDi alog onUpdateDisableTaskKeys CCmdUI pCmdUI pCmdUI SetCheck CTas kKeyMgr AreTaskKeysDisabled voidCMyDialog onDisableTaskbar CTaskKeyMgr Disable CTaskKeyMgr TASKBAR CTaskKeyMgr IsTaskB arDisabled voidCMyDialog onUpdateDisableTaskbar CCmdUI pCmdUI pCmdUI SetCheck CTaskKeyMgr IsTaskBarDisabled voidCMyD ialog onDisableTaskMgr CTaskKeyMgr Disable CTaskKeyMgr TASKMG R CTaskKeyMgr IsTaskMgrDisabled voidCMyDialog onUpdateDis ableTaskMgr CCmdUI pCmdUI pCmdUI SetCheck CTaskKeyMgr IsTaskMgr Disabled 要想让ON UPDATE COMMAND UI正常工作 这是必需的 LRESULTCMyDialog onKic kIdle WPARAMwp LPARAMlCount UpdateDialogControls this TRUE ret urn0 按上述方法尽管禁用了任务栏 但是还有一个机关没有处理 那就是按下Windows键仍然可以弹出 开始 菜单 显然在处理VK LWIN之前 任务栏不会检查是否被启用 一般来讲 如果某个窗口被屏蔽掉 那么它就不再会处理用户在这个窗口的输入 这就是所谓的禁用 Dis able 的含义 通常调用EnableWindow FALSE 后自然就达到了这个目的 但是处理VK LWIN VK RWIN按键的代码决不 会去检查任务栏启用 禁用状态 对此 本文的处理办法仍然是利用键盘钩子 修改一下TaskKeyHook实现 增加对Windows键的捕获 这样 按下 开始 菜单键之后什么也不会发生 希望没有漏掉其它的按键 如果哪位读者发现漏掉了什么键 请和我联系 以便把它加到键盘钩子中去 为了简单起 见 我在类CTaskKeyMgr中封装了所有禁用的函数 下面是这个类的定义击实现文件 TaskKeyMgr TaskKeyMgr h pragmaonce include TaskKeyHook h 使用这个类禁用任务键 任务管理器或任务栏 用相应的标志调用Disable 如 CTaskMg rKeys Disable CTaskMgrKeys ALL classCTaskKeyMgr public en um TASKMGR 001 禁用任务管理器 Ctrl Alt Del TASKKEYS 002 禁用任务转换键 Alt T AB etc TASKBAR 004 禁用任务栏ALL 0FFFF 禁用所有东西L staticvoidDisabl e DWORDdwItem BOOLbDisable BOOLbBeep FALSE staticBOOLIsTaskMgrDisab led staticBOOLIsTaskBarDisabled staticBOOLAreTaskKeysDisabled return AreTaskKeysDisabled 调用DLL CPP实现 TaskKeyMgr cpp include StdAfx h include TaskKeyMgr h defineHKCUHKEY CURRE NT USER 用于禁用任务管理器策略的注册表键值对LPCTSTRKEY DisableTaskMgr SoftwareMi crosoftWindowsCurrentVersionPoliciesSystem LPCTSTRVAL DisableTaskMg r Disabl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年市场营销人员招聘面试实战指南及预测题
- 2025年财务分析师求职面试指南模拟题及参考答案详解
- 2025年特岗教师招聘音乐科目模拟题
- 2025年中学历史教师资格认证考试模拟题及答案
- 电力人员消防知识培训课件
- 2025年环境工程师招聘笔试模拟题及复习策略
- 2025年小学全科特岗教师面试模拟题集
- 2025年网络安全工程师招聘考试题库与解析
- 1到10的教学课件
- 2025年物资储备仓库运输作业流程与调度员招聘考试要点
- (完整word版)身份证号码前6位表示的地区对照表
- 高中生物的学习方法
- GE彩超Logiq操作手册培训课件
- 光传输系统配置与维护全套完整教学课件
- 罐头食品工艺
- 混凝土外加剂检测原始记录表
- GB/T 15670-1995农药登记毒理学试验方法
- 《矛盾论》、《实践论》导读
- 工程罚款通知单模版
- 2耐压试验报告
- Q∕GDW 12106.3-2021 物联管理平台技术和功能规范 第3部分:应用商店技术要求
评论
0/150
提交评论