WINDOWS中CTRL+ALT+DEL控制的實現(DDK版) (轉)
可能大家知道一些透過中DLL來控制的一些方法.但我要寫的是使用DDK技術來實現控制,進而涉及到一些DDK的一些其他技術.我使用的是 SOFTWARE MICROSOFT DEVELOPMENT KIT工具.在使用上比以前版本的DDK好用很多,但是還有一定難度.這可能需要一些程式設計方面的知識.
例如以下一些概念:裝置,虛擬驅動,WINDOWS中0和3環區別等等.
所謂的驅動程式無非是一些按WINDOWS中的標準運轉的程式.這就需要我們知道這些標準.
當然MICRISOFT給我們提供了一些可以讓我們透過學習可以使用的,這些軟體就是WINDOWS標準的體現.學會使用這些軟體也就知道WINDOWS一些內層標準了.常用的有VTOOLS,DDK,WINDRIVERS.等.其中VTOOLS和WINDRIVERS是更VISUAL和EASY化的東東.當然越VISUAL和EASY的東西功能上可能就受限制.就是說更底層的東西是不容易看見和做到的.DDK是更加底層化的開發軟體.可以說基本上滿足的我們的要求.但學會使用他不容易.下面就”WINDOWS中CTRL+ALT+DEL控制的實現”為例說明一下這個東東.
實際上我們要實現”WINDOWS中CTRL+ALT+DEL控制的實現”,可以使用DDK來編寫鍵盤底層的驅動程式(過濾驅動程式).需要的是由DDK中SRC提供的kbfiltr.c和kbfiltr.H主檔案.其他的相應檔案(和編譯相關的)當然也需要.
kbfiltr.H中提供一下涵數:
1. NTSTATUS KbFilter_AddDevice( IN PDRIVER_ DriverObject, IN PDEVICE_OBJECT BusDeviceObject ); 這是增加裝置涵數,主要是用來增加你自己需要的裝置(可能需要和其他裝置通訊) NTSTATUS KbFilter_CreateClose ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); 這是在裝置建立和關閉時的涵數. NTSTATUS KbFilter_DispatchPassThrough( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); 傳輸向下IRP的涵數 NTSTATUS KbFilter_InternIoCtl ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); 內部IRP傳輸時IO控制 NTSTATUS KbFilter_IoCtl ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); 和層IO控制 NTSTATUS KbFilter_PnP ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS KbFilter_Power ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS KbFilter_InitializationRoutine( IN PDEVICE_OBJECT DeviceObject, // InitializationContext IN PVOID SynchFuncContext, IN PI8042_SYNCH_READ_PORT ReadPort, IN PI8042_SYNCH_WRITE_PORT WritePort, OUT PBOOLEAN TurnTranslationOn ); BOOLEAN KbFilter_IsrHook( PDEVICE_OBJECT DeviceObject, // IsrContext PKEYBOARD_INPUT_DATA CurrentInput, POUTPUT_PACKET CurrentOutput, UCHAR Statyte, PUCHAR DataByte, PBOOLEAN ContinueProcessing, PKEYBOARD_SCAN_STATE ScanState ); VOID KbFilter_ServiceCallback( IN PDEVICE_OBJECT DeviceObject, IN PKEYBOARD_INPUT_DATA InputDataStart, IN PKEYBOARD_INPUT_DATA InputDataEnd, IN OUT PULONG InputDataConsumed ); VOID KbFilter_Unload ( IN PDRIVER_OBJECT DriverObject );
這其中有用的就是KbFilter_ServiceCallback()涵數(針對本例子).這個涵數提供給我們在鍵盤傳輸資料時可以截獲和控制的服務.引數很簡單:
IN PDEVICE_OBJECT DeviceObject裝置.
IN PKEYBOARD_INPUT_DATA InputDataStart,資料開始包.
IN PKEYBOARD_INPUT_DATA InputDataEnd,資料終止包
在InputDataStart和InputDataEnd之間就是當前鍵盤輸入的資料.想怎麼改就怎麼改拉.
設計一個演算法讓CTRL+ALT+DEL失效.COMPLETE!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-996543/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Windows 2003 SP1 DDK下載Windows
- HarmonyOS USB DDK助你輕鬆實現USB驅動開發
- frp 實現內網穿透(Windows 版)FRP內網穿透Windows
- Windows 系統,PHP實現PPT轉PDF,PDF轉圖片的操作WindowsPHP
- WPF實現html中的table控制元件HTML控制元件
- 3、使用Windows命令來實現埠轉發Windows
- DDK中"checked build"和"free build" 之區別UI
- 實現Avalonia平臺下低配版的Dock控制元件:實現TabControl的可關閉控制元件
- php實現依賴注入(DI)和控制反轉(IOC)PHP依賴注入
- 如何實現一個簡易版的 Spring - 如何實現 AOP(中)Spring
- 峰迴路轉:去掉 DbContextPool 後 Windows 上的 .NET Core 版部落格表現出色ContextWindows
- netty系列之:netty實現http2中的流控制NettyHTTP
- Flutter中實現無Context跳轉FlutterContext
- PHP中實現頁面跳轉PHP
- DIY 實現 ThinkPHP 核心框架(八)控制反轉和依賴注入PHP框架依賴注入
- 小例子 理解 Laravel 中的 控制反轉模式Laravel模式
- js中windows的函式(隨機數,計時器的實現)JSWindows函式隨機
- win10風扇轉速怎麼調節 windows10中控制風扇轉速設定方法Win10Windows
- Python中Numpy實現陣列的180度反轉操作Python陣列
- vue中實現路由跳轉的三種方式(精選)Vue路由
- 雜湊表的C實現(三)---傳說中的暴雪版
- 【JavaScript框架封裝】JavaScript中的文字字串的轉義和反轉義的實現JavaScript框架封裝字串
- 簡單建立VC + DDK的驅動開發環境開發環境
- MAUI中構建跨平臺原生控制元件實現UI控制元件
- 廣州遊戲公司轉型中的憂患與現實遊戲
- PostgreSQL中利用驅動程式實現故障轉移SQL
- .net core下訪問控制層的實現
- Consul Config 使用Git做版本控制的實現Git
- PHP 實現字串翻轉(包含中文漢字)的實現PHP字串
- react/vue中dom-diff簡易版實現ReactVue
- Qt實現控制元件的漸隱漸現動效QT控制元件
- 使用async實現非同步控制非同步
- Spring Cloud Eureka 實現安全控制SpringCloud
- canvas之實現控制動畫Canvas動畫
- Laravel實現許可權控制Laravel
- 在K8S中,Pod 如何實現對節點的資源控制?K8S
- Jmeter——迴圈控制器中實現Counter計數器的次數重置JMeter
- 影像旋轉的FPGA實現(一)FPGA
- 類轉json的基類實現JSON