Ice@P
驱动牛犊
驱动牛犊
  • 注册日期2002-12-09
  • 最后登录2003-10-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1217回复:3

两个驱动之间irp的传递问题,(自己build的irp完成不了)

楼主#
更多 发布于:2003-07-14 18:31
两个驱动:过滤驱动(DDK写的),pci驱动(DS写的)

过滤驱动发irp给pci驱动,pci驱动接到irp排入队列,等待pci卡的中断,pci卡中断一到在pci驱动DpcForIsr里面完成irp。

问题是这样的,pci驱动接到中断在DpcForIsr里面完成irp后,过滤驱动就在KeWaitForSingleObject不动了,
过滤驱动发irp给pci驱动的代码如下:
KeInitializeEvent(&event,NotificationEvent,FALSE);

nirp=IoBuildDeviceIoControlRequest(CRYPTPCI_IOCTL_803,
PCI_DO,
inbuffer,
inlength,
outbuffer,
outlength,
TRUE,
&event,
&iostatusblock);
if(nirp)
{
   ntStatus=IoCallDriver(PCI_DO,nirp);
   if( ntStatus == STATUS_PENDING )
   {  
//
//wait for the Irp to Complete
//
ntStatus = KeWaitForSingleObject (&event, Suspended, KernelMode, FALSE, NULL);
   }
}
pci驱动 DpcForIsr完成irp的代码是

I.Status() = STATUS_SUCCESS;
I.Information() = outlength;
PnpNextIrp(I);

[编辑 -  7/14/03 by  Ice@P]

最新喜欢:

dregsdregs
认认真真过一生
gjltce
驱动小牛
驱动小牛
  • 注册日期2003-07-05
  • 最后登录2011-12-10
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望59点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-19 09:29
要用到回调例程。
raul.wang
驱动小牛
驱动小牛
  • 注册日期2002-07-30
  • 最后登录2004-11-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-17 14:48
使用IoAllocateIrp,IoAllocateMdl,然后IoCallDriver。
同饮一壶酒
Ice@P
驱动牛犊
驱动牛犊
  • 注册日期2002-12-09
  • 最后登录2003-10-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-15 19:16
问题找到了,
IoBuildDeviceIoControlRequest必须运行在PASSIVE_LEVEL级上,
而我的环境运行在<=DISPATCH_LEVEL级上,

现在是我应该怎么改?

我希望能够实现:
过滤驱动将一个irp分成数个irp,这些irp发数据给pci驱动,同时将处理完的数据拿回?用IoBuildDeviceIoControlRequest好像是不行了,应该怎么实现?
认认真真过一生
游客

返回顶部