irp是windows核心中的一種非常重要的資料結構。上層應用程式與底層驅動程式通訊時,應用程式會發出i/o請求,作業系統將相應的i/o請求轉換成相應的irp,不同的irp會根據型別被分派到不同的派遣例程中進行處理。
irp相當於ring3下的訊息,應用程式對驅動程式進行操作的時候會發出相應的訊息,驅動程式根據這些訊息做出相應的操作。這些操作通過我們自己編寫的派遣函式來決定執行什麼樣的操作。
看下面流程:
1.為不同的irp型別設定派遣函式
2.編寫派遣函式來處理收到不懂型別的irp的不同操作
3.建立裝置與符號鏈結
4.在解除安裝歷程中刪除裝置與符號鏈結
流程很簡單,但是處理起來就不那麼簡單了。
**如下:
#include 「ntddk.h」
void unload(in pdriver_object driverobject)//解除安裝時刪除符號鏈結
ntstatus mymajor(in pdevice_object device,in pirp irp)
//判斷是否為關閉驅動的irp,如果是則輸出「irp_mj_clos」
if (stack->majorfunction==irp_mj_close)
iocompleterequest( irp, io_no_increment );//結束掉irp
return irp->iostatus.status;//返回
}ntstatus driverentry(in pdriver_object driverobject,in punicode_string registrypath)
下面寫乙個簡單的vc程式開啟然後關閉驅動,開啟的時候會傳送給兩個訊息轉換成irp就是irp_mj_create和irp_mj_close,然後截獲到輸出「irp_mj_create和irp_mj_close」。
windows驅動程式設計學習筆記 (三)IRP
一,irp的概念 i o request package 當乙個應用程式呼叫函式去操作某個裝置時,比如呼叫createfile,deviceiocontrol,等等時,i o管理器為此函式建立乙個irp資料結構物件和乙個irp stack location資料結構物件陣列,陣列個數等於驅動程式堆疊上...
BDA驅動學習筆記(4) IRP
nt 中的驅動採用分層結構,乙個應用層的 io命令需要通過 io子系統,io系統服務層,若干層的驅動,最後才能到達硬體,硬體有什麼資料需要返回,也需要經過這些層,一點都不能省。某一層的驅動只能和自己相鄰層的驅動聯絡,而且聯絡都要通過 io manager 用乙個名叫 irp的資料結構完成通訊。irp...
Windows驅動開發 IRP結構體
irp的全名是i o request package,即輸入輸出請求包,它是windows核心中的一種非常重要的資料結構。上層應用程式與底層驅動程式通訊時,應用程式會發出i o請求,作業系統將相應的i o請求轉換成相應的irp,不同的irp會根據型別被分派到不同的派遣例程中進行處理。irp有兩個基本...