各位站友:现有个难题我不知道该怎么解决。我用DriverWorks写了一个PCI卡的驱动,运行了很久一段时间都没有问题。现在有个现象难以解释。驱动程序中有3个端口写函数,都是通过DeviceIoControl来完成的,其中一个端口用的非常频繁,基本上每20毫秒写一次。应用程序单线...
全文
回复(17) 2004-01-05 23:00 来自版块 - 内核编程
表情
hapi不是,指的应用程序发起的DeviceIoControl函数 (2004-01-13 21:52)
wxl_50685330你指的是在驱动的IOCTRL的处理例程里面的动作?(2004-01-13 21:36)
hapi同步的IOCTRL:DeviceIoControl函数执行后要等待驱动相应的IoCtrl函数执行完毕后才可以返回。异步IOCTRL:DeviceIoControl函数执行后,不管驱动的IoCtrl有没有返回,都直接返回Pending。(2004-01-13 08:30)
wxl_50685330我提一个问题,你说的DEVICEIOCONTROL同步异步分别指的是什么?(2004-01-09 20:56)
hapi当DeviceIoControl用同步的时候,我用DriverMonitor看我的驱动trace的信息,没有进入IOCTRL执行函数,上层DeviceIoControl也没有返回。IOCTRL函数中对IRP都是Complete的。我猜测是根本没有发IRP到驱动。因为结束应用程序后...(2004-01-09 12:14)
wxl_50685330你说IRP没有发到驱动,你怎么判断出来的?如果下层不IOCOMPLETEREQUEST的话DEVICEIOCONTROL确实是阻塞的,即使你的OVERLAPPED给的是NULL,你看看下层执行情况,为什么没有返回到上层。 (2004-01-09 11:34)
hapi我现在将DeviceIoControl改成异步之后,程序就不死了,请问这是什么问题?不得其解。(2004-01-09 11:29)
AthlonXP你试试将请求发下去后直接完成irp返回,也就是不读写端口。如果还死那就是应用程序的原因了,反之就是驱动。不过应用程序的可能性大些,比如同步,多线程的同步马虎不得(2004-01-09 09:01)
hapi我的IOCTRL是去写端口的,这个端口操作非常频繁。有可能总线会太忙,但是DeviceIoControl函数都没有返回,驱动也没有接收到相应的IRP。应用程序死在执行DeviceIoControl这个函数上。这样应该怎么解决?(2004-01-08 14:58)
wxl_50685330你发下去的IOCTL是什么命令?通知设备读端口数据?看看是不是总线太忙导致请求不能及时同步返回(2004-01-07 19:23)

返回顶部