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

  • 相关阅读:
    [BZOJ 3270] 博物馆
    [BZOJ 3551] Peaks加强版
    [HNOI 2009] 梦幻布丁
    [NOI 2018] 归程
    [YNOI 2016] 掉进兔子洞
    [SCOI 2014] 方伯伯的玉米田
    Codeforces Round #545 (Div. 2)
    初涉Min-Max容斥【在更】
    【费用流】bzoj1834: [ZJOI2010]network 网络扩容
    【最大权闭合子图】bzoj4873: [Shoi2017]寿司餐厅
  • 原文地址:https://www.cnblogs.com/a-s-m/p/12345949.html
Copyright © 2020-2023  润新知