Windows驱动开发-IoCompleteRequest
IoCompleteRequest 例程表示调用者的已经完成了对指定I/O请求的所有处理操作,并且向I/O管理器返回指定的IRP报文。
//函数原型 VOID IoCompleteRequest( IN PIRP Irp, IN CCHAR PriorityBoost );
Irp 指向将要完成的IRP报文数据结构。
PriorityBoost 代表线程恢复时的优先级别。
关于优先级的概念,与文件I/O相关的win32API的内部执行过程,大体是这样的,以ReadFile为例
1,ReadFile调用ntdll中的NtReadFile,其中ReadFile是win32的API,NtReadFile是Native API 2,ntdll中的NtReadFile进入到内核模式,并调用系统服务中的NtReadFile, 3,系统服务中的NtReadFile创建IRP_MJ_READ类型的IRP,然后它将这个IRP发送到某个驱动程序中的派遣函数中,NtReadFile然后去等待一个事件,
这时,当前线程进入睡眠状态,也可以说当前线程被阻塞或线程处于Pending状态, 4,在派遣函数中,一般会将IRP请求结束,结束IRP是通过IoCompleteRequest函数,在IoCompleteRequest函数内部会设置,刚才的等待事件,睡眠的线程被恢复运行
IoCompleteRequest函数中第二个参数PriorityBoost代表一种优先级,指的是被阻塞的线程以何种优先级恢复运行,一般形况下,优先级设置为IO_NO_INCREMENT,
对某些特殊情况,需要将阻塞的线程以“优先”的身份恢复运行,如鼠标,键盘等设备输入,他们需要更快的反应