在 Windows 9x 環境下,可使用 SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, NULL, 0) 屏蔽 Ctrl+Alt+Del,但在 NT/2000 環境下該方法失效,甚至連低層鍵盤 Hook(WH_KEYBOARD_LL)也無法攔截。本文透過替換 GINA DLL 技術,完美實現 NT/2000 下屏蔽 Ctrl+Alt+Del 功能。
在 NT/2000 中,互動式登入支援由 WinLogon 呼叫 GINA DLL 實現。GINA DLL 提供互動式介面,為使用者登入提供認證請求。WinLogon 初始化時向系統註冊攔截 Ctrl+Alt+Del 訊息,導致其他程式無法取得該訊息。
WinLogon 與 GINA DLL 互動,預設為 MSGINA.DLL(位於 System32 目錄)。微軟提供介面讓開發者自行編寫 GINA DLL 取代 MSGINA.DLL。
使用者登入後按下 Ctrl+Alt+Del,WinLogon 回呼 GINA DLL 的輸出函式 WlxLoggedOnSAS,此時處於 WinLogon 桌面。只需直接切換至應用程式桌面,系統就不會顯示「Windows 安全性」介面,等同於使用者按下 Ctrl+Alt+Del 後無任何反應。切換桌面時會出現螢幕閃爍。
WlxActivateUserShell WlxDisplayLockedNotice WlxDisplaySASNotice
WlxDisplayStatusMessage WlxGetStatusMessage WlxInitialize
WlxIsLockOk WlxIsLogoffOk WlxLoggedOnSAS
WlxLoggedOutSAS WlxLogoff WlxNegotiate
WlxNetworkProviderLoad WlxRemoveStatusMessage WlxScreenSaverNotify
WlxShutdown WlxStartApplication WlxWkstaLockedSAS
為簡化編程,從 MSGINA.DLL 動態取得上述函式,在自訂 DLL(以下稱 NoReboot.DLL)中直接呼叫 MSGINA.DLL 函式。核心處理 WlxLoggedOnSAS 函式:
int WINAPI WlxLoggedOnSAS(
PVOID pWlxContext,
DWORD dwSasType,
PVOID pReserved)
{
HANDLE hMutex;
WriteInfo("WlxLoggedOnSAS \r\n"); // 記錄資訊
if (dwSasType == WLX_SAS_TYPE_CTRL_ALT_DEL) // 屏蔽 Ctrl+Alt+Del
{
// 使用 Mutex 控制是否屏蔽(注意:需用 Unicode)
hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, L"_ac952_z_cn_CTRL_ALT_DEL");
if (hMutex)
{
CloseHandle(hMutex);
WriteInfo("disable CTRL+ALT+DEL \r\n");
return WLX_SAS_ACTION_NONE; // 切換至應用程式桌面,屏蔽 Ctrl+Alt+Del
}
else
WriteInfo("not disable CTRL+ALT+DEL \r\n");
}
return prcWlxLoggedOnSAS( // 呼叫從 MSGINA.DLL 取得的原始函式
pWlxContext,
dwSasType,
pReserved);
}
在主程式中呼叫 CreateMutex(NULL, FALSE, "_ac952_z_cn_CTRL_ALT_DEL") 即可啟用屏蔽功能。
L 前綴(如 L"_ac952_z_cn_CTRL_ALT_DEL")HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\WinlogonGinaDLLREG_SZ"NoReboot.DLL"NoReboot.dll 複製至系統目錄(system32)若導致無法進入系統:
msgina.dll 複製覆蓋為 NoReboot.dllGinaDLL| 風險項目 | 影響程度 | 緩解措施 |
|---|---|---|
| 系統無法啟動 | 高 | 預先建立恢復磁碟、熟悉安全模式修復流程 |
| 安全性降低 | 中 | 僅在特定受控環境(如資訊亭、考試系統)部署 |
| 相容性問題 | 中 | 充分測試目標 OS 版本(NT 4.0/2000/XP 差異) |
| 反惡意軟體誤判 | 高 | 數位簽章、白名單機制、企業環境群組原則部署 |
傳統適用場景:公開資訊亭、考試系統、工業控制終端、數位看板等需防止使用者存取系統功能的專用設備。
現代替代方案(建議優先考慮):
User Configuration → Administrative Templates → System → Ctrl+Alt+Del OptionsHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System 設定 DisableTaskMgr、DisableChangePassword 等GINA DLL 替換技術雖能在 NT/2000 實現屏蔽 Ctrl+Alt+Del,但屬核心系統層級修改,風險極高。現代 Windows 版本(Vista 以降)已棄用 GINA 架構改用 Credential Providers,此技術僅具歷史參考價值。實務上強烈建議採用官方支援的 Kiosk 模式或群組原則方案,確保系統穩定性與安全性。