LittleCoffee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-22
  • 最后登录2007-10-03
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1145回复:3

关于pending的初级问题

楼主#
更多 发布于:2005-06-17 10:57
初学驱动,在看一本名为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中去??

我初学驱动,请别笑我 :)
modernhill
驱动小牛
驱动小牛
  • 注册日期2004-05-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望278点
  • 贡献值0点
  • 好评度172点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-06-17 11:09
因为每个例程运行的IRQL不同,个人认为:在DispatchWrite例程里输出,有时候是可以的,但有时候是不行的,因为它运行在passive_level_irql。
LittleCoffee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-22
  • 最后登录2007-10-03
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-17 11:40
我从网上找来资料说 startio是用来串行irp请求的,也就是说在startio中,所有的irp请求都是串行的,要进行下一个irp的话,必须要调用iostartnextpacket,不知道我说的对不对?

[编辑 -  6/17/05 by  LittleCoffee]
modernhill
驱动小牛
驱动小牛
  • 注册日期2004-05-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望278点
  • 贡献值0点
  • 好评度172点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-17 13:46
我是这么认为的,我觉得这和你在DispatchWrite中直接进行断口操作没关系啊,这其实也就是一般不直接在Diapatch中进行实际操作的原因:因为系统不只是存在你的IRP。
本人也是初级菜鸟,以上的只是本人自己的观点,如果有不对的地方请高手指点。。
游客

返回顶部