请教:wince流接口驱动DllEntry不停被调用,不断加载卸载线程

seu_dust 2009-06-04 10:56:44
各位大侠,本人目前intel270的硬件,跑wince5.0,目前在写流接口驱动的时候发现线程不断的被加载和卸载,即使使用一个与硬件无关的最简单的流接口驱动,情况也是如此。
OOL WINAPI DllEntry(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved)
{
switch ( dwReason )
{
case DLL_PROCESS_ATTACH:
RETAILMSG(1, (TEXT("SPL: DLL_PROCESS_ATTACH.\r\n"))); /* 提示动态库加载 */
//DisableThreadLibraryCalls((HMODULE) hInstDll);
break;

case DLL_PROCESS_DETACH:
RETAILMSG(1, (TEXT("SPL: DLL_PROCESS_DETACH.\r\n"))); /* 提示动态库卸载 */
break;
case DLL_THREAD_ATTACH:
RETAILMSG(1,(TEXT("DLL_THREAD_ATTACH\n")));
break;
case DLL_THREAD_DETACH:
RETAILMSG(1,(TEXT("DLL_THREAD_DETACH\n")));
break;
}

return (TRUE);
}

线程被加载后,就会一直如此
DLL_THREAD_ATTACH
DLL_THREAD_DETACH
DLL_THREAD_ATTACH
DLL_THREAD_DETACH
DLL_THREAD_ATTACH
DLL_THREAD_DETACH
DLL_THREAD_ATTACH
DLL_THREAD_DETACH

DLL_THREAD_ATTACH
DLL_THREAD_DETACH

写的驱动无法正常读写,是否是该处异常造成的,是什么原因造成的呢,该如何解决?



...全文
349 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
seu_dust 2009-06-06
  • 打赏
  • 举报
回复
谢谢各位的帮忙,应该明了了,结贴了
nick_TS16949 2009-06-05
  • 打赏
  • 举报
回复
LZ用什么方式来加载DLL的?
西山锈码 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 clementzhao 的回复:]
这个和驱动完全无关
DLL_THREAD_ATTACH是进程中有线程加载卸载都会有通知的
[/Quote]
完全同意这个见解!
clementzhao 2009-06-05
  • 打赏
  • 举报
回复
这个和驱动完全无关
DLL_THREAD_ATTACH是进程中有线程加载卸载都会有通知的
seu_dust 2009-06-05
  • 打赏
  • 举报
回复
多谢xingjling兄弟热心帮助,虽然为什么出现这个问题还是不太清楚,起码证明驱动应该是完全可以跑起来的,驱动的问题应该不是出在这里。

注册表的信息如下,CAN的驱动
;[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\CAN]
"Prefix" = "CAN"
"Dll" = "can.dll"
"FriendlyName" = "CAN"
"Index" = dword:1
"Order" = dword:0
; -----------------------------------------------------------------------------
suwyhoho 2009-06-05
  • 打赏
  • 举报
回复
LZ检查一下注册表中驱动加载的参数设置

Flags的参数怎么设置的
西山锈码 2009-06-04
  • 打赏
  • 举报
回复
如果将你的DllEntry改成如下这样,看能不能跑的起来?我们一般都是这么做的,不用DLL_THREAD_ATTACH和DLL_THREAD_DETACH的通知消息的。

BOOL WINAPI DllEntry(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved)
{
switch ( dwReason )
{
case DLL_PROCESS_ATTACH:
RETAILMSG(1, (TEXT("SPL: DLL_PROCESS_ATTACH.\r\n"))); /* 提示动态库加载 */
DisableThreadLibraryCalls((HMODULE) hInstDll);
break;

case DLL_PROCESS_DETACH:
RETAILMSG(1, (TEXT("SPL: DLL_PROCESS_DETACH.\r\n"))); /* 提示动态库卸载 */
break;
}
return (TRUE);
}
gooogleman 2009-06-04
  • 打赏
  • 举报
回复
这个问题比较神奇,我从来没有遇到过,按照道理注册表是一次过的,发生异常立即推出DLL的。

期待答案。
西山锈码 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xingjling 的回复:]
按楼主的方式改写我自己驱动上的DLLEntry,在群感动加载的过程中也是频繁打印DLL_THREAD_ATTACH和DLL_THREAD_DETACH这两个通知的,但是我的驱动执行的没问题啊,系统也完全可以跑得起来。我对系统执行的机制还是不太清楚,帮不上你的大忙,真是惭愧啊
[/Quote]
SORRY 将驱动打错成群感动了 呵呵
会不会是系统在进入Idle时就提示DLL_THREAD_DETACH,然后在退出Idle时就会提示DLL_THREAD_ATTACH呢?如果是这样的话,那么频繁出现ATTACH和DETACH就不奇怪了,胡乱猜测一下,LZ不要见怪啊
西山锈码 2009-06-04
  • 打赏
  • 举报
回复
按楼主的方式改写我自己驱动上的DLLEntry,在群感动加载的过程中也是频繁打印DLL_THREAD_ATTACH和DLL_THREAD_DETACH这两个通知的,但是我的驱动执行的没问题啊,系统也完全可以跑得起来。我对系统执行的机制还是不太清楚,帮不上你的大忙,真是惭愧啊
seu_dust 2009-06-04
  • 打赏
  • 举报
回复
谢谢楼上,DisableThreadLibraryCalls应该只是禁止了通知,应该不能根本上解决线程加载和卸载的问题吧。线程加载卸载还是不断发生,只是没有通知而已吧。
AlexChan1981 2009-06-04
  • 打赏
  • 举报
回复
很有可能哪个线程进入死循环了

19,520

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧