专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 驱动开发

Cancel自旋锁 起了什么作用?该怎么处理

发布时间:2010-06-14 17:46:01 文章来源:www.iduyao.cn 采编人员:星星草
Cancel自旋锁 起了什么作用?
发现IoCancelIrp 函数中

获取了Cancel自旋锁
设置了Irp->Cancel
调用了OnCancelIo函数
但是进入了OnCancelIo函数后 立刻就释放了

还有 像

if(Irp!=DeviceObject->Current||Irp->Cancel)
{
IoReleaseCancelSpinlock(oldirql);
return;
}
else
{IoSetCancelRoutine(Irp,NULL); ①
IoReleaseCancelSpinlock(oldirql); 
}


就为了设置或判断一下Irp->Cancel ?? 

另外上面的 ①处 这段代码来自windows驱动开发技术详解 
这里的注释是 正在被startIo处理的IRP不允许调用取消例程 所以把取消例程设为null

这太奇怪了  
难道我不能取消一个很耗时的异步读取IRP ?? 比如 一个很大的硬盘复制操作 这怎可能

------解决方案--------------------
正在执行的IRP是不能被取消的,只能干等着,因为操作系统不知道在哪里处理IO,所以长时间的请求会分割成n个IRP分段来处理。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: