chrys
驱动小牛
驱动小牛
  • 注册日期2002-05-30
  • 最后登录2008-07-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1353回复:9

多线程的应用程序不能和驱动通信了,怎么办?

楼主#
更多 发布于:2002-07-24 17:52
大家好:
    我今天可是苦了整整一天了,驱动做完后在单线程中能正常使用,但改成多线程就不再能正常使用了。代码如下(简化)
void Test()
{
    HANDLE hwnd = CreateFile( ... );   //(1)
    BOOL bRet = WriteFile(hwnd,...);   //(2)
    bRet = DeviceIoControl(hwnd,...);  //(3)
}
在单线程(主线程)中调用Test()函数时,以上(1)~(3)语句都能正常执行,驱动程序也做了预期的事情。
当我改成多线程后,在工作者线程中调用Test()函数时,问题出来了,第(1)句执行正常,设备打开成功;第(2)句执行失败,返回bRet = FALSE,驱动程序也没有收到WriteFile()时的Irp;有意思的是第(3)句居然执行正常,所有第(3)句中的操作都能进行。
在任何情况下,只要将Test()函数放到主线程中调用就一切正常了,请问这是怎么回事,请大侠帮我诊断诊断,我快急死了,今天搞了一整天都不能找到解决办法。
先谢谢你!


天才来自勤奋 知识要靠学习 [url= http://ndxz.126.com]――欢迎来我家做客――[/url]
QJE
QJE
驱动小牛
驱动小牛
  • 注册日期2001-08-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分470分
  • 威望49点
  • 贡献值0点
  • 好评度44点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-25 10:15
如果WriteFile不能用的话,那就不用好了,我反正把应用程序对驱动程序的通信都写在DeviceIoControl里,没出什么问题。
shaht
驱动牛犊
驱动牛犊
  • 注册日期2001-09-14
  • 最后登录2003-12-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-25 13:59
WriteFile可能要用Overlap,DeviceIo没问题,
zhangxi
驱动牛犊
驱动牛犊
  • 注册日期2003-02-25
  • 最后登录2003-06-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-20 23:15
建一个总线程,在把读写建立一个线程,之后在总线程内调用,不知可行否?对不起啊,我是个菜鸟!
mailme
驱动老牛
驱动老牛
  • 注册日期2001-05-21
  • 最后登录2010-02-25
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-21 16:51
为什么??
顶一下 :D
早起早睡 精神百倍
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-05-21 21:56
GetLastError看看是什么错误呀。
hwnd不正确?或是有个参数是局部变量,用writefile的时候这个参数已经不在了?
mailme
驱动老牛
驱动老牛
  • 注册日期2001-05-21
  • 最后登录2010-02-25
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-05-22 00:20
GetLastError看看是什么错误呀。
hwnd不正确?或是有个参数是局部变量,用writefile的时候这个参数已经不在了?


有道理,楼主把writefile的参数写出来看看
早起早睡 精神百倍
zzq191
驱动中牛
驱动中牛
  • 注册日期2001-08-09
  • 最后登录2018-05-29
  • 粉丝17
  • 关注0
  • 积分1041分
  • 威望716点
  • 贡献值0点
  • 好评度318点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2003-06-13 12:39
可能你的驱动程序里采用独占式方式,所以你在createfile返回失败
QQ:416331891,承接windows下应用和驱动的开发,雅虎通:zzq191, Email:zzq191@21cn.com
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-06-14 20:31
可能你的驱动程序里采用独占式方式,所以你在createfile返回失败


楼主的意思是说WRITEFILE不能用,GREATFILE能用,不知道楼主现在解决问题没?如果解决了,请告诉一下!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-06-15 10:56
估计和驱动没有关系。
你看一下是不是连接错了C语言的运行库
游客

返回顶部