本帖最后由 RECKY 于 2017-2-25 15:24 编辑
环境: 乾坤版:2.1.6.0 计 费:万象V2016.12.17
问题描述: 客户反应在客户机中打开资源管理器,看不到挂载的盘,只有一个C盘。只有重启explorer.exe或者关闭swacapp.exe进程,游戏盘才会显示出来。
分析: 0x1: 对explorer.exe抓了一个dump,看一下堆栈的情况。 将近40个线程,其中并没有发现某些线程卡死的情况。我试着在本机模拟了下资源管理器在磁盘插拔的情况,了解了资源管理器其中的过程。 0x2: 在资源管理器中,各个系统组件都有自己的一套窗口,当有设备变化的时候,系统会发出相应的消息给各个窗口。比如上图的winmm.dll,在自己的消息循环中做处理。 然后在资源管理器中显示出来。 我们去看一下dump中的信息, 各个组件的消息过程都存在,那是什么原因让这些组件没有收到消息呢?
0x3: 我们开始监听消息,然后关闭swacapp.exe进程,发现关闭后组件收到了磁盘创建的消息,于是资源管理器上就显示出来了挂载出来的游戏盘。我们把swacapp.exe给dump下来,看一下它的窗口线程。 可以看到swdcapp+0x1719的地方是一个死循环,不进行任何消息交互,当有别的人给它发消息就会堵塞住。 让我们来过一遍系统的过程: 虚拟盘开始挂载-系统开始给每个窗口通知-通知到LaunchApp的时候,由于没有回应,导致堵塞,也就不通知其它窗口了,就导致虚拟盘没有显示出来。
解决方案: 2. 结束swdcapp进程 3. 远程关闭导致卡死的窗口 4. swdcapp.exe这个进程是万象的也可以联系万象处理
|