阅读:901回复:6
大家来看看
用DS写驱动,处理中断读写,采用事件机制:
1,在APP中CreateEvent 2,DeviceIoControl传给Drive 3,APP中WaitforsingleObject 4,Drive里Dpc_ForIsr中:m_pEvent->Set();(m_pEvent是类KEvent的对象) 我的问题是: DeviceIoControl( hDevice, SY_IOCTL_EVENT1, &hEvent, sizeof(hEvent), NULL, 0, &nwrite, NULL); 发送事件消息正常,但接下来 HANDLE hThread=CreateThread(NULL,0,xiancheng,NULL,0,&nwrite); 函数确不能执行,其中: DWORD WINAPI xiancheng(LPVOID hEvent) { while(TRUE) { WaitForSingleObject(hEvent,INFINITE); puts(\"Event happened\"); Test_SY_IOCTL_CODE(); } return 0; } 应用程序不能等待中断的到来自动结束,驱动调用CleanUp和Close的分发例程,有什么办法使, 在应用程序结束的时候不调用CleanUp和Close的分发例程。 |
|
|
沙发#
发布于:2003-04-25 20:55
为什么没人来回答?很难吗?
|
|
|
板凳#
发布于:2003-04-26 16:37
怎么没人来回答 ??为什么啊?
|
|
|
地板#
发布于:2003-04-26 19:13
HANDLE hThread=CreateThread(NULL,0,xiancheng,NULL,0,&nwrite); 什么意思 |
|
|
地下室#
发布于:2003-04-26 21:08
什么意思 [/quote] 这个函数没执行,应用程序就退出了! 也就是它没有响应中断事件的发生! 大哥给解释一下! 小弟谢谢了! |
|
|
5楼#
发布于:2003-04-27 10:19
[quote] 什么意思 [/quote] 这个函数没执行,应用程序就退出了! 也就是它没有响应中断事件的发生! 大哥给解释一下! 小弟谢谢了! [/quote] 你跟踪过吗,怎么确定它没有执行,如果程序在它之前退出,那么是在什么地方退出的。 相应中断事件是线程中的WaitForSingleObject(hEvent,INFINITE); 你可以在线程中设断点,看线程是否创建并执行 |
|
|
6楼#
发布于:2003-04-27 10:29
谢谢楼上大哥的回答,我是用SOFTICE中的命令genint 命令来来产生 一个硬件的中断。但在我执行该命令前,我的应用程序就退出了,也就是我创建的线程,并没有等待我的中断的到来!
我是参考《Windows 设备驱动程序(VxD与WDM)开发务实》这本书的例子做的,没有改动,书上是WDM模型的,我是做成NT模型了,书上的例子能正常通过,我的怎么不正常通过? 另一个问题是:怎么在线程中设置断点! |
|
|