阅读:1215回复:3
两个驱动之间irp的传递问题,(自己build的irp完成不了)
两个驱动:过滤驱动(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] |
|
最新喜欢:![]()
|
沙发#
发布于:2003-07-15 19:16
问题找到了,
IoBuildDeviceIoControlRequest必须运行在PASSIVE_LEVEL级上, 而我的环境运行在<=DISPATCH_LEVEL级上, 现在是我应该怎么改? 我希望能够实现: 过滤驱动将一个irp分成数个irp,这些irp发数据给pci驱动,同时将处理完的数据拿回?用IoBuildDeviceIoControlRequest好像是不行了,应该怎么实现? |
|
|
板凳#
发布于:2003-07-17 14:48
使用IoAllocateIrp,IoAllocateMdl,然后IoCallDriver。
|
|
|
地板#
发布于:2003-07-19 09:29
要用到回调例程。
|
|