IRP派遣操作

2022-07-29 10:09:09 字數 1327 閱讀 7302

irptrace工具跟蹤irp

派遣函式(dispathc funtion)是windows驅動中的重要概念。驅動程式的主要功能是負責處理i/o請求,其中大部分i/o請求是在派遣函式中處理的。使用者模式下所有對驅動程式的i/o請求。全部由作業系統轉化為乙個叫做irp的資料結構,不同的irp資料會派遣到不同的派遣函式中。

irp(i/o request package) 和windows應用程式的訊息處理機制相似。 irp中乙個majorfunction, 其儲存派遣的函式

如:pdriverobject->driverunload =helloddkunload;

pdriverobject->majorfunction[irp_mj_create] =helloddkdispatchroutine;

pdriverobject->majorfunction[irp_mj_close] =helloddkdispatchroutine;

pdriverobject->majorfunction[irp_mj_write] =helloddkdispatchroutine;

pdriverobject->majorfunction[irp_mj_read] =helloddkdispatchroutine;

處理這些irp最簡單的方法是在相應的派遣函式中將irp的狀態設定為成功, 結束irp請求(iocompleterequest).

irp_mj_cleanup 清除工作,closehandle會產生此irp

irp_mj_close 關閉裝置,closehandle會產生此irp

irp_mj_create 建立裝置,createfile會產生此irp

irp_mj_device_control devicelocontrol 函式會產生此irp

irp_mj_internal_device_control 該io**用來與其他驅動之間的通訊

irp_mj_pnp 即插即用訊息

irp_mj_power 作業系統處理電源訊息時產生此irp

irp_mj_read 讀取裝置內容,readfile產生此irp

irp_mj_shutdown 關閉系統前會產生此irp

irp_mj_system_control 系統內部產生的控制資訊類似於核心呼叫evicelocontrol函式

irp_mj_write 對裝置進行writefile時會產生此irp

最簡單的處理全部返還成功。

#pragma pagedcodentstatus helloddkdispatchroutin(in pdevice_object pdevobj,in pirp pirp)

IRP 處理流程

本文通過開啟乙個檔案物件為例子,描述了乙個帶有兩個i o stack location的irp的詳細處理過程。當然乙個irp可以有多個i o stack location,具體個數取決於將要處理該請求的驅動的層數。下圖詳細描述了驅動程式是如何通過使用i o支援例程 io routines 來處理ir...

驅動學習筆記 irp

irp是windows核心中的一種非常重要的資料結構。上層應用程式與底層驅動程式通訊時,應用程式會發出i o請求,作業系統將相應的i o請求轉換成相應的irp,不同的irp會根據型別被分派到不同的派遣例程中進行處理。irp相當於ring3下的訊息,應用程式對驅動程式進行操作的時候會發出相應的訊息,驅...

對IRP的理解

對irp的理解 驅動程式與i o管理器通訊,使用的是irp,即i o請求包。irp分為2部分 1 irp首部 2 irp堆疊。irp首部資訊如下 irp首部 io status block iostatus 包含i o請求的狀態 pvoid associatedirp.systembuffer 如果...