首页
社区
课程
招聘
[求助]请问Irp Dispatch函数的这个现象如何理解
发表于: 2011-5-3 11:00 4439

[求助]请问Irp Dispatch函数的这个现象如何理解

2011-5-3 11:00
4439
比如我有个IRP Dispatch函数如下

NTSTATUS TdiCreateDispatch(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{
    NTSTATUS Status=STATUS_SUCCESS;
     
    KdPrint(("1\n"));
          
   //其他处理
         /....

    KdPrint(("2\n"));  
  
    return Status;
}


上面的代码里面的其他处理 也就一些比较普通的代码,之前我以为这个函数执行后打印出来应该是
1
2
1
2
1
2
类似这样的结果

但是实际上经常打印出
1
1
1
2
1
2
2
2
这样的日志,请问这是怎么回事,莫非是多线程调用?我之前写的一些代码经常出现这样的情况而我代码没预料到这种情况导致蓝屏或者卡住的的,如何解决这个现象?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
那就队列吧……
2011-5-3 11:25
0
雪    币: 107
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
irp不是次序执行的
用队列
插入1 2到队列时  使用到互斥锁之类的  就可以保证次序
再建立线程啥的  从队列中依次取出处理
2011-5-3 16:16
0
雪    币: 34
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
哦 谢谢了  看来要用startio了
2011-5-4 09:15
0
雪    币: 88
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
请教一下,我有点搞混了,IRP是作为一个线程无关调用栈或者是I/O请求容器存在的,无论是I/O请求或者是线程无关调用都是以栈的形式存放IRP的。不知道我的理解对么?那么在执行IRP的时候又是以队列的什么样的顺序呢?
2011-5-5 16:47
0
雪    币: 88
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
对了,补充一下,楼主您的这个问题似乎不是IRP的分发过程,而是IRP在执行过程的使用吧?我有点混乱!
2011-5-5 16:52
0
游客
登录 | 注册 方可回帖
返回
//