Совместимость приложений Win32: есть ли запись в манифесте, позволяющая отказаться от использования NoExecute для моего приложения?

Существует ли манифест сборки (или, возможно, флаг PE-образа) для отказа от защиты NoExecute (или для ее включения)?


По умолчанию Windows защищает только свои двоичные файлы с помощью защиты NoExecute:

введите здесь описание изображения

Но я мог бы захотеть включить свой исполняемый файл в защиту NX.

мне также может понадобиться указать пользователю, что мое приложение несовместимо с защитой NX. Вместо того, чтобы заставлять пользователя вручную находить и добавлять меня в список, я могу сделать это за него:

введите здесь описание изображения

Примечание. я сравниваю это с моей возможностью подписаться на запуск моего приложения в качестве обычного пользователя:

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  <security>
      <requestedPrivileges>
          <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
      </requestedPrivileges>
  </security>
</trustInfo>

Или возможность отказаться от защиты «запуск от имени обычного пользователя»:

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  <security>
      <requestedPrivileges>
          <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
      </requestedPrivileges>
  </security>
</trustInfo>

Примечание: я не думаю, что существует способ включить или отключить защиту NX. Поэтому, если ответ Нет, это нормально. Но я все же спрашиваю, потому что могу ошибаться.


person Ian Boyd    schedule 28.12.2011    source источник


Ответы (1)


Вы можете подписаться с помощью IMAGE_DLLCHARACTERISTICS_NX_COMPAT. (и/или SetProcessDEPPolicy)

Если системный параметр не AlwaysOn (нельзя установить в графическом интерфейсе IIRC), вы можете отказаться с помощью SetProcessDEPPPolicy

Родительский процесс может форсировать DEP с помощью PROCESS_CREATION_MITIGATION_POLICY_DEP_ENABLE в Vista+

Старый код ATL и некоторые средства DRM/защиты от копирования сторонних производителей имеют специальную обработку и не будут перехвачены DEP. когда система находится в режиме отказа (не уверен в AlwaysOn)

Чтобы использовать «SetProcessDEPPolicy» в XP.SP2/2003.SP1, вызовите недокументированный NtSetInformationProcess.

person Anders    schedule 28.12.2011
comment
Возможно, вам следует упомянуть Editbin.exe и его параметр /nxcompat. - person Hans Passant; 29.12.2011
comment
@HansPassant Хороший вопрос, но не все используют цепочку инструментов MS, и если они это делают, они могут установить параметр в командной строке или в настройках проекта ( msdn.microsoft.com/en-us/library/ms235442%28v=vs.80%29.aspx ) - person Anders; 29.12.2011