在一台装了挺多软件的笔记本上运行一个我编写的软件,包含磁盘(文件)过滤驱动。出现的问题是:
    某次插入U盘后,打开“我的电脑”后,没有出现盘符。但在磁盘管理器里可以看到。(重启几次问题就会出现)    经过查看运行时信息,发现一些东西,我的软件是通过 盘符的变更(不是WM_DEVICECHANGE)来发现U盘插入的。
    在发现U盘插入之后,获取信息,然后调用一个函数:    DEV_BROADCAST_VOLUME DBV;
    DBV.dbcv_devicetype = DBT_DEVTYP_VOLUME;
    //DBV 其他成员赋值略.
    BroadcastSystemMessage(BSF_IGNORECURRENTTASK | BSF_POSTMESSAGE, NULL, WM_DEVICECHANGE, 
                           DBT_DEVICEARRIVAL, (LPARAM)&DBV);    我的程序在这里阻塞了。纯净的系统(或者再装点Office什么的)没有这个问题。我的想法是: 有一个系统组件,负责完成 BroadcastSystemMessage 的功能,在遇到另外一个程序的时候,那个程序没反应,所以阻塞在这里了,进而,这个组件也死在那里了,所以重启我的进程也不会恢复正常。可是我不知道是由于哪个程序导致的。或者根本就不是我想的这样另外,我把这句去掉后,问题缓解了不少,但有时候还是会出现另外一种情况,U盘拔下后,盘符不消失,反而图标的右下角多出一个红色问号。这个带问号的盘符不消失,再次插入刚才的U盘,这个带问好的盘符又重新分配给这个U盘了,再拔下,问题依旧。同时,还会出现盘符不存在的问题,不过 磁盘管理器可以看到,而且通过IE里的地址栏可以进入U盘,重启explorer.exe 进程后,“我的电脑”里就可以看到盘符了。所以我断定,原来的问题 是由于explorer.exe没有处理好系统发的消息,以至于我发消息的时候阻塞了。如果真有我所说的那个组件,那叫什么呢?大家有什么看法?

解决方案 »

  1.   

    你是不是安装Daemon Tools了,把它卸载了看能不能正常
      

  2.   

    有的没有,有的不确定。
    现在解决办法之一当然可以是一个一个软件的卸载了试,不过我发在这个区,主要就是要了解其原理,问题所在。Deamon Tools可能是问题产生原因之一,可能还有别的软件没发现呢。如果我又编写了一个软件,却和前一个自己的软件造成了这种冲突,就不能卸载了啊 hehe .