XP系统中屏蔽ESC键序列的方法
2023-12-03 09:28:38
点评:如何在Windows XP CTRL+ALT+DEL组合键屏蔽,即任务管理器,任务切换组合键(Alt + Tab),任务栏和开始菜单Ctrl + Esc,vk_lwin,vk_rwin。 对于那些已经用过,几乎没有人不知道CTRL+ALT+DEL组合键,尤其是当使用频繁崩溃Windows9x、使用更高的频率。这个组合键是专门为系统safety.vc知识库的缘故是在线杂志第十一期。ac952_z_cn在他的个人专栏写一篇关于它的文章:如何屏蔽Ctrl + Alt + del ldquo和Windows NT下/ 2000.therefore,本文重点研究了如何屏蔽Ctrl+Alt+Del组合键在Windows XP中,即任务管理器,任务切换键(Alt + Tab),任务栏和开始菜单(按Ctrl + Esc,vk_lwin,vk_rwin)。这种方法也可以应用到Windows 2000环境下。 在Windows 9x /我的系统,屏蔽Ctrl+Alt+Del和各种任务的关键方法是通过以下方法实现: 布尔boldstate; SystemParametersInfo(spi_setscreensaverrunning,真的,boldstate,0); MS的人认为这种方法是业余的,所以它被修改在Windows NT / 2000 / xp.in这些较新版本的Windows用户使用winlogon和ginamdash;mdash图形;识别和认证,认证的图形的意义,很可怕的是不是真的。程序是Windows系统的一部分。它的交互式登录提供了支持,而吉娜是一个程序实施认证dllmdash;mdash;DLL msgina.dll.wlxinitialize,wlxactivateusershell当然是输出,,我不知道,等。前者完成自身的初始化,和后者激活用户的壳。Windows使用这个DLL的authenatate用户名+密码,但开发者可以在自己的吉娜替换msgina.dll。例如,认证机制,如智能卡、视网膜扫描仪,DNA检查,等等来代替输入的用户名+密码识别。下表列出了所有的功能,都与吉娜其中之一。是wlxloggedonsas,当按Ctrl + Alt + Del键是P表示,程序调用的函数。 (表1)吉娜函数列表函数的描述 wlxactivateusershell激活用户外壳 wlxdisplaylockednotice允许吉娜DLL显示锁定信息 wlxdisplaysasnotice当没有用户登陆时调用该函数,Winlogon wlxdisplaystatusmessagewinlogon调用此函数与状态信息显示 wlxgetconsoleswitchcredentials Winlogon调用此函数读取当前登录用户的信任信息透明地传送给目标会议 WlxGetStatusMessage Winlogon调用这个函数来获取当前状态信息 吉娜wlxinitialize初始化DLL指定窗口的位置 正常的wlxislockok验证工作站锁定 wlxislogoffok验证是正常的 的wlxloggedonsas用户已经登陆和工作站没有锁定,如果SAS事件是在这个时候收到,程序调用这个函数 wlxloggedoutsas不订阅用户,如果SAS事件是在这个时候收到,程序调用这个函数 wlxlogoff通知吉娜DLL时,请求注销操作 wlxnegotiate指示当前程序版本可以使用吉娜DLL wlxnetworkproviderload调用这个函数加载网络服务提供商收集身份认证信息后。 WlxRemoveStatusMessage Winlogon调用这个函数来告诉吉娜DLL停止显示状态信息 wlxscreensavernotify允许吉娜屏幕保护操作互动 Winlogon中调用这个函数之前,wlxshutdown关闭,让吉娜实施任何封闭的任务,如退出智能卡从读卡器 wlxstartapplication调用这个函数,当系统需要在用户的上下文中的应用 wlxwkstalockedsas当工作站被锁定,如果收到一个SAS,Winlogon调用这个函数 默认情况下,吉娜显示登录对话框,用户输入用户名和密码。所以如果我们想阻止Ctrl+Alt+Del,我们可以写一个新的mygina.dll,它提供的接口调用的函数wlxloggedonsas msgina.dll,从而达到按Ctrl + Alt + Del或写屏蔽。一个键盘驱动程序的实现。 这是真的,屏蔽Ctrl+Alt+Del是真的如上面提到的麻烦,有没有更好的办法来确定答案。所以忘了吉娜,开始使用操作系统完全可以解决这一问题的策略,方法是进入开始菜单中,选择跑在左窗格中查看用户配置管理模板系统| | |登录/登出,在右窗格中的策略是不难找到禁用任务管理器A. 组策略编辑器 通过设置此策略可以屏蔽Ctrl + Alt。如果要编写代码来完成此操作,则必须操作以下注册表键: HKCU 软件 微软 Windows currentversion 政策 系统 disabletaskmgr = DWORD值:1 设置完后,在Windows XP中,如果用户按Ctrl + Alt,它会弹出一个错误对话框, 注意这里假设是在控制面板的用户帐户,管理,选择登录和注销选项,设置使用欢迎屏幕,一个项目。 否则,XP将使用Windows的传统登录模式,并要求用户输入帐户名,而与传统行为相同的是。在注册表中的设置,只是disabletaskmgr屏蔽或固定的任务管理器按钮登录/注销对话框。可能有人会问,关于任务管理器的文件不清晰。你怎么知道disabletaskmgr用于禁用任务管理器让我告诉你,我发现当我用gpedit.gpedit是一个非常有用的工具,不仅可以用来编辑政策,但要用它来寻找策略。使用这个工具,你可以很容易地控制Windows的很多东西,从访问权限是否使用IE传统的外观,从是否在对话框或是否启动任务管理器Ctrl + Alt + del.in字显示的地方吧,它可以配置界面行为数百,所以它是一个工具,可以让系统管理员下降三英尺。一旦你找到了一个战略兴趣,有两种方法,知道了如何了解注册表的相应位置。首先是一个更粗鲁的方式:之前和之后策略被修改,注册表被导出到一个注册表文件,然后它们之间的区别是什么所有的策略都不超过四个注册表项: 指定用户 hkey_current_user 软件政策 hkey_current_user 软件微软 Windows currentversion 政策 指定的机器 hkey_local_machine 软件政策 hkey_local_machine 软件微软 Windows currentversion 政策 第二种方法是破坏信息的来源检查战略管理模板文件的描述(Adm)。以下是disabletaskmgr描述从system.adm文件Windows XP。(Windows 2000,描述略有不同。详情请参阅Windows 2000的资源开发工具包。 类别!cadoptions! #如果版> = 4 解释!cadoptions_help! # endif 控制台软件微软 Windows currentversion 政策系统 政策!disabletaskmgr! #如果版> = 4 支持!supported_win2k! # endif 解释!disabletaskmgr_help! 键名disabletaskmgr 最终的政策 ; 更多的Ctrl + Alt + del在这里的政策… ; 结束类;Ctrl + + + del选项 hellip;hellip; hellip;hellip; disabletaskmgr_help = 防止用户启动任务管理器(任务管理器.exe)中。如果设置启用,用户尝试启动任务管理器,系统 将显示该消息,并说明策略禁止操作。任务管理器允许用户启动或终止程序,监视计算机性能,查看和监视计算机上的所有运行。 程序中的程序(包括系统服务)、搜索程序的执行文件名以及更改程序运行的优先级。 disabletaskmgr =删除任务管理器 以上是disabletaskmgr描述 它是描述中指定的注册表键名键名和键值对。用这种方法,你可以创建你的应用程序管理模板和政策,但编辑在编辑和浏览。ADM模板文件必须支持Unicode字符。如记事本或写字板等。此外,使用管理模板文件,系统管理员可以使用它来配置策略研究,为整个组织mdash;由此,我们可以看到,这个文件在系统中起着重要的作用。请参考平台SDK的模板管理文件格式的细节。强调最后一点是,disabletaskmgr只是禁用Ctrl+Alt+Del功能。让我们讨论如何捕捉关键序列。为了拦截Ctrl + Alt + Del键,有三种可供选择的方法: 1,写一个吉娜剂;介绍了这种方法,在以后的文章。事实上,ac952_z_cn的个人专栏:如何屏蔽Ctrl + Alt + del在Windows NT或2000;这是该方法的使用。 2。编写键盘驱动程序;示例程序所使用的方法。 3、不是任务管理器程序,以上使用你自己的程序。 请参考本文的示例代码,通过屏蔽实现的具体细节。 让我们解决屏蔽任务切换密钥序列的问题。这些关键序列包括ALT + TAB键、Ctrl + Esc键、Alt + Esc,vk_lwin / vk_rwin和任务栏窗口。早在3.1年,解决这个问题是通过wm_syskeydown.in Windows 9x时期达到的方式,本文对该问题的处理,在使用Windows NT 4时代spi_setscreensaverrunning.but(3 +),Windows 2000和Windows XP中,有不同的方式来处理这个问题。我们必须写一个低级键盘驱动挂钩。别害怕,因为它不是实现这个钩子很难。这篇文章将告诉你如何实现这个键盘钩子。一般来说,系统级钩必须DLL。以下是源代码片段(taskkeyhook .dll)一个这篇文章提供了键盘钩子:DLL: 头文件 对 / / taskkeyhook。H #定义dllimport __declspec(dllimport) disabletaskkeys DllImport布尔(bool benable,布尔bbeep); aretaskkeysdisabled DllImport bool(); 实现文件 对 / / taskkeyhook.cpp #定义_win32_winnt 0x0500 / /该 #包括核心和标准件 / / MFC #定义为dllexport __declspec(dllexport) 中 应用程序(DLL)对象 类:公共ctaskkeyhookdll CWinApp { 公共: CTaskKeyHookDll(){ } ~ CTaskKeyHookDll(){ } } MyDll; 与之相关的是: 下面的代码这个DLL的这个部分是在所有实例中共享的 必须是低电平键盘钩子挂钩系统。 #语用data_seg(。该) hhook g_hhookkbdll = null; / /钩柄 布尔g_bbeep = false; / /按钮哔哔违法 #语用data_seg() #语用评论(连接器/部分。MYDATA,RWS) / /告诉链接器:建立共享数据段 中 低级键盘钩子 关键:任务切换拦截/传输直接返回 LRESULT CALLBACK MyTaskKeyHookLL(int nCode,wParam WP,lParam LP) { 该* PKH =(该*)LP; 如果(code = = hc_action){ 布尔bctrlkeydown = GetAsyncKeyState(vk_control)>(sizeof(短)* 8)- 1); 如果(PKH -> vkcode = = vk_escape(bctrlkeydown)| | / / Ctrl + Esc 制表符 (PKH -> vkcode = = vk_tab PKH >旗llkhf_altdown)| | (PKH -> vkcode = = vk_escape PKH >旗llkhf_altdown)| | (PKH -> vkcode = = vk_lwin PKH -> vkcode = = vk_rwin){ / / | |)开始菜单 如果(g_bbeep(WP = = wm_syskeydown | | WP = = wm_keydown)) MessageBeep(0); / /蜂鸣器 返回1; / / CallNextHookEx方法不转让,直接回 } } 返回CallNextHookEx(g_hhookkbdll,nCode,WP,LP); } 与之相关的是: 是否关键序列 / /屏蔽-任务;mdash;也就是说安装键盘钩子 注意:假设没有其他的钩子来做同样的事情。 aretaskkeysdisabled dllexport bool() { 返回g_hhookkbdll!= null; } 与之相关的是: 主要任务:安装/屏蔽低级键盘。 返回当前是否屏蔽标志(true false) / / disabletaskkeys dllexport bool(bool bdisable,布尔bbeep) { 如果(bdisable){ 如果(!g_hhookkbdll){ g_hhookkbdll = SetWindowsHookEx(wh_keyboard_ll, mytaskkeyhookll,mydll.m_hinstance,0); } } else if(g_hhookkbdll!= NULL){ UnhookWindowsHookEx(g_hhookkbdll); g_hhookkbdll = null; } g_bbeep = bbeep; 返回aretaskkeysdisabled(); } taskkeyhook输出两个功能:disabletaskkeys和aretaskkeysdisabled。前者安装wh_keyboard_ll钩;后者决定是否安装了钩。对付这种键盘钩子的方式拦截ALT + TAB键,按Ctrl + Alt + Esc,ESC和Windows键vk_lwin / vk_rwin。这两个键将稍后介绍。当钩触动这些键,它直接返回给调用者,而不是经过加工的方法CallNextHookEx。 LRESULT CALLBACK MyTaskKeyHookLL(…) { 如果(* *键任务) 返回1;立即返回 返回CallNextHookEx(…); } 大多数的taskkeyhook的实现是简单的。只有一个地方用了一个小窍门:用#语用data_seg名称包含整个数据的数据段,并使用#语用评论(链接…)告诉链接器使数据段的共享段。请参考源代码为细节。示例程序(trapkeys .exe),本文汇集了关于屏蔽键盘按键的功能。除此之外,它还有另一个禁用任务栏的功能。由于禁用了任务转换键,所以任务栏也必须是禁用的,否则禁用任务转换键是没有意义的: HWND hWnd = FindWindow(shell_traywnd,null); / /查找任务栏 EnableWindow(HWND,false); / /禁用任务栏 图四是运行屏幕的示例程序: 图四trapkeys程序运行画面 以下是该trapkeys程序实现代码: 与之相关的是: / / trapkeys.cpp / / #包括stdafx.h。H #包括资源的。 #包括statlink。H #包括taskkeymgr。H 中 主对话框 cmydialog:公共类CDialog { 公共: cmydialog(CWnd *本= null):CDialog(idd_mydialog,本){ } 受保护的: 该m_hicon; cstaticlink m_wndlink1; cstaticlink m_wndlink2; cstaticlink m_wndlink3; virtual BOOL OnInitDialog(); 用户界面命令更新处理 afx_msg无效ondisabletaskmgr(); afx_msg无效ondisabletaskkeys(); afx_msg无效ondisabletaskbar(); afx_msg无效onupdatedisabletaskmgr(CCmdUI * pcmdui); afx_msg无效onupdatedisabletaskkeys(CCmdUI * pcmdui); afx_msg无效onupdatedisabletaskbar(CCmdUI * pcmdui); afx_msg一些onkickidle(wParam,LPARAM); declare_message_map() }; 对 MFC对话框应用程序代码标准。 类:公共cmyapp CWinApp { 公共: Virtual BOOL InitInstance(){ 应用程序:初始化运行对话框 cmydialog DLG; m_pmainwnd = DLG; Dlg.DoModal(); 返回false; } Virtual int ExitInstance(){ 为了根据整个方面,什么时候退出程序,所有的残疾人恢复项目 CTaskKeyMgr::禁用(ctaskkeymgr::所有的假); 返回0; } }程序; begin_message_map(cmydialog,CDialog) on_command(idc_disable_taskkeys,OnDisableTaskKeys) on_command(idc_disable_taskbar,OnDisableTaskbar) on_command(idc_disable_taskmgr,OnDisableTaskMgr) on_update_command_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,OnKickIdle) end_message_map() 与之相关的是: 初始化对话框子类:超链接句柄加载图标 布尔cmydialog::OnInitDialog() { CDialog::OnInitDialog(); 初始化超链接 m_wndlink1.subclassdlgitem(idc_email,这个); m_wndlink2.subclassdlgitem(idc_vckbaseurl,这个); m_wndlink3.subclassdlgitem(idc_vckbaselink,这个); / /自己设置对话框icon.mfc不设置对话框的应用 m_hicon = afxgetapp()-> LoadIcon(idr_mainframe); 操作SetIcon(m_hicon,true); / /电话图标 操作SetIcon(m_hicon,false); / /小图标 返回true; } 对 命令:更新处理应该很容易编写这些东西。 无效cmydialog::OnDisableTaskKeys() { CTaskKeyMgr::::taskkeys禁用(ctaskkeymgr, !CTaskKeyMgr::aretaskkeysdisabled(),true); / /蜂鸣器 } 无效::OnUpdateDisableTaskKeys(cmydialog CCmdUI * pcmdui) { pcmdui -> setcheck(ctaskkeymgr aretaskkeysdisabled(::)); } 无效cmydialog::OnDisableTaskbar() { CTaskKeyMgr::::(ctaskkeymgr禁用任务栏, CTaskKeyMgr::istaskbardisabled()); } 无效::OnUpdateDisableTaskbar(cmydialog CCmdUI * pcmdui) { pcmdui -> setcheck(ctaskkeymgr istaskbardisabled(::)); } 无效cmydialog::OnDisableTaskMgr() { CTaskKeyMgr::::(ctaskkeymgr禁用任务管理器, CTaskKeyMgr::istaskmgrdisabled()); } 无效::OnUpdateDisableTaskMgr(cmydialog CCmdUI * pcmdui) { pcmdui -> setcheck(ctaskkeymgr istaskmgrdisabled(::)); } 对 / /为了on_update_command_ui正常工作,这是必要的。 / / 一些cmydialog::OnKickIdle(wParam WP,lParam lCount) { UpdateDialogControls(这是真的); 返回0; } 根据上面的方法,虽然禁用的任务栏已禁用,但仍然有一个尚未处理的器官。这是按Windows键还玩开始菜单,并很清楚,任务栏不检查它是否是直到vk_lwin处理功能。一般来说,如果一个窗口被屏蔽,它将不再办理本窗口——用户输入;mdash,即禁用。这个目标达到之后自然是叫EnableWindow(假),但代码处理vk_lwin / vk_rwin关键不会检查任务栏启用/禁用状态。在这方面,本文的方法仍然是使用键盘钩子。修改taskkeyhook实现增加Windows键捕获。因此按开始菜单键后会发生什么,我希望你不要错过其他按钮。如果任何读者发现钥匙不见了,请让它可以添加到键盘钩子联系我。为了简单起见,我将所有的残疾功能的类ctaskkeymgr。以下是这类攻击的实现文件的定义: taskkeymgr 中的 / / taskkeymgr。H #编译一次 #包括taskkeyhook。H 中有: 使用这种键/禁用任务、任务管理器或任务栏。 与相应的标志 / /电话:ctaskmgrkeys:禁用:禁用(ctaskmgrkeys::所有); 类ctaskkeymgr { 公共: enum { taskmgr = 0x01 /禁用任务管理器(按Ctrl + Alt + Del) taskkeys = 0x02 /禁用任务转换键(alt标签,等等) 任务栏= 0x04 /禁用任务栏 所有0xffff / / =禁用所有的事情我 }; static void禁用(DWORD dwitem,布尔bdisable,布尔bbeep = false); 静态布尔istaskmgrdisabled(); 静态布尔istaskbardisabled(); 静态布尔aretaskkeysdisabled(){ 返回::aretaskkeysdisabled(DLL); / /电话 } }; cpp实现 对 / / taskkeymgr.cpp / / #包括stdafx.h。H #包括taskkeymgr。H # HKCU hkey_current_user定义 禁用设备注册表项/任务管理策略 LPCTSTR key_disabletaskmgr = 软件 微软 Windows currentversion 政策 系统; LPCTSTR val_disabletaskmgr =disabletaskmgr ; 中的 键/禁用任务 / / / / dwFlags =禁用什么 / / bdisable =禁用(真的),或使(假) / / bbeep =按违法关键是嗡嗡(关键任务) 无效ctaskkeymgr::禁用(DWORD dwFlags,布尔bdisable,布尔bbeep) { 任务管理器(Ctrl + Alt + del) 如果(dwFlags taskmgr){ HKEY香港; 如果(HKCU,key_disabletaskmgr(RegOpenKey,HK)!= error_success) RegCreateKey(HKCU,key_disabletaskmgr,HK); 如果(bdisable){ / /禁用任务管理器(禁用TM):制定政策= 1 DWORD值= 1; RegSetValueEx(香港,val_disabletaskmgr,空, REG_DWORD, (BYTE*) Val, sizeof (VAL)); }其他启用的任务管理器(启用TM) regdeletevalue(HK,val_disabletaskmgr); } } 关键任务(alt选项卡等) 如果(Windows也taskkeys) ::DisableTaskKeys(bdisable,bbeep); / /安装键盘钩子 任务栏 如果(dwFlags任务栏){ HWND hWnd = FindWindow(shell_traywnd EnableWindow(hWnd,!bdisable); } } 布尔ctaskkeymgr::istaskbardisabled() { HWND hWnd = FindWindow(shell_traywnd 返回IsWindow(hWnd)!iswindowenabled(hWnd):真的; } 布尔ctaskkeymgr::istaskmgrdisabled() { HKEY香港; 如果(HKCU,key_disabletaskmgr(RegOpenKey,HK)!= error_success) 返回false DWORD值= 0; DWORD len = 4; 返回RegQueryValueEx(香港,val_disabletaskmgr, 零,零,(字节*)Val,Len)= = error_success val = = 1; } 这个类中的函数都是静态的,而事实上ctaskkeymgr完全是一个命名空间,你可以使用它作为您想在自己的程序。例如,禁用任务转换键和任务栏,但不禁用Ctrl+Alt+Del: CTaskKeyMgr::::taskkeys |禁用(ctaskkeymgr CTaskKeyMgr::任务栏,真的); 此外,有几个功能,用于检查当前被禁用,甚至声响时,用户按下禁用键,hellip;hellip;保罗自己享受的源代码。tag:屏蔽 方法 系统 序列 电脑软件
相关内容