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 调用锁定/冻结的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL glBindTexture() 崩溃

Haskell openGL 和 GLUT 在 Mac OS X 上冻结?我可以在 GLUT 上使用 GLFW 吗?

OpenGL/GLFW:glfwOpenWindow 挂起(准系统应用程序)

在 OpenGL 中创建屏幕截图不起作用

openGL 学习之路一 在mac电脑上搭建opengl环境

SDL + OpenGL,具有周期性尖峰的不规则帧时间