2

ATL 使用 thunk 来管理窗口的回调,显然它需要允许数据执行。

微软说

请注意,系统 DEP 策略可以覆盖,并且拥有 DEPAlwaysOn将禁用 ATL thunk 仿真,无论属性如何。

我将这句话翻译成(或多或少)“ATL 应用程序可能因系统策略而崩溃”是否正确?

有没有办法让 ATL-8.0 之前的应用程序在任何系统上正常工作,希望同时仍然为除了 thunk 之外的所有东西打开 DEP?

4

2 回答 2

2

每个进程都启用 DEP,因此您不能仅对有缺陷的片段禁用 DEP。选项是使用固定 ATL 重建二进制文件以使二进制 DEP 兼容,或者在使用二进制文件的整个过程中禁用 DEP。

早期的 ATL 版本确实存在这个问题,并且在某个时候得到了修复。

DEP 例外位于我的电脑、高级选项卡、性能设置、数据执行保护下。

于 2011-09-17T18:31:36.277 回答
0

这不是 ATL 8.0 的问题:

如果可能,将旧组件替换为支持“No eXecute Compatibility”的组件,例如使用 ATL 8.0 或更新版本的组件。ATL thunk 策略是为了方便查找而设计的,并避免将线程本地存储用于窗口句柄到对象的映射,但 DEP 感知操作系统中所需的 thunk 模拟否定甚至逆转了任何性能改进。较新版本的 ATL 不需要 thunk 仿真,因为它们的 thunk 是在可执行数据块中创建的。

编辑:抱歉,没有注意到您询问了 8.0 之前的 ATL。

于 2011-09-17T04:36:18.950 回答