ReactOS 0.4.17-dev-812-ged4f258
dep.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Kernel32
3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4 * PURPOSE: Data Execution Prevention (DEP) policy functions
5 * COPYRIGHT: Copyright 2010 Detlef Riekenberg
6 * Copyright 2011 Austin English
7 * Copyright 2026 Mark Jansen <mark.jansen@reactos.org>
8 */
9
10/* INCLUDES *******************************************************************/
11
12#include <k32.h>
13
14/* PUBLIC FUNCTIONS ***********************************************************/
15
16/*
17 * @implemented
18 */
22{
23 return (DEP_SYSTEM_POLICY_TYPE)SharedUserData->NXSupportPolicy;
24}
25
26/*
27 * @implemented
28 */
29BOOL
33 _Out_opt_ LPDWORD lpFlags,
34 _Out_opt_ PBOOL lpPermanent)
35{
36 ULONG ExecuteFlags;
38
39 /* ProcessExecuteFlags is only valid for the current process */
41
44 &ExecuteFlags,
45 sizeof(ExecuteFlags),
46 NULL);
47 if (!NT_SUCCESS(Status))
48 {
50 return FALSE;
51 }
52
53 if (lpFlags)
54 {
55 *lpFlags = 0;
56 if (ExecuteFlags & MEM_EXECUTE_OPTION_DISABLE)
57 *lpFlags |= PROCESS_DEP_ENABLE;
60 }
61
62 if (lpPermanent)
63 *lpPermanent = (ExecuteFlags & MEM_EXECUTE_OPTION_PERMANENT) != 0;
64
65 return TRUE;
66}
67
68/*
69 * @implemented
70 */
71BOOL
75{
76 ULONG ExecuteFlags = 0;
78
83
86 &ExecuteFlags,
87 sizeof(ExecuteFlags));
88 if (!NT_SUCCESS(Status))
89 {
91 return FALSE;
92 }
93
94 return TRUE;
95}
LONG NTSTATUS
Definition: precomp.h:26
BOOL WINAPI GetProcessDEPPolicy(_In_ HANDLE hProcess, _Out_opt_ LPDWORD lpFlags, _Out_opt_ PBOOL lpPermanent)
Definition: dep.c:31
DEP_SYSTEM_POLICY_TYPE WINAPI GetSystemDEPPolicy(VOID)
Definition: dep.c:21
BOOL WINAPI SetProcessDEPPolicy(_In_ DWORD dwFlags)
Definition: dep.c:73
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
Status
Definition: gdiplustypes.h:24
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:71
BOOL * PBOOL
Definition: minwindef.h:137
#define MEM_EXECUTE_OPTION_DISABLE
Definition: mmtypes.h:73
#define MEM_EXECUTE_OPTION_PERMANENT
Definition: mmtypes.h:76
#define MEM_EXECUTE_OPTION_DISABLE_THUNK_EMULATION
Definition: mmtypes.h:75
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define _Out_opt_
Definition: no_sal2.h:214
#define _In_
Definition: no_sal2.h:158
#define NtCurrentProcess()
Definition: nt_native.h:1660
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
NTSTATUS NTAPI NtSetInformationProcess(_In_ HANDLE ProcessHandle, _In_ PROCESSINFOCLASS ProcessInformationClass, _In_reads_bytes_(ProcessInformationLength) PVOID ProcessInformation, _In_ ULONG ProcessInformationLength)
Definition: query.c:1422
NTSTATUS NTAPI NtQueryInformationProcess(_In_ HANDLE ProcessHandle, _In_ PROCESSINFOCLASS ProcessInformationClass, _Out_writes_bytes_to_opt_(ProcessInformationLength, *ReturnLength) PVOID ProcessInformation, _In_ ULONG ProcessInformationLength, _Out_opt_ PULONG ReturnLength)
Definition: query.c:211
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:167
#define SharedUserData
uint32_t * LPDWORD
Definition: typedefs.h:59
uint32_t ULONG
Definition: typedefs.h:59
#define PROCESS_DEP_ENABLE
Definition: winbase.h:593
enum _DEP_SYSTEM_POLICY_TYPE DEP_SYSTEM_POLICY_TYPE
#define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION
Definition: winbase.h:594
#define WINAPI
Definition: msvc.h:6
@ ProcessExecuteFlags
Definition: winternl.h:1916