Приложения, использующие старые компоненты ATL могут возникнуть конфликты С DEP

Переводы статьи Переводы статьи
Закрыть Закрыть
Код статьи: 948468 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все
Источник: Поддержка Майкрософт

БЫСТРАЯ ПУБЛИКАЦИЯ

БЫСТРАЯ ПУБЛИКАЦИЯ ДАННЫХ СОДЕРЖАТСЯ СВЕДЕНИЯ НЕПОСРЕДСТВЕННО В СЛУЖБУ ТЕХНИЧЕСКОЙ ПОДДЕРЖКИ МАЙКРОСОФТ ОРГАНИЗАЦИИ. СВЕДЕНИЯ, СОДЕРЖАЩИЕСЯ В НАСТОЯЩЕМ ДОКУМЕНТЕ СОЗДАЕТСЯ В ОТВЕТ НА НОВЫХ ИЛИ УНИКАЛЬНЫЙ РАЗДЕЛЫ, ИЛИ ПРЕДНАЗНАЧЕНА ДОПОЛНЕНИЯ ДРУГИХ ЗНАНИЙ СВЕДЕНИЯ.

Действие

Построение приложения, использующего компонентами, созданными с помощью ATL 7.1 и более ранних версий с/ NXCOMPAT переключения или иначе воспринимается системой как «нет выполнение совместимый».  Установка Visual Studio 2008 может впоследствии изготовлен VS 2008 или VS 2005, чтобы обеспечить совместимость NX по умолчанию программы.  Кроме того Если AlwaysOn политики DEP для системы, приложения, использующие старую код увидит эту проблему.

Результат

Программа может вызвать нарушение доступа из-за Предотвращение выполнения данных (DEP)Обнаружение попытки «thunk» из старых ATL кода.

При попытке добавить такой элемент управления ATL в Visual Studio конструктор формы, может появиться заблуждение ошибки как «Не удалось получить дескриптор окна для элемента управления AxMyATLCtrl ActiveX без окна, элементы управления не поддерживаются».  Внутреннее исключение при просмотре, будет более разглашении: "Попытка чтения или записи в защищенную память. Часто это означает, что другая память повреждена.»  Однако в этом случае повреждения не скорее проблема, но вместо попытки выполнения кода в памяти NX.

Причина

ATL 7.1 и более ранних версий не были разработаны с foreknowledge функция DEP безопасности. Более новые версии Windows (например, Vista XP SP2, 2003 Server) обеспечивает дополнительную защиту от вредоносных атак посредством функции DEP, но они также были закодированы, чтобы распознать старый шаблон «преобразователь» ATL и разрешить его выполнение, если процесс не помечен как NX-совместимым и включается эмуляция преобразователь. Эмуляция преобразователь используется по умолчанию, за исключением, когда процесс помечается NX совместимые или системной политики DEP отключил его.  Если используется параметр /NXCOMPAT в связывание приложения или приложения процесс помечен другими средствами как совместимые NX, затем отключить эмуляцию преобразователь и старых компонентов ATL может вызвать нарушение прав доступа.  Если система DEP политику AlwaysOn, отключена эмуляции преобразователь ATL, вне зависимости от атрибута NXCOMPAT для процесса.

Разрешение


  • Если это возможно, замените старые компоненты объекты, созданные для поддержки "нет выполнение совместимости», такие как использование ATL версии 8.0 или более.  Стратегия преобразователь ATL был разработан для удобства просмотра и избегать использования локальной памяти потока для карты окна дескриптор для объекта, но эмуляции преобразователь, в виду DEP OS требуется отрицает и даже обращает повышение производительности.  Более новые версии библиотеки ATL не требуют эмуляции преобразователь, поскольку их преобразователи создаются в блоки исполняемого файла данных.
  • В Функция SetProcessDEPPolicy, появилась в Vista SP1 и Windows Server 2008, может быть лучший вариант, если система DEP политику AlwaysOn.
  • Перестройте приложение без параметра /NXCOMPAT или воспользуйтесь средством, например EditBinЧтобы удалить атрибут /NXCOMPAT. Обратите внимание на то, что системные политики DEP можно переопределить и наличие DEP AlwaysOn отключить эмуляцию преобразователь ATL, независимо от того, атрибут. Он также не будет разумно использовать EditBin в интегрированной среде разработки Visual Studio.
  • Если необходимо продолжить использование ATL 7.1, изменять верхние ATL для использования исполняемого файла данных распределения их преобразователи и перестроить компоненты.  Обратите внимание, что изменение кода ATL таким образом будет не поддерживается Майкрософт, и вы делаете это на свой страх и риск.  Это не рекомендуется, но существуют известные случаи, где он отображается на была успешна.
  • Отключите средство DEP на компьютере или в процессе.  Это не рекомендуется.

Дополнительные сведения

Фон преобразователь ATL
ATL был разработан в качестве облегченной и эффективным. Этот код используется в CWindowImplRoot, CContainedWindowT и любого класса, наследующего от них.  Подклассы windows ATL создает для предоставления некоторых настраиваемых поведений. Но поскольку не понятие указателя "this" (указателя на текущий экземпляр класса object) связаны с маркерами окна (HWND), ATL требуется какой-либо механизм для преобразования из HWND указатель «this».  Будучи очень эффективно, вместо поиска отдельной таблицы для HWND-> «this» указатели, ATL вставляет исполняемый код в блоки данных, выделенные во время выполнения для вставки указатель "this не известных до времени выполнения".  (См. источник ATL в {ваш Directory}\VC\atlmfc\include\atlstdthunk.h установки VS и {ваш VS установки Directory}\VC\atlmfc\src\atl\atls\amd64\atlthunk.cpp).

В ATL 8.0 и более поздних версиях выделенной памяти помечается исполняемого файла, например с помощью параметра PAGE_EXECUTE_READWRITE, когда вызов VirtualAlloc. Этот код должен быть изменен в будущих версиях ATL (таким образом, страницы в то же время не для записи, так и для исполняемого файла), и мы хотели бы разработчикам использовать, когда он станет доступен.

Список статей:
Предотвращение выполнения данных (Windows)
Подробное описание функции предотвращения выполнения данных (DEP) в пакете обновления 2 (SP2) для Windows XP, Windows XP Tablet PC Edition 2005 и Windows Server 2003
/ NXCOMPAT (совместимо с Предотвращение выполнения данных)
EDITBIN ссылки
Функция «SetProcessDEPPolicy» (Windows)

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ

MICROSOFT И/ИЛИ ЕЕ ПОСТАВЩИКИ НЕ ДЕЛАТЬ ПРЕДСТАВЛЕНИЯ ИЛИ ГАРАНТИЙ О ПРИГОДНОСТИ, НАДЕЖНОСТЬ И ТОЧНОСТЬ ИНФОРМАЦИИ СОДЕРЖАТСЯ В ДОКУМЕНТЫ И СВЯЗАННЫХ РИСУНКОВ ПУБЛИКАЦИИ НА ЭТОМ ВЕБ-САЙТЕ (ДАЛЕЕ "МАТЕРИАЛЫ") ДЛЯ ЛЮБЫХ ЦЕЛЕЙ. МАТЕРИАЛЫ МОГУТ СОДЕРЖАТЬ ТЕХНИЧЕСКИЕ НЕТОЧНОСТИ ИЛИ ОПЕЧАТОК И МОЖЕТ БЫТЬ ИЗМЕНЕН В ЛЮБОЕ ВРЕМЯ БЕЗ ПРЕДВАРИТЕЛЬНОГО УВЕДОМЛЕНИЯ.

В МАКСИМАЛЬНОЙ СТЕПЕНИ, ДОПУСКАЕМОЙ ПРИМЕНИМО ЗАКОНОДАТЕЛЬСТВОМ, КОРПОРАЦИЯ МАЙКРОСОФТ ИЛИ ЕЕ ПОСТАВЩИКИ DISCLAIM И ИСКЛЮЧИТЬ ВСЕ ПРЕДСТАВЛЕНИЯ ГАРАНТИЙ И УСЛОВИЙ ЛИ EXPRESS, КОСВЕННЫХ ИЛИ УСТАНОВЛЕННЫХ ЗАКОНОМ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЕТСЯ, ГАРАНТИЙ, УСЛОВИЙ ИЛИ ЗАГОЛОВКА, ОТЛИЧНЫХ ОТ КОНТРАФАКЦИИ, ИСПРАВИВ ОШИБКУ ИЛИ КАЧЕСТВА, ЛЮБЫЕ ГАРАНТИИ ТОВАРНОСТИ ИЛИ ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, ОТНОСЯЩИЕСЯ К МАТЕРИАЛАМ.
Примечание. Это ЭКСПРЕСС-ПУБЛИКАЦИЯ, подготовленная непосредственно службой технической поддержки Майкрософт . Сведения, содержащиеся в данном документе, предоставлены в качестве отклика на возникшие проблемы. Из-за срочности в материалах могут быть опечатки, и в любое время и без уведомления в них могут быть внесены изменения. Чтобы получить дополнительные сведения, см. Условия использования.

Свойства

Код статьи: 948468 - Последний отзыв: 19 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Team Suite
  • Microsoft Visual Studio 2008 Academic Edition
  • Microsoft Visual Studio 2008 Professional Edition
  • Microsoft Visual Studio 2008 Standard Edition
  • Microsoft Visual Studio 2008 Team Suite
Ключевые слова: 
kbnomt kbrapidpub kbmt KB948468 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:948468

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com