archim
驱动牛犊
驱动牛犊
  • 注册日期2001-08-18
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:3653回复:2

IoSetCancelRoutine

楼主#
更多 发布于:2001-11-12 15:07
看一个WDM的驱动源程序时发现在多处地方使用IoSetCancelRoutine(Irp, NULL)的调用,偶很是不解。既然将Cancel例程设置为NULL,那不是相当于没有cancel例程吗??那为什么还要这样设置??这样做还有什么别的用意吗??
archim
KDriver
驱动中牛
驱动中牛
  • 注册日期2001-06-09
  • 最后登录2008-09-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-11-12 15:41
那时因为本来是可能有CancelRoutine的,这里把CancelRoutine去掉
“萎软”,是Microsoft的小名!
jeosph
驱动中牛
驱动中牛
  • 注册日期2001-04-19
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-11-22 20:40
看一个WDM的驱动源程序时发现在多处地方使用IoSetCancelRoutine(Irp, NULL)的调用,偶很是不解。既然将Cancel例程设置为NULL,那不是相当于没有cancel例程吗??那为什么还要这样设置??这样做还有什么别的用意吗??


这样做的目的在于,一旦你的IRP进入处理过程,取消历程就不应该再来打搅这个IRP.  尤其对于多CPU更是要注意,单CPU这个问题不是很突出,但考虑到有中断会打断你的工作,所以人要求IoSetCancelRoutine(Irp, NULL),


你的IOSTARTIO一开始的工作就可以是这个,当然这只是多种选择的 一种,我个人认为,对于单CPU这种方法最简单

游客

返回顶部