libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:901回复:6

大家来看看

楼主#
更多 发布于:2003-04-25 09:29
用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的分发例程。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-25 20:55
为什么没人来回答?很难吗?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-26 16:37
怎么没人来回答 ??为什么啊?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-26 19:13

 
HANDLE hThread=CreateThread(NULL,0,xiancheng,NULL,0,&nwrite);
函数确不能执行


什么意思
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-26 21:08

 [quote] HANDLE hThread=CreateThread(NULL,0,xiancheng,NULL,0,&nwrite);
函数确不能执行


什么意思 [/quote]
这个函数没执行,应用程序就退出了!
也就是它没有响应中断事件的发生!
大哥给解释一下!
小弟谢谢了!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-27 10:19
[quote]
 [quote] HANDLE hThread=CreateThread(NULL,0,xiancheng,NULL,0,&nwrite);
函数确不能执行


什么意思 [/quote]
这个函数没执行,应用程序就退出了!
也就是它没有响应中断事件的发生!
大哥给解释一下!
小弟谢谢了! [/quote]

你跟踪过吗,怎么确定它没有执行,如果程序在它之前退出,那么是在什么地方退出的。

相应中断事件是线程中的WaitForSingleObject(hEvent,INFINITE);
你可以在线程中设断点,看线程是否创建并执行

[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-04-27 10:29
谢谢楼上大哥的回答,我是用SOFTICE中的命令genint 命令来来产生 一个硬件的中断。但在我执行该命令前,我的应用程序就退出了,也就是我创建的线程,并没有等待我的中断的到来!

我是参考《Windows 设备驱动程序(VxD与WDM)开发务实》这本书的例子做的,没有改动,书上是WDM模型的,我是做成NT模型了,书上的例子能正常通过,我的怎么不正常通过?

另一个问题是:怎么在线程中设置断点!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
游客

返回顶部