为了保护您的计算机,windows已经关闭了此程序

时间:2021-10-27 23:49:22
我做了一个屏幕取词软件,当在资源管理器中左右快速移动主窗口时,资源管理器不能正常刷新,一片白,好像死机了似的,同时,会弹出DEP保护的提示框:为了保护您的计算机,windows已经关闭了此程序,请问哪里出了问题,是不是钩子程序有问题啊?

17 个解决方案

#1


可能是你某个操作一直没有退出

#2


应该是,建议双机调试(虚拟机)这种图形处理。

#3


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

#4


引用 1 楼 socoola 的回复:
可能是你某个操作一直没有退出


您的意思是我的钩子程序有问题么?没有恢复系统调用啊。

#5


引用 3 楼 gyk120 的回复:
DEP对钩子应该管的比较宽才对……
这种情况类似于死机,建议双机WinDBG调试


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

#6


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

#7


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

#8


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


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

#9


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


恩,我查查这方面的资料

#10


奥,对了,还有一个错误签名如下:
错误签名: 
AppName: explorer.exe AppVer: 6.0.2900.2180 ModName: gdi32.dll 
ModVer: 5.9.3.951 Offset: 000033ca 


各位大大看看是什么问题啊,谢谢了,多提供一点思路......

#11


注意多线程同步的问题。

#12


引用 11 楼 cnzdgs 的回复:
注意多线程同步的问题。


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

#13


GZ

#14


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

#15


你这是个做什么的钩子呢

#16


引用 14 楼 cnzdgs 的回复:
虽然你的程序没有多线程,但你的程序是注入到别的进程里面执行的,explorer.exe肯定是多线程的。


有道理,呵呵,那我试试双机调试

#17


引用 15 楼 tr0j4n 的回复:
你这是个做什么的钩子呢


设置了一个鼠标全局钩子,算法网上大致都有的说

#1


可能是你某个操作一直没有退出

#2


应该是,建议双机调试(虚拟机)这种图形处理。

#3


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

#4


引用 1 楼 socoola 的回复:
可能是你某个操作一直没有退出


您的意思是我的钩子程序有问题么?没有恢复系统调用啊。

#5


引用 3 楼 gyk120 的回复:
DEP对钩子应该管的比较宽才对……
这种情况类似于死机,建议双机WinDBG调试


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

#6


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

#7


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

#8


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


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

#9


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


恩,我查查这方面的资料

#10


奥,对了,还有一个错误签名如下:
错误签名: 
AppName: explorer.exe AppVer: 6.0.2900.2180 ModName: gdi32.dll 
ModVer: 5.9.3.951 Offset: 000033ca 


各位大大看看是什么问题啊,谢谢了,多提供一点思路......

#11


注意多线程同步的问题。

#12


引用 11 楼 cnzdgs 的回复:
注意多线程同步的问题。


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

#13


GZ

#14


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

#15


你这是个做什么的钩子呢

#16


引用 14 楼 cnzdgs 的回复:
虽然你的程序没有多线程,但你的程序是注入到别的进程里面执行的,explorer.exe肯定是多线程的。


有道理,呵呵,那我试试双机调试

#17


引用 15 楼 tr0j4n 的回复:
你这是个做什么的钩子呢


设置了一个鼠标全局钩子,算法网上大致都有的说