阅读:2012回复:7
怎样将设备产生的中断经由驱动程序传递到客户程序?
在设备产生中断的时候,怎样在DpcForIsr中通知客户程序设备已经产生了中断?Under Windows2000 WDM。知道的一定说一声!谢谢!
|
|
最新喜欢:hapi |
沙发#
发布于:2001-08-30 10:31
如果你在应用程序中使用同步I/O来读写设备时,当你的程序发出读写请求时你的应用程序是被阻塞的,直到你的设备驱动程序调用IoCompleteRequest()完成该读写请求。所以你只要在DpcForIsr中调用IoCompleteRequest()便可。
|
|
|
板凳#
发布于:2001-08-30 10:43
这个我明白,可是我不能被阻塞啊,发完第一个WriteFile之后我马上要准备第二帧数据,不然就来不及了,速度要求很高。我想得到一种驱动程序到应用程序的通讯机制,比如发个Event什么的,但所有书上好像都没提这事,能帮帮我吗?我正在失恋,实在没有力气去啃大部头的DDK Help啊!谢谢了
|
|
地板#
发布于:2001-08-30 11:31
可以使用EVENT机制
现在DriverEntry中初始化一个EVENT对象,例如: UNICODE_STRING eventName ; RtlInitUnicodeString (&eventName, L"\\BaseNamedObjects\\XXXXReadEvent") ; extension->NotifyEvent = IoCreateSynchronizationEvent(&eventName, &extension->NotifyEventHandle) ; if (!extension->NotifyEvent) { status = STATUS_UNSUCCESSFUL; goto done_DriverEntry; } KeClearEvent (extension->NotifyEvent) ; 在需要的地方发出通知事件: KeSetEvent(extension->NotifyEvent,0,FALSE); 在应用程序中用OpenEvent打开一个与XXXXReadEvent同名的EVENT句柄,再用WaitForSingleObject等待该EVENT即可 |
|
地下室#
发布于:2001-08-30 11:35
那用异步I/O吧,开30个缓冲区,然后从应用连发30 I/O请求,再用WaitForMultipleObject()等待。专栏里有篇文章《nt/2000pci设备驱动程序详解》还有些代码可以参考一下,不过我在NT4.0下用有点问题,主要是在WaitForMultipleObject()前要先判断一下ReadFile出错代码是否为ERROR_IO_PENDING,如果是再用调用WaitForMultipleObject()。
|
|
|
5楼#
发布于:2001-08-30 15:55
太谢谢了!以后我要是有儿子了,我让他管你们也叫爹!
|
|
6楼#
发布于:2001-08-30 16:07
也别光说不做,先给点分润一润手吗!
|
|
|
7楼#
发布于:2001-08-30 16:32
不是不给,关键是我不想结贴啊,明天吧,明天我就知道能不能调出来了,好吗?
|
|