最近有需求 在使用本軟體的時候 防止一些操作,需要屏蔽系統的快捷鍵,于是簡單整理了下實作方式
一、 hook技術的使用
hook技術:Hook 技術又叫做鉤子函式,在系統沒有呼叫該函式之前,鉤子程式就先捕獲該訊息,鉤子函式先得到控制權,這時鉤子函式既可以加工處理(改變)該函式的執行行為,
還可以強制結束訊息的傳遞,簡單來說,就是把系統的程式拉出來變成我們自己執行代碼片段,
??要實作鉤子函式,有兩個步驟:
??1. 利用系統內部提供的介面,通過實作該介面,然后注入進系統(特定場景下使用)
??2.動態代理(使用所有場景)
通過使用Hook技術可以加載低級鍵盤鉤子來截獲大部分的系統熱鍵,并屏蔽它,這個方法比較簡單,但有個缺陷,那就是對Ctrl+Alt+Del,Win+L沒用,
原因:Winlogon初始化的時候,在系統中注冊了Ctrl+Alt+Del Secure Attention Sequence(SAS)熱鍵,并且在WinSta0 Windows 系統中創建三個桌面,SAS熱鍵的注冊使得Winlogon成為第一個處理CTRL+ALT+DEL的行程,所以保證了沒有其他應用程式能夠處理這個熱鍵,
簡單來說,就是這個熱鍵的級別太高,不會經過我們的鉤子鏈,所以接下我們的討論重點在于如何屏蔽Ctrl+Alt+Del,Win+L,主要是以下方式(兩種方式都需要管理員權限):
1、修改注冊表
缺點:界面還是存在,只是關閉了打開任務管理器,切換用戶等選項;
優點:可以定制我們的鎖定界面,一次修改即可,除非恢復注冊表,不然一直生效;
2、直接掛起winlogon.exe
缺點:只能通過重新恢復winlogon.exe來恢復熱鍵,在重啟機器之后還需要再次運行掛起程式;
優點:可以屏蔽所有快捷鍵,并且不會有鎖定界面
二、修改注冊表內容
首先思考我們屏蔽ctrl+alt+del的目的:為了不讓用戶可以殺死我們的行程,從而直接得到軟體內部資料,
所以我們通過修改注冊表也可以達到屏蔽Ctrl+Alt+DelL的效果,
具體我們要修改的項如下:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableLockWorkstation"=dword:00000001
"DisableTaskMgr"=dword:00000001
"DisableChangePassword"=dword:00000001
"NoConfigPage"=dword:00000000
"NoDevMgrPage"=dword:00000000
"DisableSwitchUserOption"=dword:00000001
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoLogoff"=dword:00000001
效果:
這是修改之前的:

這是修改之后的:

正常情況下,policies子鍵都存在,如果失敗,有兩種可能:
1,沒用使用管理員權限運行程式
2,沒有這個子鍵,需要自行創建Policies,
三、掛起winlogon.exe行程
首先我們需要知道為什么要掛起winlogon以及為什么掛起winlogon可以達到我們要的屏蔽效果:
1,Winlogon 是負責處理安全相關的用戶互動界面的組件,Winlogon的作業包括加載其他用戶身份安全組件、提供圖形化的登錄界面,以及創建用戶會話,
Winlogon在啟動時還注冊一個系統級別的安全注意序列(默認為Ctrl+Alt+Del)熱鍵,以在在用戶鍵入這個序列的時候切換到安全桌面顯示系統安全界面,
2,所以當我們掛起winlogon時,系統就無法監聽ctrl+alt+del,這樣,就可以達到屏蔽的效果
由于winlogon時系統安全級別的行程,要掛起他不僅需要我們取得管理員權限,還要將我們的行程升級到debug級別,
在將我們的行程提升到debug級別之后,我們需要做的事就是根據winlogon.exe這個行程名找到對應的行程PID也即是行程句柄,然后利用這個句柄去掛起winlogon.exe和恢復winlogon.exe,
4.方案總結
關于屏蔽window7以及window10熱鍵的方案,我們主要以hook為主,去選擇性的屏蔽普通熱鍵,再加上修改注冊表或者掛起winlogon的方式去屏蔽系統級別的熱鍵,從而達到保證用戶權限對應軟體操作的限制,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/119836.html
標籤:C#
上一篇:如何給另一軟體的輸入框賦值 ?獲取輸入框相對表單的坐標
下一篇:C#型別與變數
