最近在網上無意中看到一段**,主要講述的是windows 下鍵盤過濾驅動的實現方式,這段**很有意識,是一種比較好的一種方法,主要將獲取的鍵盤驅動物件的所有分發函式替換,然後另行處理,具體的**如下;
//獲取鍵盤驅動物件
status = obreferenceobjectbyname(&unintnamestring,
obj_case_insensitive,
null,
0, iodriverobjecttype,
kernelmode,
null,
(pvoid *)&kdbdriverobject);
// 替換分發函式
for (i=0;i<=irp_mj_maximum_function;i++)
// 對irp_mj_read分發例程單獨處理
ntstatus c2pdispatchgeneral(in pdevice_object deviceobject, in pirp irp)
gc2pkeycount ++;
devext = (pc2p_dev_ext)deviceobject->deviceextension;
currentirpstack = iogetcurrentirpstacklocation(irp);
iocopycurrentirpstacklocationtonext(irp);
kdprint(("c2pdispatchread->iosetcompletionroutine/n"));
iosetcompletionroutine(irp,c2preadcomplete,deviceobject,true,true,true);
return iocalldriver(devext->lowerdeviceobject,irp);
}
// plowerdeviceobject = ioattachdevicetodevicestack(pfilterdeviceobject,ptargetdeviceobject);
// 返回的低層驅動物件
return iocalldriver(((pc2p_dev_ext)deviceobject->deviceextension)->lowerdeviceobject,irp);
}//完成例程函式處理
ntstatus c2preadcomplete(in pdevice_object deviceobject, in pirp irp, in pvoid context)
} gc2pkeycount -- ;
if (irp->pendingreturned)
return irp->iostatus.status;
}簡單吧,只需這幾步就可以完成鍵盤過濾驅動,編寫完之後,我利用password對話方塊嘗試過,竟然能捕獲鍵盤輸入的資料。那天要是能安裝在網咖的機器上,豈不是可以盜取網管的密碼!!!(現實並非這麼簡單)
驅動筆記15 鍵盤過濾驅動學習筆記
鍵盤過濾驅動對於分層驅動的學習是乙個很好的例子,它相對檔案過濾驅動來說較為簡單,也更容易理解。並不是所有的驅動都需要直接訪問硬體的,事實上幾乎所有的硬體裝置都存在著驅動程式鏈,最底層的驅動程式可以直接訪問硬體,並對上層提供透明服務,最上層的驅動程式只要對接收到的資料進行過濾 格式化等處理即可,這樣大...
開發鍵盤過濾驅動實現模擬按鍵過程中遇到的問題
如何動態御載鍵盤過濾驅動 要做到動態御載鍵盤過濾驅動,明白其工作執行的原理是很重要的。首先必須要知道鍵盤過濾驅動是工作在非同步模式下的,這一點很重要。為了得到乙個按鍵操作,首先需要傳送乙個irp mj read到驅動的裝置棧,驅動收到這個irp會做什麼樣的處理呢?它會一直保持這個irp為pendin...
驅動中實現模擬鍵盤按鍵
標 題 驅動中實現模擬鍵盤按鍵 作 者 luocong 在ring3中實現模擬鍵盤按鍵有n n種方式,比如sendinput keybd event 但在驅動中要怎麼模擬呢?1 寫埠 define defi8042 data port puchar 0x60 define defi8042 ctrl...