阅读:1145回复:3
关于pending的初级问题
初学驱动,在看一本名为The.Windows.2000.Device.Driver.Book.A.Guide.for.Programmers的书,其中第7章第2节中的东西非常不能理解
代码如下 NTSTATUS DispatchWrite( IN PDEVICE_OBJECT pDO, IN PIRP pIrp ) { : // Mark the IRP as \"in progress\" IoMarkIrpPending( pIrp ); // Now queue (schedule) the IRP for eventual passage // to the driver\'s Start I/O routine. // Third parameter allows insertion into the queue // other than at the tail // Fourth parameter allows specification of a // Cancel routine IoStartPacket( pDO, pIrp, 0, NULL ); return STATUS_PENDING; } 比如我做一个并口的驱动,我在dispatchwrite中直接写out(...)不行吗?为什么一定要先到startio,然后再到dpc中去?? 我初学驱动,请别笑我 :) |
|
沙发#
发布于:2005-06-17 11:09
因为每个例程运行的IRQL不同,个人认为:在DispatchWrite例程里输出,有时候是可以的,但有时候是不行的,因为它运行在passive_level_irql。
|
|
板凳#
发布于:2005-06-17 11:40
我从网上找来资料说 startio是用来串行irp请求的,也就是说在startio中,所有的irp请求都是串行的,要进行下一个irp的话,必须要调用iostartnextpacket,不知道我说的对不对?
[编辑 - 6/17/05 by LittleCoffee] |
|
地板#
发布于:2005-06-17 13:46
我是这么认为的,我觉得这和你在DispatchWrite中直接进行断口操作没关系啊,这其实也就是一般不直接在Diapatch中进行实际操作的原因:因为系统不只是存在你的IRP。
本人也是初级菜鸟,以上的只是本人自己的观点,如果有不对的地方请高手指点。。 |
|