Исправлена ​​ли несовместимость ATL с DEP? - PullRequest
2 голосов
/ 17 сентября 2011

ATL использует thunks для управления обратными вызовами для окон, и, очевидно, ему необходимо разрешить выполнение данных.

Microsoft говорит :

Обратите внимание, что системная политика DEP может быть переопределена, а наличие DEP AlwaysOn отключит эмуляцию ствола ATL независимо от атрибута.

Правильно ли я перевел эту цитату в (более или менее) «приложения ATL могут зависать из-за системных политик»?

Есть ли способ заставить приложение pre-ATL-8.0 корректно работать на любой системе, надеюсь, при этом все еще включая DEP для всего, кроме thunk?

Ответы [ 2 ]

2 голосов
/ 17 сентября 2011

DEP включен для каждого процесса, поэтому вы не можете отключить DEP только для фрагмента с ошибками. Можно либо перестроить двоичный файл с фиксированным ATL, чтобы сделать двоичный файл совместимым с DEP, либо отключить DEP для всего процесса, в котором используется двоичный файл.

Более ранние версии ATL действительно имели эту проблему, и в какой-то момент она была исправлена.

Исключения DEP находятся в разделе «Мой компьютер», вкладка «Дополнительно», «Параметры производительности», «Предотвращение выполнения данных».

0 голосов
/ 17 сентября 2011

Это не проблема с ATL 8.0:

Если возможно, замените старые компоненты на компоненты, созданные для поддержки «Нет совместимости с eXecute», например, тех, которые используют ATL 8.0 или новее. Стратегия ATL thunk была разработана для удобства поиска и избегать использования локального хранилища потоков для отображения окна-дескриптора объекта, но эмуляция thunk требуется в отрицаниях DEP-знающих ОС и даже отменяет любое улучшение производительности. Более новые версии ATL не требуют эмуляции thunk, потому что их thunk созданы в исполняемые блоки данных.

РЕДАКТИРОВАТЬ: Извините, не заметил, что вы спросили о ATL до 8.0.

...