OpenGL 调用锁定/冻结
Posted
技术标签:
【中文标题】OpenGL 调用锁定/冻结【英文标题】:OpenGL Calls Lock/Freeze 【发布时间】:2010-02-16 15:27:01 【问题描述】:我正在使用一些戴尔工作站(运行 WinXP Pro SP 2 和 DeepFreeze)进行开发,但是最近在这些机器上加载了一些东西,阻止了任何 opengl 调用(调用锁定)完成(我知道代码可以正常工作)已经在“干净”机器上对其进行了测试,我还使用由 dev-cpp 生成的简单 opengl 应用程序进行了测试,该应用程序也将锁定在戴尔机器上)。
我试图调试我自己的应用程序以查看 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 吗?
【问题讨论】:
我假设您已经阅读了 msdn.microsoft.com/en-us/library/ms687420%28VS.85%29.aspx,它表明 ZwQueryInformationProcess 已被弃用,并建议替代实现? 请编辑您的问题以删除所有个人闲聊。我们的目标是提出可以帮助其他人以后遇到同样问题的问题。 @bmargulies:以及易于回答的问题,这意味着应将不相关的信息保持在最低限度。所以是的,同意 @bmargulies & jalf:将其编辑为不那么“健谈”和更具可读性(我希望)@Mikeb:我根本没有调用 ZwQueryInformationProcess,但有些东西已经消失并陷入困境对 ZwQueryInformationThread 的调用很混乱,在这种情况下由“自动”/隐式 ExitThread 调用调用 【参考方案1】:经过一些研究,似乎有一些东西在主动阻止用户->内核模式调用 OGL,这可能是 DeepFreeze 的一个选项。 DirectX 工作完美,所以我已经切换到那个。
【讨论】:
【参考方案2】:这闻起来很像一些恶意软件试图将自己隐藏在您的系统中(并且弄错了)。您是否尝试过使用最新的防病毒软件扫描您的系统?
编辑: 对 madchook.dll 的快速 Google 搜索显示它被各种间谍软件/拨号程序/其他恶意软件使用。请尽快运行您的防病毒软件。
【讨论】:
1) 我用谷歌搜索了 madchooh(否则我怎么知道它是谁?)当我发现它在做什么时,我确切地知道它的各种用途是什么 2) 这些机器不是我的财产,由于深度冻结,他们也无法加载任何需要重新启动的新程序(这就像 90% 的 AV 一样) 3)PC 确实有防病毒(McAffee),但它完全没用,但是使用在这种情况下,madchook 不是病毒/恶意软件的一部分,它是其他东西的一部分(某些系统/网络管理工具套件或类似的东西) @Necrolis:在这种情况下,您应该询问您的管理员。这些内核挂钩很可能会搞砸 OpenGL 驱动程序。 我已经有了,但是它们与他们使用的防病毒软件一样无用:|,因此需要找到解决方法,但不再重要了,切换到 Direct X以上是关于OpenGL 调用锁定/冻结的主要内容,如果未能解决你的问题,请参考以下文章
Haskell openGL 和 GLUT 在 Mac OS X 上冻结?我可以在 GLUT 上使用 GLFW 吗?
OpenGL/GLFW:glfwOpenWindow 挂起(准系统应用程序)