阅读:1323回复:5
驱动程序的常见问题
应用程序通过调用ReadFile来读数据,而在驱动程序里不定马上就有数据,需要等待硬件产生,我想在DispatchRead中把当前的线程挂起,当中断来时再处发它,然后返回给应用程序。该怎么做?哪位大侠能够帮帮忙。
|
|
沙发#
发布于:2004-06-24 11:04
我觉得可以让read历程和中断历程共一块数据。
这样就不需要触发机制了。read有数据就返回数据, 否则就返回空。效率也高一些。不会阻塞用户线程。 |
|
板凳#
发布于:2004-06-24 14:05
这样做可能导致应用程序要一直在读数据,从而CPU占有率升高
|
|
地板#
发布于:2004-06-24 15:34
应用程序通过调用ReadFile来读数据,而在驱动程序里不定马上就有数据,需要等待硬件产生,我想在DispatchRead中把当前的线程挂起,当中断来时再处发它,然后返回给应用程序。该怎么做?哪位大侠能够帮帮忙。 可以使用队列来实现。 1. 收到IRP后,IoMarkIrpPending 2. 然后IoStartPacket 3. 返回STATUS_PENDING 4. 在StartIO例程里面处理IRP。 5. 处理完程IRP后,调用IoStartNextPacket,处理下一个IRP。 另外,你可以在自己定制队列。具体做法,找本书看看吧。 |
|
|
地下室#
发布于:2004-06-24 16:00
StartIO例程只能起同步作用。
实际上,irp被startio例程处理时,还是有可能读不到数据。 |
|
5楼#
发布于:2004-06-24 16:42
StartIO例程只能起同步作用。 他的驱动不是需要等待硬件产生中断吗?在DPC里面完成这个IRP就行。如果不需要启动硬件读数据(比如DMA),StartIo就没有什么用。 |
|
|