在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

Windows2000平臺下混合編程屏蔽鍵盤事件

Windows2000平臺下混合編程屏蔽鍵盤事件

更新時間:2022-05-10 文章作者:未知 信息來源:網絡 閱讀次數:

關鍵詞

Windows2000, VC++, C++Bulider,  Visual Basic, HOOK, DLL



引言

在一些應用場合,比如基于Windows2000(以下簡稱Win2K)下開發工控軟件需要,為了增強系統安全性,需要對鍵盤事件進行監控、屏蔽。滿足控制系統安全性要求。作為一個Win2K后臺監控軟件的編寫,需要注意如下要點:HOOK(鍵盤掛鉤函數),DLL,MsgINA.dll,Shell_NotifyIcon(托盤函數)。為了提高軟件編寫效率,可以采用混合編程方式,即采用VC++/ C++Bulider 6.0編寫DLL文件,采用Visual Basic編寫客戶端程序。



1 HOOK與DLL簡介

1) HOOK

HOOK是一種反調函數。是Windows系統為應用程序提供用于監控系統各種事件消息的類中斷程序。在系統消息機制里掛上用戶自定義消息處理鉤子(HOOK),達到對消息的過濾。Windows系統本身提供數個HOOK函數,為實現在Win2K/NT平臺下的鍵盤屏蔽,要采用低級鍵盤HOOK,即WH_KEYBOARD_LL。此HOOK函數可以屏蔽Ctrl+Esc、Alt+Tab、和Alt+Esc等系統功能鍵,在WINNT SP3后的操作系統中都是支持的。設置HOOK需要用到SetWindowsHookEx()函數,在程序退出后,必須用UnhookWindowsHookEx()函數卸載掉HOOK。



2) DLL與Msgina.dll

DLL(動態鏈結庫)是Microsoft Windows最重要組成之一。大多數與Windows相關程序,不是程式模塊組模式,就是動態鏈結庫模式。為實現對所有鍵盤事件的監控,必須將HOOK函數放在DLL文件中。

Windows本身就是由許多的DLL組成的,它所有的庫模塊也都設計成DLL。在Win2K在,為了屏蔽Ctrl+Alt+Del組合鍵,必須了解Msgina.dll。在Win2K系統中,微軟采用Winlogon和GINA-Graphical Identification and Authentication提供交互式登錄支持。登錄成功后,按下Ctrl+Alt+Del組合鍵,系統將通過Winlogon調用Msgina.dll內部函數WlxLoggedOnSAS。所以要屏蔽Ctrl+Alt+Del組合鍵,則可以寫一個新的GINA.dll,其中提供接口調用Msgina.dll,從而實現屏蔽。



3) Shell_NotifyIcon

客戶端程序應該運行在后臺,所以可以將其最小化在系統托盤中。采用Shell_NotifyIcon API函數用來添加、刪除、更改系統托盤區(taskbar status area)的圖標。



2 程序實現

在本文中,采用VC++6.開發系統GINA DLL, C++Bulider 6.0開發低層HOOK DLL,VB6.0開發客戶端程序,實現混合編程。



1) 自定義GINA編寫

因為自定義GINA編寫資料較多,本文只簡要介紹。自定義GINA可以采用VC++6.0開發。下面給出Windows2000 的Msgina內部函數表。表中函數將在自定義GINA中導入。



函數名
說明

WlxActivateUserShell
激活用戶外殼程序

WlxDisPlayLockedNotice
允許GINA dll顯示鎖定信息

WlxDisPlaySASNotice
當沒有用戶登錄時,winlogon調用此函數

WlxDisPlayStatusMessage
Winlogon用一個狀態信息調用此函數進行顯示

WlxGetConsoleSwitchCredentials
Winlogon調用此函數讀取當前登錄用戶的信任信息,并透明的將它們傳到目標會話

WlxGetStatusMessage
Winlogon調用此函數獲取當前狀態信息

WlxIntialize
針對指定的窗口位置進行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調用此函數




我們需要注意的是WlxLoggedOnSAS函數。屏蔽Ctrl+Alt+Del組合鍵代碼將在調用該函數時添加。我們采用讀取注冊表鍵值來判斷是否屏蔽,而該鍵值將在客戶端程序中被操作。



// 當系統處于登陸成功,沒有鎖定的狀態下

// Winlogon接收到SAS事件,于是調用該函數

int WINAPI WlxLoggedOnSAS(PVOID pWlxContext, DWORD dwSasType, PVOID pReserved)

{

HKEY hKey;

DWORD dwType=REG_DWORD; //定義讀取數據類型:雙字節

char content[4]; //所查詢注冊表鍵值的內容

DWORD dwLength=4;

//打開注冊表鍵

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\FCSKBLock\\KBConfig",

0,KEY_READ,&hKey)

==ERROR_SUCCESS)

{ //讀取CtrlAltDel鍵值

if(RegQueryValueEx(hKey,"CtrlAltDel",NULL,&dwType,(unsigned char *)content,&dwLength)

==ERROR_SUCCESS)

{

if(* content==1)

return WLX_SAS_ACTION_NONE;//直接返回桌面程序,實現屏蔽

}

}

return theApp.MyWlxLoggedOnSAS(pWlxContext,dwSasType,pReserved ) ;

}





開發完成的自定義GINA.dll要放到Wint\system32文件夾中。并修改注冊表:

鍵項名
\HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon

子鍵名
myGina(任意名稱均可)

子鍵類型
[REG_SZ]

子鍵值
myGina(自定義Gina的名稱)


若GINADLL不存在,新建即可。

再重啟計算機后myGina即為系統使用。



2) 全局HOOK、DLL編寫

采用BORLAND C++Bulider 6.0(以下簡稱BCB)編寫安裝全局HOOK的DLL文件。BCB是一款優秀的C/C++語言開發工具,可以快速開發高質量的Windows程序。下面介紹簡要步驟:

I. 利用BCB新建向導,建立一個DLL工程。在此DLL中我們將有條件的安放兩個HOOK。一個用于捕獲系統功能熱鍵并屏蔽,另一個用作客戶端程序的激活熱鍵;



II. 在cpp里添加如下代碼:



此段代碼用于申明全局變量和導出函數。因為此DLL文件將被VB編寫的客戶端程序所調用,所以聲明導出函數時需要將語句extern ”C” 放置在聲明處。另外在BCB中默認的調用約定為__cdecl方式,而在VB中調用約定為__stdcall。

pragma argsused

//下面變量用于HOOK.cpp

static HHOOK hOldHook=0;/*記錄上一個注冊的鍵盤鉤子*/

static HHOOK hOldHook2=0;/*記錄上一個注冊的鍵盤鉤子*/

static HWND hProcWnd=0; /*記錄客戶程序的窗體*/

static HANDLE hInstance=0;/*DLL的句柄*/

//導出setHotKey

extern "C" __declspec(dllexport) char _stdcall ActivateKey(HWND hWnd,bool nCode,bool bWhich);



int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)

{

//用全局變量保存這個DLL的句柄

hInstance=hinst;

return 1;

}




因為客戶端程序是作為后臺運行的,所以我們需要給其安放個激活熱鍵,以便用戶在任何情況下通過熱鍵呼出。所以必須通過DLL文件安放一個全局HOOK,用作激活熱鍵。當用戶按下激活熱鍵后,DLL會截獲消息并向指定的客戶端程序發送激活消息。

//客戶端程序熱鍵---------------------------------------------------------------------------

LRESULT CALLBACK HotKeyProc(int nCode,WPARAM wParam,LPARAM lParam)

{

bool fEatKeystroke = FALSE;

//PKBDLLHOOKSTRUCT p = NULL;

if (nCode == HC_ACTION) {

switch (wParam)

{

case WM_KEYDOWN: case WM_SYSKEYDOWN:

case WM_KEYUP: case WM_SYSKEYUP:

PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;

fEatKeystroke =

((p->flags & LLKHF_ALTDOWN) != 0)&& (p->vkCode==VK_F12);//自定義激活//熱鍵: Alt+F12

break;

}

if(fEatKeystroke)

SendMessage(hProcWnd,WM_USER+200,2000,0); //用于激活客戶程序的自定義消息

}

return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam,

lParam));

}






此處為捕獲、屏蔽系統功能熱鍵的回調函數,用戶可根據需要添加修改需要屏蔽的按鍵。

//屏蔽Ctrl+Esc/Alt+Tab/Win/F1/Alt+Esc等功能按鍵------------------------------------------------------------------

LRESULT CALLBACK ShieldKeyProc(int nCode,WPARAM wParam,LPARAM lParam)

{

bool fEatKeystroke = FALSE;

//PKBDLLHOOKSTRUCT p = NULL;

if (nCode == HC_ACTION)

{

switch (wParam) {

case WM_KEYDOWN: case WM_SYSKEYDOWN:

case WM_KEYUP: case WM_SYSKEYUP:

PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;

fEatKeystroke =

(p->vkCode==VK_F1)||//F1

((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0))|| //Alt+Tab

((p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0)) || //Alt+Esc

((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0)) || //Ctrl+Esc

(((GetKeyState(VK_CONTROL) & 0x8000) != 0) && (p->vkCode == VK_SPACE))|| //Ctrl+Space

(((GetKeyState(VK_CONTROL) & 0x8000) != 0) && ((GetKeyState(VK_SHIFT) & 0x8000) != 0));

break;

}

}

return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam,

lParam));

}




這個函數負責根據客戶端調用參數,向系統注冊、注銷HOOK。HOOK必須在不要的時候卸載!

//HWND hWnd:客戶端程序調用窗體的句柄,bool nCode:掛還是不掛HOOK的標志,bool bWhich:掛哪個HOOK的標志

char _stdcall ActivateKey(HWND hWnd,bool nCode,bool bWhich)

{

if (bWhich)

{

if(nCode) // 安放底層HOOK

{

hProcWnd=hWnd;//記錄下這一個DLL是由哪個窗體調用的

hOldHook=SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)ShieldKeyProc,hInstance,0); //記錄下上一個DLL是由哪個窗體調用的

return(hOldHook != NULL? 1: 0 );

}

else // 卸下HOOK

UnhookWindowsHookEx(hOldHook);

}

else

{

if(nCode) // 安放HotHooK

{

hProcWnd=hWnd;//記錄下這一個DLL是由哪個窗體調用的

hOldHook2=SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)HotKeyProc,hInstance,0); //記錄下上一個DLL是由哪個窗體調用的

return(hOldHook2 !=NULL ? 1: 0);

}

else // 卸下HOOK

UnhookWindowsHookEx(hOldHook2);

}

return true;




III. 以Release方式編譯保存。

IV. 關于DLL調試可以參見有關文檔。



3) 客戶端程序

微軟的 Visual Basic 因為其編寫Windows界面程序的方便、靈活而成為我們開發客戶端程序的首選。我們采用Visual Basic 6.0 中文企業版(以下簡稱VB)進行開發。VB本身并不直接支持DLL文件的開發,但提供了對DLL的調用功能。作為客戶端程序,就是實現用戶操作與程序調用DLL,API函數的轉換。下面介紹簡要步驟:



I. 工程建立

新建三個窗體.分別命名為:Form1,frmLogin,Dialog.
Form1作為主窗體界面布置如圖<1>:

<1>

第一項采用API函數屏蔽任務欄;

第二項通過操作注冊表,實現屏蔽Ctrl+Alt+Del組合鍵;

第三項通過調用開發的底層鍵盤HOOK DLL實現功能鍵的屏蔽。

密碼設置項用于客戶端程序激活需要密碼情況。

frmLogin作為用戶設置密碼后,重新激活的登錄窗體,如圖<2>:

<2>

Dialog則作為”密碼設置”窗體,如圖<3>:

<3>



II. 代碼流程:

本文給出主流程圖。
說明:

i. 因為軟件是基于Windows2000平臺,所以啟動后首先要判斷系統平臺;

ii. 考慮系統安全性,程序要檢查是否已有遠行實例;

iii. 因為要接受DLL文件發送的激活消息,所以可以在窗體加載事件中通過SetWindowLong函數在VB消息序列中添加自定義消息過濾函數。



SetWindowLong語法:

SetWindowLong (hwnd, GWL_WNDPROC, AddressOf SysMenuProc)
hwnd:當前窗體的句柄

GWL_WNDPROC:設置一個新的窗口消息處理過程的地址

AddressOf SysMenuProc :取新的窗口消息處理過程名稱

返回值代表前個窗體消息處理過程。



SysMenuProc 函數是個回調函數。必須聲明定義在標準模塊中。

iv. 程序最小化在系統托盤區編程利用Shell_NotifyIcon函數。

Shell_NotifyIcon語法可以參見微軟的MSDN。添加系統托盤圖標子程序放在窗體的Resize事件中。程序在退出時必須刪除圖標。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 97精品国产97久久久久久粉红| 久久久精品麻豆| 8x8x最新地址| 日韩中文字幕免费在线| 欧美日韩性生活片| 日韩不卡一二区| 青春草在线视频免费观看| 免费成人黄色大片| 久久人人爽人人片| 久久久久亚洲av无码专区喷水| 成人免费观看毛片| www亚洲成人| 午夜在线视频免费观看| 亚洲精品天堂成人片av在线播放| 在线视频观看91| 青青草综合在线| 国产一区二区三区精彩视频 | 毛片在线视频观看| 激情成人在线观看| 91成人在线视频观看| 久无码久无码av无码| 欧美日韩视频免费| 亚洲欧洲日产国码无码久久99| 18禁网站免费无遮挡无码中文| 黄色小视频大全| 人妻夜夜添夜夜无码av| 久久网站免费视频| 特级黄色片视频| 妺妺窝人体色www看人体| 91专区在线观看| 性chinese极品按摩| 国产女主播av| 欧美成人黑人猛交| 亚洲激情免费视频| av五月天在线| 久草视频这里只有精品| 亚洲高清在线免费观看| 日韩视频 中文字幕| 黄色手机在线视频| 轻点好疼好大好爽视频| 国产wwwxx| 国产精品无码人妻一区二区在线| 97在线免费公开视频| 免费成人深夜夜行网站视频| 黄色一级在线视频| 亚洲精品国产久| 日本成人中文字幕在线| www.国产二区| 免费网站在线观看黄| 一本久道综合色婷婷五月| 一本色道久久88亚洲精品综合| 日本xxxxxxxxxx75| 一区中文字幕在线观看| 亚洲免费av一区二区三区| 欧美黑人在线观看| 二级片在线观看| 国产三级三级看三级| 黄色网页免费在线观看| av影院在线播放| 亚洲精品第三页| 国产三级精品三级在线| 黄色片一级视频| 精品视频无码一区二区三区| 久久国产精品视频在线观看| 日本一区二区三区四区五区六区| 精品久久久久久久无码| 欧美一级黄色影院| 狠狠热免费视频| www.国产区| 91极品视频在线观看| 日韩在线第三页| 手机在线成人免费视频| 欧美日韩一区二区三区69堂| 在线观看免费不卡av| 亚洲精品性视频| 欧美丝袜在线观看| 美国av在线播放| 大胆欧美熟妇xx| 波多野结衣之无限发射| 北条麻妃在线视频观看| www黄色av| 国产成人综合一区| 99国产精品久久久久久| 超碰97免费观看| 久久国产午夜精品理论片最新版本| 狠狠干视频网站| 久久久久人妻精品一区三寸| 欧美成人福利在线观看| 99久re热视频精品98| 日韩av中文字幕第一页| 成人在线免费播放视频| 日本国产一级片| 日韩一级特黄毛片| 尤物av无码色av无码| 高清av免费看| 穿情趣内衣被c到高潮视频| 欧美 日本 亚洲| 中文字幕免费高清在线| www.国产在线视频| 亚洲精品一二三四五区| www.-级毛片线天内射视视| 久久久久久久久久久99| 久热精品在线观看视频| 丁香花在线影院观看在线播放| 国产xxxxx在线观看| 99精品视频免费版的特色功能| 潘金莲一级淫片aaaaa免费看| www插插插无码视频网站| 天堂一区在线观看| 隔壁人妻偷人bd中字| 国产一级片自拍| 亚洲一区二区蜜桃| 日韩中文字幕在线视频观看| 99精品视频网站| the porn av| 久久婷婷五月综合色国产香蕉| 手机免费av片| av免费在线播放网站| 91精品国产毛片武则天| 国产成人美女视频| 999精品视频在线| 久久国产乱子伦免费精品| 日韩av新片网| 国产精品无码电影在线观看| 九九九九九九九九| 污污的视频免费| 污版视频在线观看| 日日噜噜噜噜久久久精品毛片| 东北少妇不带套对白| 国产人妻互换一区二区| 亚洲欧美日韩精品一区| 天堂网在线免费观看| 亚洲国产日韩欧美在线观看| 欧美日韩中文在线视频| 人妻丰满熟妇av无码区app| av动漫免费看| 午夜免费看视频| 日日夜夜精品视频免费观看| 欧美一级xxxx| 91手机视频在线| 国产激情片在线观看| 蜜臀av无码一区二区三区| av在线播放天堂| 欧美老熟妇喷水| 日本新janpanese乱熟| 向日葵污视频在线观看| 日韩精品视频网址| h无码动漫在线观看| 91九色在线观看视频| 在线观看高清免费视频| 三级一区二区三区| 老汉色影院首页| 日本免费不卡一区二区| 免费黄色特级片| 国内av免费观看| 日韩国产欧美亚洲| 99热这里只有精品在线播放| 国产不卡的av| 欧美成人一区二区在线观看| 欧美日韩一区二区三区69堂| 国产一二三四五| 欧美精品无码一区二区三区| 中文av字幕在线观看| 久久手机在线视频| 黑森林福利视频导航| 一级全黄肉体裸体全过程| 91国视频在线| 99精品一级欧美片免费播放| 免费av网址在线| 中文字幕第50页| www.com黄色片| 欧美 日本 亚洲| 五月天色婷婷综合| 国产wwwxx| 亚洲熟妇av日韩熟妇在线 | 久久久精品三级| 成人在线观看毛片| 在线观看免费视频高清游戏推荐| 樱空桃在线播放| 亚洲va综合va国产va中文| 免费看黄色a级片| 亚洲黄色片免费看| 精品免费国产一区二区| 美脚丝袜脚交一区二区| 国产日产欧美一区二区| 国产色视频在线播放| 国产免费黄色av| jizzjizz国产精品喷水| 国产一区二区四区| 日本中文字幕在线不卡| 最新国产黄色网址| 亚洲欧美久久久久| 精品久久久久久中文字幕2017| 免费在线黄网站| 亚洲中文字幕无码一区二区三区| 一区二区三区免费播放| aa免费在线观看| 久久久久国产精品熟女影院| 少妇高潮喷水在线观看| 中文字幕人妻熟女人妻洋洋|