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直譯器是不識別中文的,我們寫的中文注釋掉了.但是它還是要...