新增預設派遣例程

2021-08-28 03:58:46 字數 2228 閱讀 6876

a、初識irp

b、乙個簡單的irp處理函式

c、irp.iostatus結構

d、iocompleterequest函式

ipr簡介:

irp全稱(i/o request package),即輸入輸出請求包。他是windows驅動的重要概念,使用者模式下所有對驅動程式的i/o請求,全部由作業系統轉化為乙個叫做irp的資料結構,不同的irp資料會被「派遺」到不同的派遣函式(dispatch function)中。

作用:上層應用程式與底層驅動通訊。exe程式與sys

五種常用的irp型別:

#define

irp_mj_create                     0x00//createfile()

#define

irp_mj_close                      0x02 //closehandle() 

#define

irp_mj_read                       0x03//readfile

#define

irp_mj_write                      0x04//writefile

#define

irp_mj_device_control           0x0e//deviceiocontrol 

過程:1、建立irp處理函式

2、在驅動入口函式裡driverentry()註冊irp處理函式

3、細化irp函式

//獲取指定

irp的棧空間位址

pio_stack_location iogetcurrentirpstacklocation( in  pirp irp

);void iocompleterequest(

in  pirp irp,//

指定需要完成的

ipr

in  cchar priorityboost // );

方法1:統一註冊派遺函式

//註冊派遺函式

pdriverobject->majorfunction[irp_mj_create]=ddk_dispatchroutine;

//註冊派遺函式

pdriverobject->majorfunction[irp_mj_close]=ddk_dispatchroutine;

//註冊派遺函式

pdriverobject->majorfunction[irp_mj_read]=ddk_dispatchroutine;

//註冊派遺函式

pdriverobject->majorfunction[irp_mj_write]=ddk_dispatchroutine;

//註冊派遺函式

pdriverobject->majorfunction[ irp_mj_device_control]=ddk_dispatchroutine;

ntstatus

ddk_dispatchroutine(in

pdevice_object

pdevobj,in

pirp

pirp       )

//成功返回

return

status_success;

}//方法二:分開註冊

//註冊派遺函式

pdriverobject->majorfunction[irp_mj_create]=ddk_dispatchroutine_create;

//註冊派遺函式

pdriverobject->majorfunction[irp_mj_close]=ddk_dispatchroutine_close;

//註冊派遺函式

pdriverobject->majorfunction[irp_mj_read]=ddk_dispatchroutine_read;

//註冊派遺函式

pdriverobject->majorfunction[irp_mj_write]=ddk_dispatchroutine_write;

//註冊派遺函式

pdriverobject->majorfunction[ irp_mj_device_control]=ddk_dispatchroutine_control;

ntstatus

ddk_dispatchroutine_control(in

pdevice_object

pdevobj,in

pirp

pirp     )

我對 HOOK 派遣例程函式表的體會。。。

關鍵點 除錯函式得到的資訊 kd u nt iofcalldriver nt iofcalldriver 804ef120 ff2500d25480 jmp dword ptr nt piofcalldriver 8054d200 804ef126 cc int 3 804ef127 cc int ...

OpenWRT新增 crontab開機預設執行

openwrt系統預設已經新增了crond,只是沒有配置預設配置引數,致使服務起不來。1.修改啟動指令碼 etc ini.d cron etc rc.d s50cron為 etc ini.d cron的鏈結 bin sh etc rc.common start 50 service use pid ...

Pycharm模板新增預設資訊

我們在pycharm中使用到python3.x版本的直譯器,完全沒有問題可以正常使用,但是有的時候多少會出現使用python2的時候 我們明明都把 和文字注釋了,為什麼使用的時候還會報錯呢?報錯是因為我們用的python2直譯器,python2直譯器是不識別中文的,我們寫的中文注釋掉了.但是它還是要...