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

  • 相关阅读:
    屏蔽右键
    无法解析类型 java.lang.Object。从必需的 .class 文件间接引用了它
    屏蔽右键
    Servlet的三个基本方法
    应用HttpClient来对付各种顽固的WEB服务器 摘抄
    Apache xmlrpc
    利用缓存机制快速读取XML文件数据
    JDBC连接MySQL
    HttpClient入门
    5款主流NoSQL数据库全方位横评
  • 原文地址:https://www.cnblogs.com/a-s-m/p/12345949.html
Copyright © 2011-2022 走看看