summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2023-01-11 10:04:08 +0100
committerWerner Koch <wk@gnupg.org>2023-01-11 11:33:26 +0100
commitd1298fa28753e0a0273b2b12c173999e845e10a9 (patch)
tree2bf41311a972d274c485f753b3ce9144120003b3 /common
parentdoc: Minor fix of the --keyserver option. (diff)
downloadgnupg2-d1298fa28753e0a0273b2b12c173999e845e10a9.tar.xz
gnupg2-d1298fa28753e0a0273b2b12c173999e845e10a9.zip
w32: Make sure DEP is enabled.
* common/init.c (_init_common_subsystems): Test and set the DEP Policy. -- Note that this change will now definitely require Windows XP SP3.
Diffstat (limited to 'common')
-rw-r--r--common/init.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/common/init.c b/common/init.c
index 269119ff1..62a48f8c7 100644
--- a/common/init.c
+++ b/common/init.c
@@ -30,6 +30,9 @@
#include <config.h>
#ifdef HAVE_W32_SYSTEM
+# if _WIN32_WINNT < 0x0600
+# define _WIN32_WINNT 0x0600 /* Required for SetProcessDEPPolicy. */
+# endif
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# endif
@@ -213,7 +216,21 @@ _init_common_subsystems (gpg_err_source_t errsource, int *argcp, char ***argvp)
log_set_socket_dir_cb (gnupg_socketdir);
#if HAVE_W32_SYSTEM
- /* For Standard Windows we use our own parser for the command line
+ /* Make sure that Data Execution Prevention is enabled. */
+ if (GetSystemDEPPolicy () >= 2)
+ {
+ DWORD flags;
+ BOOL perm;
+
+ if (!GetProcessDEPPolicy (GetCurrentProcess (), &flags, &perm))
+ log_info ("error getting DEP policy: %s\n",
+ w32_strerror (GetLastError()));
+ else if (!(flags & PROCESS_DEP_ENABLE)
+ && !SetProcessDEPPolicy (PROCESS_DEP_ENABLE))
+ log_info ("Warning: Enabling DEP failed: %s (%d,%d)\n",
+ w32_strerror (GetLastError ()), (int)flags, (int)perm);
+ }
+ /* On Windows we use our own parser for the command line
* so that we can return an array of utf-8 encoded strings. */
prepare_w32_commandline (argcp, argvp);
#else