我正在使用一些戴尔工作站(运行WinXP Pro SP 2和DeepFreeze)进行开发,但有些东西被重新加载到这些机器上,以防止任何opengl调用(调用锁)完成(我知道代码的工作方式是我已经在'干净'的机器上测试了它,我还测试了dev-cpp生成的简单opengl应用程序,它也会锁定dell机器。)
我试图调试我自己的应用程序以查看gl调用冻结的确切位置,但ZwQueryInformationProcess上有一些全局系统挂钩会混淆对ZwQueryInformationThread(由ExitThread使用)的调用,从而阻止我进行调试(它会导致调试器OllyDBG进入访问冲突报告循环或程序崩溃(如果传递异常)。 钩子:
ntdll.ZwQueryInformationProcess 7C90D7E0 B8 9A000000 MOV EAX,9A
7C90D7E5 BA 0003FE7F MOV EDX,7FFE0300
7C90D7EA FF12 CALL DWORD PTR DS:[EDX]
7C90D7EC - E9 0F28448D JMP 09D50000
7C90D7F1 9B WAIT
7C90D7F2 0000 ADD BYTE PTR DS:[EAX],AL
7C90D7F4 00BA 0003FE7F ADD BYTE PTR DS:[EDX+7FFE0300],BH
7C90D7FA FF12 CALL DWORD PTR DS:[EDX]
7C90D7FC C2 1400 RETN 14
7C90D7FF 90 NOP
ntdll.ZwQueryInformationToken 7C90D800 B8 9C000000 MOV EAX,9C
混乱的功能+通话:
ntdll.ZwQueryInformationThread 7C90D7F0 8D9B 000000BA LEA EBX,DWORD PTR DS:[EBX+BA000000]
7C90D7F6 0003 ADD BYTE PTR DS:[EBX],AL
7C90D7F8 FE ??? ; Unknown command
7C90D7F9 7F FF JG SHORT ntdll.7C90D7FA
7C90D7FB 12C2 ADC AL,DL
7C90D7FD 14 00 ADC AL,0
7C90D7FF 90 NOP
ntdll.ZwQueryInformationToken 7C90D800 B8 9C000000 MOV EAX,9C
首先,任何人都知道如果有什么事情会导致OpenGL调用导致无限锁定,如果有任何方法可以解决它?什么会在内核内存中创建这样的钩子?
更新:经过一些更多的摆弄,我发现了更多的内核钩子,其中很多用于取消系统信息调用返回的数据(如远程调试端口),我还设法找出了什么从来没有这样做是使用madchook.dll(通过madshi)来做到这一点,这个dll也被注入到每个正在运行的进程中(这些似乎是一些反调试代码)。另外,在OpenGL方面,似乎Direct X很好/不受影响(我没有遇到问题就运行了一个DX 9演示版),那么这些内核钩子中的一个会不会影响OpenGL?
答案 0 :(得分:1)
经过一些研究,似乎有一些东西主动阻止用户 - >内核模式调用OGL,可能是DeepFreeze的一个选项。 DirectX虽然完美无缺,但我已经切换到了。
答案 1 :(得分:0)
这闻起来像是一些恶意软件试图隐藏在你的系统上(并且弄错了)。您是否尝试使用最新的防病毒扫描系统?
编辑:快速Google搜索madchook.dll显示它被各种间谍软件/拨号程序/其他恶意软件使用。请尽快运行防病毒软件。