zoukankan      html  css  js  c++  java
  • 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,
    对某些特殊情况,需要将阻塞的线程以“优先”的身份恢复运行,如鼠标,键盘等设备输入,他们需要更快的反应

  • 相关阅读:
    树莓派常用Linux命令
    列出树莓派中系统中建立了哪些用户、哪些组?
    树莓派的用户管理
    树莓派变成一个Web服务器: nginx + php + sqlite
    树莓派做web服务器(nginx、Apache)
    树莓派修改更新源
    树莓派安装mysql
    树莓派2 购买心得
    python写的屏保程序
    win32下利用python操作printer
  • 原文地址:https://www.cnblogs.com/a-s-m/p/12345949.html
Copyright © 2011-2022 走看看