国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Win2K/NT下屏蔽Ctrl+Alt+Del的響應(yīng)(VC)

2019-11-17 05:38:29
字體:
供稿:網(wǎng)友

  作者姓名 陸其明
文章原始出處 http://hqtech.nease.net
介紹:改文發(fā)表于《程序員》2001年11期

正文
大家知道,Ctrl+Alt+Del是Win2k/NT操作系統(tǒng)默認(rèn)的系統(tǒng)登錄/注銷組合鍵序列,系統(tǒng)級別很高。在應(yīng)用程序中,想要屏蔽掉該鍵序列的響應(yīng)或得到這個(gè)“按下”事件,難度是相當(dāng)大的。本文介紹了一種簡單易行的方法,實(shí)現(xiàn)在用戶登錄成功后,按下Ctrl+Alt+Del不再彈出“Windows安全”對話框。

要害詞:GINA(Graphical Identification aNd Authentication)
SAS(Secure Attention Sequence)

一.    開發(fā)原理
首先介紹一下Winlogon。windows 2000/NT有三種系統(tǒng)狀態(tài):沒有用戶登錄狀態(tài)、用戶成功登錄狀態(tài)以及工作站鎖定狀態(tài)。Winlogon是Windows 2000/NT操作系統(tǒng)提供交互式登錄支持的組件。Winlogon有三個(gè)組成部分:可執(zhí)行文件winlogon.exe,提供圖形界面認(rèn)證功能的動態(tài)庫Gina Dll,以及一些網(wǎng)絡(luò)服務(wù)提供動態(tài)庫Network PRovider Dll。參考模型如下:

winlogon.exe處理一些下層導(dǎo)出的接口函數(shù),而認(rèn)證策略是在Gina Dll中是獨(dú)立設(shè)計(jì)的。在系統(tǒng)啟動時(shí),Gina Dll被winlogon.exe裝載。Microsoft提供了一個(gè)默認(rèn)的Gina Dll——Winnt/system32/msgina.dll,提供了標(biāo)準(zhǔn)的用戶名、密碼認(rèn)證模式。Gina Dll是可替換的,用戶可以設(shè)計(jì)自己的Gina Dll,以提供其他如智能卡、視網(wǎng)膜、指紋或其他一些認(rèn)證機(jī)制。
開發(fā)自定義的Gina Dll。必須實(shí)現(xiàn)并導(dǎo)出與winlogon.exe交互的18個(gè)標(biāo)準(zhǔn)函數(shù)接口,包括WlxNegotiate、WlxInitialize、WlxLoggedOnSAS等(其他函數(shù)接口請參考Msdn)。其中WlxNegotiate是winlogon.exe調(diào)用的第一個(gè)接口函數(shù),進(jìn)行必要的版本判定,隨后調(diào)用的是WlxInitialize,主要完成winlogon.exe特定版本的函數(shù)分派表向Gina Dll的傳遞。筆者還要說明的是WlxLoggedOnSAS函數(shù),這個(gè)函數(shù)主要的功能是,當(dāng)winlogon在登錄成功狀態(tài)下,接收到SAS事件,于是調(diào)用這個(gè)函數(shù)進(jìn)行SAS事件的識別以及進(jìn)行各事件的相應(yīng)處理。
自定義Gina Dll的使用。比如開發(fā)的Gina Dll文件名為MyGina.dll。將該文件放到以下路徑:Winnt/system32。并修改注冊表,如下:
Key Name: /HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/ Winlogon
Value Name: GinaDLL
Value Type: [REG_SZ]
Value: MyGina.dll
重新啟動計(jì)算機(jī)MyGina.dll即投入使用。

二.    應(yīng)用實(shí)例
應(yīng)用要求:在用戶登錄成功狀態(tài)下,按下Ctrl+Alt+Del時(shí)系統(tǒng)不再彈出“Widows安全”對話框。由于并不需要改變用戶名、密碼這種標(biāo)準(zhǔn)的認(rèn)證模式,所以可以仍然使用msgina.dll中導(dǎo)出的函數(shù)接口,而對WlxLoggedOnSAS函數(shù)的實(shí)現(xiàn)進(jìn)行必要的改變。
開發(fā)環(huán)境:Windows 2000,PII 400
開發(fā)工具:Microsoft Visual C++ 6.0
開發(fā)步驟:
1.新建項(xiàng)目,選擇MFC AppWizard(dll),項(xiàng)目名輸入為MyGina。按下“OK”后,選擇Regular DLL with MFC statically linked,按下“Finish”。
2.使用View->ClassWizard為CmyGinaApp增加InitInstance和ExitInstance兩個(gè)函數(shù)的覆蓋。注重在Stdafx.h中加入#include <Winwlx.h>。
3.由于要導(dǎo)入msgina.dll的接口函數(shù),所以在MyGina.h中定義接口函數(shù)變量類型,如下:
typedef (WINAPI * NEGOTIATE)       (DWord,PDWORD);
typedef (WINAPI * IN99vIALIZE)      (LPWSTR,HANDLE,PVOID,PVOID,PVOID *);

typedef (WINAPI * ACTIVATE_USHELL) (PVOID,PWSTR,PWSTR,PVOID);
typedef (WINAPI * PARAM_PVOID)     (PVOID);
typedef (WINAPI * DISP_STATUS)     (PVOID,HDESK,DWORD,PWSTR,PWSTR);
typedef (WINAPI * GET_STATUS)      (PVOID,DWORD *,PWSTR,DWORD);
typedef (WINAPI * LOGON_SAS)       (PVOID,DWORD,PVOID);
typedef (WINAPI * LOGOUT_SAS)      (PVOID,DWORD,PLUID,PSID,PDWORD, PHANDLE,WLX_MPR_NOTIFY_INFO,PVOID *);
typedef (WINAPI * NETWORK_LOAD)    (PVOID,PWLX_MPR_NOTIFY_INFO);
typedef (WINAPI * SCR_SAVER)       (PVOID,BOOL  *);
typedef (WINAPI * SHUT_DOWN)       (PVOID,DWORD);
typedef (WINAPI * START_APP)       (PVOID,PWSTR,PVOID,PWSTR);
typedef (WINAPI * LOCKED_SAS)      (PVOID,DWORD);
并在類CmyGinaApp中定義成員變量,如下:
private:
    HMODULE   hMsDll;
public:
    NEGOTIATE         MyWlxNegotiate;
    IN99vIALIZE        MyWlxInitialize;
    ACTIVATE_USHELL   MyWlxActivateUserShell;
    PARAM_PVOID       MyWlxDisplayLockedNotice;
    PARAM_PVOID       MyWlxDisplaySASNotice;
    DISP_STATUS       MyWlxDisplayStatusMessage;
    GET_STATUS        MyWlxGetStatusMessage;
    PARAM_PVOID       MyWlxIsLockOk;
    PARAM_PVOID       MyWlxIsLogoffOk;
    LOGON_SAS         MyWlxLoggedOnSAS;
    LOGOUT_SAS        MyWlxLoggedOutSAS;
    PARAM_PVOID       MyWlxLogoff;
    NETWORK_LOAD      MyWlxNetworkProviderLoad;
    PARAM_PVOID       MyWlxRemoveStatusMessage;
    SCR_SAVER         MyWlxScreenSaverNotify;
    SHUT_DOWN         MyWlxShutdown;
    START_APP         MyWlxStartapplication;

    LOCKED_SAS        MyWlxWkstaLockedSAS;
注重在MyGina.h中說明extern CMyGinaApp theApp;以便于程序其他地方對theApp的引用。
4.在MyGina.cpp中,實(shí)現(xiàn)InitInstance如下:
    // 得到默認(rèn)的gina dll
    if (hMsDll == NULL)
    {
        hMsDll = ::LoadLibrary("msgina.dll");
    }
    // 導(dǎo)入各個(gè)接口函數(shù)
    if (hMsDll != NULL)
    {
    MyWlxNegotiate = (NEGOTIATE)       GetProcAddress(hMsDll,"WlxNegotiate");
    MyWlxInitialize = (IN99vIALIZE)      GetProcAddress(hMsDll,"WlxInitialize");
    MyWlxActivateUserShell=(ACTIVATE_USHELL) GetProcAddress(hMsDll,"WlxActivateUserShell");
    MyWlxDisplayLockedNotice=(PARAM_PVOID) GetProcAddress(hMsDll,"WlxDisplayLockedNotice");
    MyWlxDisplaySASNotice  = (PARAM_PVOID)     GetProcAddress(hMsDll,"WlxDisplaySASNotice");
    MyWlxDisplayStatusMessage=(DISP_STATUS)   GetProcAddress(hMsDll,"WlxDisplayStatusMessage");
    MyWlxGetStatusMessage    = (GET_STATUS)      GetProcAddress(hMsDll,"WlxGetStatusMessage");
    MyWlxIsLockOk           = (PARAM_PVOID)     GetProcAddress(hMsDll,"WlxIsLockOk");
    MyWlxIsLogoffOk&nb

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 萨迦县| 商河县| 涟源市| 盘锦市| 内丘县| 通化市| 安丘市| 策勒县| 体育| 衡水市| 鲁山县| 仙游县| 钦州市| 兰西县| 新营市| 宾川县| 克东县| 赞皇县| 梓潼县| 永吉县| 乃东县| 曲阳县| 邳州市| 上蔡县| 南丹县| 岗巴县| 南岸区| 垫江县| 平顶山市| 常宁市| 梨树县| 乐都县| 都安| 陕西省| 新兴县| 伊宁县| 嫩江县| 宝兴县| 宽城| 泾源县| 中超|