萬盛學電腦網

 萬盛學電腦網 >> Windows xp教程 >> XP系統中如何屏蔽Ctrl+Esc鍵序列

XP系統中如何屏蔽Ctrl+Esc鍵序列

 

  對於用過Windows的人,幾乎沒有人不知道Ctrl+Alt+Del組合鍵,尤其是在使用經常死機的Windows9x時,使用它的頻率更高,這一組合鍵是專門為了系統安全起見提供的緊急出口。VC知識庫在線雜志第11期,ac952_z_cn在他的個人專欄中寫過一篇關於這方面的文章:“WINDOWS NT/2000下如何屏蔽CTRL+ALT+DEL”。因此本文側重於介紹在Windows XP中如何實現屏蔽CTRL+ALT+DEL組合鍵,也就是任務管理器,任務切換組合鍵(Alt+Tab),任務欄和“開始”菜單(Ctrl+Esc,VK_LWIN,VK_RWIN)。這個方法也能應用於Windows 2000環境。

  在Windows 9x/Me系統中,屏蔽Ctrl+Alt+Del和各種任務開關鍵的方法是通過下面的方法實現的:

  BOOL bOldState;

  SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, TRUE, &bOldState, 0);

  MS大佬認為這種方法很業余,所以在Windows NT/2000/XP中對此進行了修改。在這些較新的Windows版本中用戶登陸使用Winlogon和GINA——Graphical Identification and Authentication,意思是圖形化的身份認證,挺嚇唬人的是不是!其實就那麼回事。Winlogon是Windows系統的一部分,它專門提供交互式登陸支持,而GINA則是Winlogon用來實現認證的一個DLL——這個DLL就是msgina.dll。WlxInitialize、WlxActivateUserShell便是其中輸出,當然不知這兩個,還有別的。前者進行自身的初始化,後者激活用戶的外殼程序。Windows就是用這個DLL來實現用戶名+口令的身份認證的,但是開發人員可以用自己的GINA代替msgina.dll。例如,實現智能卡、視網膜掃描儀、DNA檢查等等認證機制來代替輸入用戶名+口令形式的身份檢查。 下面的表格中列出了與GINA有關的全部函數。其中有一個是WlxLoggedOnSAS,當按下Ctrl+Alt+Del 鍵時,Winlogon便調用這個函數。

  (表一)GINA 函數一覽表 函數 描述

  WlxActivateUserShell激活用戶外殼程序

  WlxDisplayLockedNotice允許GINA DLL 顯示鎖定信息

  WlxDisplaySASNotice 當沒有用戶登陸時,Winlogon調用此函數

  WlxDisplayStatusMessageWinlogon 用一個狀態信息調用此函數進行顯示

  WlxGetConsoleSwitchCredentials Winlogon調用此函數讀取當前登陸用戶的信任信息,並透明地將它們傳到目標會話

  WlxGetStatusMessage Winlogon 調用此函數獲取當前狀態信息

  WlxInitialize 針對指定的窗口位置進行GINA DLL初始化

  WlxIsLockOk 驗證工作站正常鎖定

  WlxIslogoffOk 驗證注銷正常

  WlxLoggedOnSAS 用戶已登陸並且工作站沒有被加鎖,如果此時接收到SAS事件,則Winlogon 調用此函數

  WlxLoggedOutSAS 沒有用戶登陸,如果此時收到SAS事件,則Winlogon 調用此函數

  WlxLogoff 請求注銷操作時通知GINA DLL

  WlxNegotiate 表示當前的Winlogon版本是否能使用GINA DLL

  WlxNetworkProviderLoad 在加載網絡服務提供程序收集了身份和認證信息後,Winlogon 調用此函數

  WlxRemoveStatusMessage Winlogon 調用此函數告訴GINA DLL 停止顯示狀態信息

  WlxScreensaverNotify 允許GINA與屏幕保護操作交互

  WlxShutdown 在關閉之前Winlogon 調用此函數,允許GINA實現任何關閉任務,例如從讀卡器中退出智能卡

  WlxStartApplication 當系統需要在用戶的上下文中啟動應用程序時調用此函數

  WlxWkstaLockedSAS當工作站被鎖定,如果接收到一個SAS,則Winlogon 調用此函數

  在默認情況下,GINA顯示登陸對話框,用戶輸入用戶名及口令。所以要想屏蔽掉Ctrl+Alt+Del,則可以寫一個新的MyGina.dll,其中提供接口調用msgina.dll的函數WlxLoggedOnSAS,從而實現Ctrl+Alt+Del屏蔽。或者編寫一個鍵盤驅動程序來實現。

上一頁123456下一頁共6頁

  難道屏蔽Ctrl+Alt+Del真的象上述所說的那麼麻煩嗎?有沒有更好的方法呢?答案是肯定的。所以忘掉GINA吧,使用操作系統的策略設置完全可以搞掂這個問題。方法是進入"開始"菜單,選擇"運行",然後在運行對話框中輸入"gpedit.msc",啟動Windows系統的組策略編輯器。在左邊窗格查看"用戶配置|管理模板|系統|登錄/注銷",則在右邊窗格策略裡不難發現"禁用任務管理器"一項。

   組策略編輯器

  通過對這個策略的設置可以屏蔽掉Ctrl+Alt+Del。如果要通過編寫代碼來實現,則必須操作下面的注冊表項:

  HKCU\

  Software\

  Microsoft\

  Windows\

  CurrentVersion\

  Policies\

  System\DisableTaskMgr = dword:1

  如此設置之後,則在Windows XP中,如果用戶按下Ctrl+Alt+Del,則會彈出一個出錯對話框,

  注意這裡假設在控制面板中“用戶帳號”管理的“選擇登錄和注銷選項”設置啟用了“使用歡迎屏幕”一項。

  否則,XP將使用Windows的傳統登錄模式,要求用戶輸入帳戶名。並且Ctrl+Alt+Del組合鍵的 行為也和傳統的行為一樣,注冊表中DisableTaskMgr的設置也只是將登錄/注銷對話框中的任務管理器按鈕屏蔽或置灰。 有人可能會問,有關任務管理器的文檔又沒有明確說明,那你是怎麼知道DisableTaskMgr是用來禁用任務管理器的呢?告訴你吧, 我是在使用GPEDIT時發現的。GPEDIT是一個非常有用的工具,不僅可以用它來編輯策略,還可以用它來發現策略。利用這個工具可以輕松控制Windows的許多東西,從許可權限的存取到是否使用IE的傳統外觀,從是否顯示對話框中的Places Bar到是否用Ctrl+Alt+Del 啟動任務管理器。總之用它可以配置上百個界面行為,因此它是一個足以讓系統管理員垂延三尺的工具。一旦找到了感興趣的策略,那如何知道相應的注冊表位置呢?有兩種方法。第一種是比較粗魯的辦法:在修改策略的前後將注冊表輸出到一個.reg文件,然後比較它們有什麼不同。所有的策略無外乎以下的四個注冊表鍵:

  // 用戶指定

  HKEY_CURRENT_USER\Software\Policies

  HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies

  // 機器指定

  HKEY_LOCAL_MACHINE\Software\Policies

  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies

  第二種方法是直搗信息源頭--檢查描述策略的管理模板文件(.adm)。下面是Windows XP的system.adm文件對 DisableTaskMgr的描述:(Windows 2000對此的描述稍有不同,其細節請參考Windows 2000的資源開發包)

  CATEGORY !!CADOptions

  #if version >= 4

  EXPLAIN !!CADOptions_Help

  #endif

  KEYNAME "Software\Microsoft\Windows\CurrentVersion\Policies\System"

  POLICY !!DisableTaskMgr

  #if version >= 4

  SUPPORTED !!SUPPORTED_Win2k

  #endif

  EXPLAIN !!DisableTaskMgr_Help

  VALUENAME "DisableTaskMgr"

  END POLICY

  ;

  ; More Ctrl+Alt+Del policies here...

  ;

  END CATEGORY ; Ctrl+Alt+Del options

  ……

  ……

  DisableTaskMgr_Help="防止用戶啟動''任務管理器''(Taskmgr.exe)。\n\n如果該設置被啟用,並且用戶試圖啟動任務管理器,系統

  會顯示消息,解釋是一個策略禁止了這個操作。\n\n任務管理器讓用戶啟動或終止程序,監視計算機性能,查看及監視計算機上所有運行

  中的程序 (包含系統服務), 搜索程序的執行文件名,及更改程序運行的優先順序。"

  DisableTaskMgr="刪除任務管理器"

  以上是DisableTaskMgr的描述片斷

上一頁12 3456下一頁共6頁

  正是在這段描述中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以及任務欄。在很早以前的Window 3.1年代,處理這個問題的方法是通過WM_SYSKEYDOWN實現。到了Windows 9x時期,本文前面提到過對這個問題的處理方法,使

copyright © 萬盛學電腦網 all rights reserved