阅读:1176回复:2
请教一个IRP处理的问题
小弟的PCI驱动当中,必须要在应用程序级等待中断,在发起read和write操作,因此read和write的IRP和中断没有关系。但是为了不丢中断,我想另外管理一个IRP队列,并用IO_CTL的方式来实现中断等待功能,采用的是通常所用的在应用程序第一次访问设备是一次性先发32各IO_CTL的IRP到队列中,以后没完成一个就补充一个的方法。我想请各位大虾指点一下,我下面的方法是否可行:(1)
对于read和write RIP,在StartIO中启动一个函数来完成read或Write的工作,并且完成这些IRP。(2)对于我用于实现中断等待的IO_CTL IRP,我在相应的派遣函数中将他们派遣到我自己管理的队列中,并在ISR中从我自己管理的IRP队列中出队一个IRP,并完成它。也就是说这些IRP没有经过StartIO的处理。 |
|
沙发#
发布于:2004-09-26 16:02
应该可以,但如果你只是为了保证对所有中断数据处理不丢失,你完全可以使用更简单的方式处理,队列所有数据,然后在通知app处理
|
|
|
板凳#
发布于:2004-09-28 00:29
可以使用操作系统的irp排队功能,也可以自己写一个队列,
一定要记住对已经排队的irp调用IoMarkIrpPending, surpise remove 或remove时,调用iocancelirp |
|