新手关于IoMarkIrpPending作用的疑问,望达人解惑
我想问下几个问题
1. & 异步Irp是不是无论PendingReturnd设置与否,驱动的完成例程都是在APC里调用的?
2. & 同步Irp的完成例程是不是根据PendingReturned来判断需不需要APC?
3. & PendingReturned和IoMarkIrpPending是不是为了优化同步Irp的完成效率,也就是在有些时候避免APC而存在的? --------------------------------------------------------------1. 排队一个APC是相对昂贵的。设想一下,不是直接返回STATUS_PENDING,而是派遣例程自己调用IoCompleteRequest并返回某个其它状态。在这种情况下,IoCompleteRequest的调用者将与IoCallDriver的调用者处于同一个线程上下文中。因此就没有必要排队一个APC。另外,甚至没有必要调用KeSetEvent,因为如果I/O管理器没有得到派遣例程返回的STATUS_PENDING,它就不用等待某个事件。如果IoCompleteRequest恰好知道发生的这种情况,它将优化这个处理以避免调用APC。这就是IoMarkIrpPending的来处。
2.IoCompleteRequest查看PendingReturned标志。如果该标志设置,并且如果IRP是那种可以以异步方式完成的IRP,那么IoCompleteRequest将简单地返回其调用者并不排队APC。它假定自己运行在IRP发起者的线程上下文中,并且派遣例程很快会返回一个非未决状态的给请求发起者。
3.调用IoMarkIrpPending然后同步完成IRP是正确的,效率会低一点。这样做的结果是IoCompleteRequest将排队APC,这个APC将改变事件的状态,但没有任何线程在这个事件上等待(其目的是使在调用KeSetEvent前保证这个事件存在)。这会降低一些效率,但不会有什么害处。查看: 621|回复: 3
最后登录注册时间阅读权限10精华0帖子
QQ小野人, 积分 7, 距离下一级还需 43 积分
性别男幸福币0 经验6 帖子
&&昨天开始 我的电脑不知道为什么玩不了猎鱼达人3D了。 进了游戏大厅,每次点击猎鱼达人3D进入游戏,弹出来的游戏框全是马赛克,是不是这个游戏缺失了什么文件才左右呢? 要怎么样解决??求***人员帮助
最后登录QQ注册时间阅读权限10精华0帖子
QQ小野人, 积分 32, 距离下一级还需 18 积分
性别男幸福币0 经验27 帖子
我的也是 从昨天早晨开始到现在进不了游戏
最后登录QQ注册时间阅读权限10精华0帖子
QQ小野人, 积分 32, 距离下一级还需 18 积分
性别男幸福币0 经验27 帖子
笑饮***(黑色 发表于
我的也是 从昨天早晨开始到现在进不了游戏
我的在QQ游戏大厅里的3D捕鱼达人 能进入游戏 但是我玩的的 QQ游戏平台里的&&我点击QQ游戏平台里的3D捕鱼达人 游戏没反应怎么会事&&我在游戏平台里的充值了&&在QQ游戏里的没有充值&&反正现在进不了游戏 都两天了!
最后登录注册时间阅读权限10精华0帖子
QQ小野人, 积分 6, 距离下一级还需 44 积分
性别男幸福币0 经验5 帖子
我也是一样&&QQ平台所以游戏都能玩&&就猎鱼达人玩不了&&之前我的也是W7系统&&都能玩 怎么突然之间玩不了了&&已经4天了 还没解决
Powered by