Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Windows Server 系統教學 >> Server 2000

Windows NT/2000 完美屏蔽 Ctrl+Alt+Del:替換 GINA DLL 技術深度解析

編輯:Server 2000

在 Windows 9x 可用 SystemParametersInfo(SPI_SCREENSAVERRUNNING...) 屏蔽 Ctrl+Alt+Del,但在 NT/2000 因 WinLogon 註冊了安全注意序列 (SAS),普通 Hook 無法攔截。本文介紹替換 GINA (Graphical Identification and Authentication) DLL 的核心技術,實現 NT/2000 環境下完美屏蔽 Ctrl+Alt+Del。

核心原理

  • WinLogon 初始化時註冊 SAS (Ctrl+Alt+Del),載入預設 MSGINA.DLL 提供登入介面。
  • 微軟提供 GINA 介面,允許自訂 DLL 替換 MSGINA.DLL。
  • WinLogon 建立三個桌面:Winlogon 桌面(安全對話框)、應用程式桌面(一般桌面)、螢幕保護桌面。
  • 用戶登入後按 Ctrl+Alt+Del,WinLogon 呼叫 GINA 的 WlxLoggedOnSAS 函數,此時處於 Winlogon 桌面。
  • 自訂 GINA 在 WlxLoggedOnSAS 中直接切換回應用程式桌面 (SetThreadDesktop),系統不顯示安全對話框,達到屏蔽效果。

關鍵函數實作

int WINAPI WlxLoggedOnSAS(PVOID pWlxContext, DWORD dwSasType, PVOID pReserved) {
    if (dwSasType == WLX_SAS_TYPE_CTRL_ALT_DEL) {
        HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, L"_ac952_z_cn_CTRL_ALT_DEL");
        if (hMutex) {
            CloseHandle(hMutex);
            return WLX_SAS_ACTION_NONE; // 切換到應用程式桌面,屏蔽 SAS
        }
    }
    return pOriginalWlxLoggedOnSAS(pWlxContext, dwSasType, pReserved); // 呼叫原 MSGINA 函數
}

主程式呼叫 CreateMutex(NULL, FALSE, "_ac952_z_cn_CTRL_ALT_DEL") 即可啟用屏蔽。

安裝與注意事項

  1. 編譯自訂 GINA DLL(如 NoReboot.dll),需使用 Unicode 字元集。
  2. 複製至 C:\WinNT\System32\(或 C:\Windows\System32\)。
  3. 修改登錄檔:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
    值名:GinaDLL,類型:REG_SZ,資料:NoReboot.dll
  4. 重開機生效。

救援方案:若無法進入系統,進入 DOS/安全模式,將 msgina.dll 複製覆蓋 NoReboot.dll,或刪除 GinaDLL 登錄值即可恢復。

⚠ 警告:修改 GINA 屬核心系統層級操作,錯誤會導致無法登入系統,請務必在測試環境驗證後再部署生產機,並備妥救援方案。

Copyright © Windows教程網 All Rights Reserved