eric.hee
驱动牛犊
驱动牛犊
  • 注册日期2002-05-21
  • 最后登录2002-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1021回复:0

关于IoSetCompletionRoutine的问题!

楼主#
更多 发布于:2002-05-23 17:44
小弟想做一个包过滤程序,
过滤函数如下:

NTSTATUS Pass( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp )
{
  DbgPrint(\"get Package!!!\\n\");
  
  PIO_STACK_LOCATION          pIrpStack;
    
  pIrpStack = IoGetCurrentIrpStackLocation( Irp );
  IoCopyCurrentIrpStackLocationToNext(Irp);
  
  IoSetCompletionRoutine( Irp,
                          GenericCompletion,
                          0,
                          TRUE,
                     TRUE,
                     TRUE
                   );
  
  
  return IoCallDriver( m_TcpgetDevice, Irp);
  
}

NTSTATUS GenericCompletion( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context )
{
  if(Irp->PendingReturned)
  {
    IoMarkIrpPending(Irp);
  }

  return STATUS_SUCCESS;
}

但是发现一个问题,第一次调用IoSetCompletionRoutine没有问题,
当接到第二个irp时,再调用IoSetCompletionRoutine,就会蓝屏,
希望有经验的大虾多指教!
谢谢!
游客

返回顶部