阅读:2778回复:16
IoCallDriver的返回值?
IoCallDriver的返回值总是pending,能是什么原因?我晕菜了好几天了。帮忙
[编辑 - 11/26/01 作者: KungFu] |
|
最新喜欢:jmzz00...
|
沙发#
发布于:2000-01-11 04:00
returned STATUS_PENDING just means the lower driver quued your IRP and will handle it after a while.
what you should do is waiting there in your code by using KeWaitForSingleObject =================================== My English is poor, but my system is English-version, I can\'t input Chinese, so forgive me. =================================== |
|
|
板凳#
发布于:2001-11-22 20:45
IoCallDriver的返回值总是pending,能是什么原因?我晕菜了好几天了。帮忙 你在什么情况下得到的这个值,说清楚。 一般来讲,用SOFTICE跟踪,使得不到这个值的! |
|
地板#
发布于:2001-11-23 08:40
我恰恰是在softice中得到的,我只是简单的将IRP转到LOW_LEVEL DEVICE而已,但是,总是PENDING,晕!
|
|
|
地下室#
发布于:2001-11-23 16:18
我恰恰是在softice中得到的,我只是简单的将IRP转到LOW_LEVEL DEVICE而已,但是,总是PENDING,晕! what kind of return code are you expecting? Some lower-level driver return STATUS_PENDING simply in its dispatch routine, and defer the processing. |
|
|
5楼#
发布于:2001-11-24 11:18
得到pending很正常呀!
你要在IoCallDriver之前设置一事件为非信号状态然后在IcCallDriver之后,如是Pending就等候此事件。 |
|
6楼#
发布于:2001-11-26 08:51
多谢几位了!
我只是简单的将IRP转到LOW_LEVEL DEVICE,如果status是pending,岂不是,我的LOW_LEVEL DEVICE没有收到或者是处理完数据??? |
|
|
7楼#
发布于:2001-11-26 15:15
returned STATUS_PENDING just means the lower driver quued your IRP and will handle it after a while. Thank you,sir! I called KeWaitForSingleObject after calling IoCallDriver,but我等到花儿都谢了,结果--还是在等。 能是什么原因让我等的这么久? |
|
|
8楼#
发布于:2001-11-26 15:29
只能说是硬件有问题。或者你在调用前设置得参数有问题。如果,lower driver是由你自己写的话,那它也可能有问题,你发段代码来好吗?
yuan3rd@21cn.com |
|
|
9楼#
发布于:2001-11-26 15:30
只能说是硬件有问题。或者你在调用前设置得参数有问题。如果,lower driver是由你自己写的话,那它也可能有问题,你发段代码来好吗?
yuan3rd@21cn.com |
|
|
10楼#
发布于:2001-11-26 15:45
只能说是硬件有问题。或者你在调用前设置得参数有问题。如果,lower driver是由你自己写的话,那它也可能有问题,你发段代码来好吗? 我的low device是serial port driver与我有关系吗? 也就是我建立一个Irp发到了serial port,但是一调用KeWaitForSingleObject就跳出softice,并且程序停止。 |
|
|
11楼#
发布于:2001-11-26 16:28
我一点不明白了,你用了IoBuildDeviceIoControlRequest 生成了一个irp,那有为什么在后面使用
IrpNextStack->MajorFunction = IRP_MJ_WRITE; IrpNextStack->Parameters.Write.Length = RequestBufferLength; IrpNextStack->Parameters.Write.ByteOffset.QuadPart = 0; 你把这两句去掉先,再试一下。 |
|
|
12楼#
发布于:2001-11-26 16:45
去掉了,结果是iocalldriver的返回值是:STATUS_INVALID_PARAMETER,意思是:An invalid parameter was passed to a service or function.
|
|
|
13楼#
发布于:2001-11-26 16:55
lower driver是谁写的?如果是系统提供的,ControlCode又是什么,是定义好的嘛?
|
|
|
14楼#
发布于:2001-11-27 08:16
low driver是系统自己的,controlcode是我自己定义的。
|
|
|
15楼#
发布于:2001-11-27 09:12
你向下层驱动发送的IoControlCode也应该是下层驱动自己的,否则会出现STATUS_INVALID_PARAMETER,如果要向下层驱动发送IRP_MJ_WRITE,你应该调用IoBuildSynchronousFsdRequest。
关于使用串口的例子,你可以参考2kddk的mouser,里面讲的特详细! 祝好运! |
|
16楼#
发布于:2001-11-27 09:21
你向下层驱动发送的IoControlCode也应该是下层驱动自己的,否则会出现STATUS_INVALID_PARAMETER,如果要向下层驱动发送IRP_MJ_WRITE,你应该调用IoBuildSynchronousFsdRequest。 多谢老兄了! |
|
|