Поделиться через


Функция SetProcessDEPPolicy (winbase.h)

Изменяет параметры предотвращения выполнения данных (DEP) и dep-ATL эмуляции для 32-разрядного процесса.

Синтаксис

BOOL SetProcessDEPPolicy(
  [in] DWORD dwFlags
);

Параметры

[in] dwFlags

Значение DWORD, которое может содержать одно или несколько следующих значений.

Значение Значение
0
Если системная политика DEP — OptIn или OptOut и dep включена для процесса, параметр dwFlags в значение 0 отключает DEP для процесса.
PROCESS_DEP_ENABLE
0x00000001
Включает DEP навсегда в текущем процессе. После включения DEP для процесса путем установки PROCESS_DEP_ENABLE его нельзя отключить на протяжении всего процесса.
PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION
0x00000002
Отключает эмуляцию thunk DEP-ATL для текущего процесса, которая не позволяет системе перехватывать ошибки NX, происходящие из слоя thunk библиотеки активных шаблонов (ATL). Дополнительные сведения см. в разделе «Примечания». Этот флаг можно указать только с помощью PROCESS_DEP_ENABLE.

Возвращаемое значение

Если функция завершается успешно, она возвращает значение TRUE.

Если функция завершается сбоем, она возвращает значение FALSE. Чтобы получить значения ошибок, определенные для этой функции, вызовите Метод GetLastError.

Комментарии

Функция SetProcessDEPPolicy переопределяет системную политику DEP для текущего процесса, если ее политика DEP не была указана при создании процесса. Параметр политики DEP системы должен иметь значение OptIn или OptOut. Если системная политика DEP имеет значение AlwaysOff или AlwaysOn, SetProcessDEPPolicy возвращает ошибку. После включения DEP для процесса последующие вызовы SetProcessDEPPolicy игнорируются.

Политика DEP, указанная при создании процесса с атрибутом PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY , не может быть изменена в течение всего процесса. В этом случае вызовы SetProcessDEPPolicy завершаются сбоем с ERROR_ACCESS_DENIED.

SetProcessDEPPolicy поддерживается только для 32-разрядных процессов. Если эта функция вызывается в 64-разрядном процессе, она завершается сбоем с ERROR_NOT_SUPPORTED.

Приложения, написанные в ATL 7.1 и более ранних версий, могут пытаться выполнить код на страницах, помеченных как неисполняемые, что вызывает ошибку NX и завершает работу приложения. Эмуляция thunk DEP-ATL позволяет приложению, которое в противном случае активировало бы ошибку NX, выполняться с включенным DEP. Сведения о версиях ATL см. в разделе Номера версий ATL и MFC.

Если эмуляция thunk DEP-ATL включена, система перехватывает ошибки NX, эмулирует инструкции и обрабатывает исключения, чтобы приложение продолжало работать. Если эмуляция thunk DEP-ATL отключена путем установки PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION для процесса, ошибки NX не перехватываются, что полезно при тестировании приложений на совместимость с DEP.

В следующей таблице перечислены взаимодействия между системной политикой DEP, эмуляцией thunk DEP-ATL и SetProcessDEPPolicy. Чтобы получить параметр политики DEP системы, используйте функцию GetSystemDEPPolicy .

Политика DEP системы Поведение DEP DEP_ATL поведение эмуляции Поведение SetProcessDEPPolicy
AlwaysOff

0

Отключено для операционной системы и всех процессов. Не применяется Возвращает ошибку.
AlwaysOn

1

Включено для операционной системы и всех процессов. Отключено. Возвращает ошибку.
Optin

2

Конфигурация по умолчанию для версий клиента Windows.

Включено для операционной системы и отключено для несистемных процессов. Администраторы могут явно включить DEP для выбранных исполняемых файлов. Не применяется DEP можно включить для текущего процесса.

Если dep включен для текущего процесса, для этого процесса можно отключить эмуляцию thunk DEP-ATL.

OptOut

3

Конфигурация по умолчанию для версий Windows Server.

Включено для операционной системы и всех процессов. Администраторы могут явно отключить DEP для выбранных исполняемых файлов. Включен. DEP можно отключить для текущего процесса.

Если dep отключен для текущего процесса, эмуляция thunk DEP-ATL автоматически отключается для этого процесса.

 

Чтобы скомпилировать приложение, которое вызывает эту функцию, определите _WIN32_WINNT как 0x0600 или более поздней версии. Дополнительные сведения см. в разделе Использование заголовков Windows.

Требования

Требование Значение
Минимальная версия клиента Windows Vista с пакетом обновления 1 (SP1), Windows XP с пакетом обновления 3 (SP3) [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header winbase.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

Предотвращение выполнения данных

GetProcessDEPPolicy

GetSystemDEPPolicy