1. 程式人生 > >遮蔽CTRL+ALT+DEL熱鍵

遮蔽CTRL+ALT+DEL熱鍵

網友1:

在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顯示登陸對話方塊,使用者輸入使用者名稱及口令。所以要想遮蔽掉Ctrl+Alt+Del,則可以寫一個新的MyGina.dll,其中提供介面呼叫msgina.dll的函式WlxLoggedOnSAS,從而實現Ctrl+Alt+Del遮蔽。或者編寫一個鍵盤驅動程式來實現。

網友2:

Ctrl+Alt+Delete組合鍵是Winlogon程序的SAS。
1.Winlogon是使用RegisterHotKey函式註冊的。RegisterHotKey函式原型如下:BOOL RegisterHotKey(HWND hWnd,int id,UINT fsModifiers,UINT vk);
2.從函式的引數來看,使用這個函式註冊熱鍵的同時會指定一個視窗,在註冊了熱鍵以後,系統會向這個視窗傳送WM_HOTKEY訊息,從而在視窗的訊息處理函式中實現對熱鍵的響應。而這個視窗在Winlogon程序裡。我們使用dll注入到Winlogon程序裡,用EnumDesktopWindows列舉"SAS window"視窗。然後接管此視窗的訊息處理函式,使用SetWindowLong,這樣就可以過濾WM_HOTKEY訊息,使得Ctrl+Alt+Delete組合鍵無效。
3.注入方式採用“映象劫持”,把我們的dll路徑寫到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Notify。因為Winlogon.exe啟動後會載入這個路徑下的dll。當然我們需要實現Winlogon.exe呼叫的介面,這裡我們最關心的是實現Startup(系統開機事件)介面,在裡面加入過濾WM_HOTKEY訊息的邏輯就行了。

網友3:

將程式碼注入winlogon