本帖最后由 heizu 于 2009-08-06 14:46:57 编辑

解决方案 »

  1.   

    DEP对钩子应该管的比较宽才对……
    这种情况类似于死机,建议双机WinDBG调试
      

  2.   


    建议“双机WinDBG调试”,怎么调试啊,呵呵,我没有听说过.....
      

  3.   

    解决这种问题,可以调试,看看哪里调用了系统的内核API或者消息,再就是缓冲区溢出问题。或者关闭DEP,或者让DEP为这个程序设置一个例外
      

  4.   

    安装一个虚拟机,然后利用WinDBG调试这个虚拟机,网上有教程可以参考,另外可以检查下有没有消息死锁
      

  5.   


    恩,谢谢啊,我也就钩子程序调用了系统api,其他的都没有,我想是钩子程序有问题,但是我不知道怎么调试,也不知道该调试什么啊
      

  6.   

    奥,对了,还有一个错误签名如下:
    错误签名: 
    AppName: explorer.exe AppVer: 6.0.2900.2180 ModName: gdi32.dll 
    ModVer: 5.9.3.951 Offset: 000033ca 
    各位大大看看是什么问题啊,谢谢了,多提供一点思路......
      

  7.   


    恩,昨天晚上我考虑到了这个问题了,不过我程序中没有用到多线程,可这给我提供了一种思路:这个错误应该是我挂上钩子函数以后,等待屏幕重绘,等待时间是200ms,200ms之后摘取钩子函数,给主窗口发送取词成功消息,并从缓冲区取数据,我想在这等待的200ms内,如果你使某个窗口失效引起全屏重绘,就会仍然执行我的钩子程序,这样就可能导致重回失败(因为我的钩子程序执行了大量的字符串处理),我正在按照这个思路改,不知道方向对不对.............
      

  8.   

    虽然你的程序没有多线程,但你的程序是注入到别的进程里面执行的,explorer.exe肯定是多线程的。