aasa2
驱动中牛
驱动中牛
  • 注册日期2004-04-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分525分
  • 威望339点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
阅读:979回复:4

为什么完成例程没有执行?

楼主#
更多 发布于:2004-12-16 17:55
我下面代码中,pBuffer并没有拷贝到tempBuf。
不知道为什么?

是不是完成例程有错误呀?或者完成例程根本没有被调用?

大家帮我看一看。
case IRP_MJ_READ:
.....
IoCopyCurrentIrpStackLocationToNext(Irp);
IoSetCompletionRoutine( Irp, DoneSomething, NULL, FALSE, FALSE, FALSE );
return IoCallDriver( hookExt->FileSystem , Irp );
break;

//完成例程函数
DoneSomething(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
{
...
tempBuf = ExAllocatePool(NonPagedPool , Len);
RtlCopyMemory(tempBuf, pBuffer, Len);
if( Irp->PendingReturned ) {
       IoMarkIrpPending( Irp );
}
return STATUS_SUCCESS;
}
技术交流:aasa2@21cn.com QQ群:10863699
aasa2
驱动中牛
驱动中牛
  • 注册日期2004-04-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分525分
  • 威望339点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-16 18:20
似乎完成例程没有执行!

我的情况是这样的。
文件过滤驱动,在读一个文件是产生irp_mj_read.
读完的时候,我想 应该调用我的DoneSomething()。
但是好像没有调用DoneSomething()。

这是为什么呀?
技术交流:aasa2@21cn.com QQ群:10863699
xiaorain
驱动牛犊
驱动牛犊
  • 注册日期2003-04-21
  • 最后登录2005-11-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-16 21:09
你的IoSetCompletionRoutine()z中的后三个参数错了,全部改成TRUE就可以了,这三个参数如果是true,分别代表下层成功完成irp,失败完成irp和cancel IRp的情况下都调用完成历程。
看一下ddk。
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-16 21:16
你的IoSetCompletionRoutine()z中的后三个参数错了,全部改成TRUE就可以了,这三个参数如果是true,分别代表下层成功完成irp,失败完成irp和cancel IRp的情况下都调用完成历程。
看一下ddk。
 

说得很清楚
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
aasa2
驱动中牛
驱动中牛
  • 注册日期2004-04-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分525分
  • 威望339点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-16 21:26
看来我应该对看一看DDK了。
谢谢,我明天试一下。
技术交流:aasa2@21cn.com QQ群:10863699
游客

返回顶部