Windows驱动开发——派遣函数

1、IRP

    IRP(I/O Request Package),即输入输出请求包。上层应用程序与底层驱动程序通信时,应用程序会发出I/O请求,操作系统将I/O请求转化为相应的IRP数据。不同类型的IRP会传递给不同的派遣函数处理。


2、派遣函数

   驱动中 处理IRP请求的函数。处理完了之后,必须通过IOCompleteRequest结束IRP。这样,发起I/O请求的Win32 API就会返回。


3、RendFile内部操作过程

(1)ReadFile调用ntdll中的NtReadFile,其中ReadFile是Win32 API,而NtReadFile函数是Native API.

(2)ntdll中的NtReadFile进入到内核模式,并调用系统服务中 的NtReadFile函数。

(3)系统服务函数NtReadFile创建IRP_MJ_WRITE类型的IRP,然后将这个IRP发送到驱动程序的派遣函数中。NtReadFile会去等待一个时间,这是当前线程进入等待状态。

(4)在派遣函数中,会将这个IRP结束。这是会设置刚才等待的那个事件。睡眠的线程恢复。

     在读取很大的文件时,ReadFIle不会立即返回,而是等待一段时间。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值