對於用過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調用此函數 |
WlxDisplayStatusMessage |
Winlogon 用一個狀態資訊調用此函數進行顯示 |
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 調用此函數 |