阅读:2461回复:8
如何解决ioctl处理时间过长的问题?
我在本端pc的驱动中,响应一个ioctl,该ioctl是要读取远端设备的某些数据。而该数据从远端设备传至本机,需要一定的时间,估计会超过系统允许一个dispatch运行的最长时间。那么我该怎么做?
谢谢! |
|
最新喜欢:kxgchi... |
沙发#
发布于:2002-08-23 10:54
把他pending,返回,等数据来再继续处理。
|
|
板凳#
发布于:2002-08-23 11:52
恩。。。又是阿舍兔大侠哈~
我就是对 STUTUS_PENDING 的理解不透彻。以下是我的想法, 不知道对不对? ?在dispatch中, 先使用IoMarkIrpPending标记该IRP为等待, 设置CancelRoutine, 创建一系统线程,用来等待数据, 返回STUTUS_PENDING。 ?在以上创建的系统线程中,等待数据到来, 清除irp的等待标记, 设置irp的各个域, 返回STATUS_SUCCESS。 不知道我这个做法有什么问题吗?其中,是不是一定要设置 irp的等待标记? 再次感谢! :D |
|
地板#
发布于:2002-08-23 12:12
恩。。。又是阿舍兔大侠哈~ ?在以上创建的系统线程中,等待数据到来, : 清除:设置CancelRoutine。 设置irp的各个域, IoCompleteRequest(Irp, IO_NO_INCREMENT); 返回STATUS_SUCCESS。 就可! :) |
|
|
地下室#
发布于:2002-08-23 13:31
要设置pending的
|
|
5楼#
发布于:2002-08-23 14:16
IoCompleteRequest(Irp, IO_NO_INCREMENT); 谢谢提醒!我是把IoCompleteRequest漏写了。 多谢各位出手,我已经清楚了,现在发报酬了哈 |
|
6楼#
发布于:2002-08-23 14:23
为什么是“又”呢?
|
|
7楼#
发布于:2002-08-23 14:28
看你在论坛上很活跃,前几天还回过我的帖子,高手挖!
今天又看到这个id,觉得很熟悉塞! 我刚入门驱动,还忘多多关照哈 |
|
8楼#
发布于:2002-08-23 14:51
where where :D
比较会蹭分罢了。 :D :D |
|