Можно ли исправить несовместимость ATL с DEP?

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

Microsoft сообщает:

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

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

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


person user541686    schedule 17.09.2011    source источник
comment
Если вам срочно нужно использовать старый ATL и работать на произвольных системах, которые вы не контролируете, вам, вероятно, не повезло.   -  person Stuart Cook    schedule 17.09.2011


Ответы (2)


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

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

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

person Roman R.    schedule 17.09.2011

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

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

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

person Sergey Podobry    schedule 17.09.2011