mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-30 16:17:02 +01:00
w32: Use call back when ASFW is needed.
-- Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
f9af139685
commit
bd062b1dbd
@ -1106,7 +1106,6 @@ spawn_detached (gnupg_process_t process,
|
||||
int cr_flags;
|
||||
wchar_t *wcmdline = NULL;
|
||||
wchar_t *wpgmname = NULL;
|
||||
BOOL ask_inherit;
|
||||
gpg_err_code_t ec;
|
||||
int ret;
|
||||
struct spawn_cb_arg sca;
|
||||
@ -1122,12 +1121,12 @@ spawn_detached (gnupg_process_t process,
|
||||
memset (&si, 0, sizeof si);
|
||||
|
||||
sca.ask_inherit = FALSE;
|
||||
sca.allow_foreground_window = FALSE;
|
||||
sca.plpAttributeList = &si.lpAttributeList;
|
||||
sca.arg = spawn_cb_arg;
|
||||
sca.hd[0] = INVALID_HANDLE_VALUE;
|
||||
if (spawn_cb)
|
||||
(*spawn_cb) (&sca);
|
||||
ask_inherit = sca.ask_inherit;
|
||||
|
||||
/* Prepare security attributes. */
|
||||
memset (&sec_attr, 0, sizeof sec_attr );
|
||||
@ -1156,7 +1155,7 @@ spawn_detached (gnupg_process_t process,
|
||||
wcmdline, /* Command line arguments. */
|
||||
&sec_attr, /* Process security attributes. */
|
||||
&sec_attr, /* Thread security attributes. */
|
||||
ask_inherit, /* Inherit handles. */
|
||||
sca.ask_inherit, /* Inherit handles. */
|
||||
cr_flags, /* Creation flags. */
|
||||
NULL, /* Environment. */
|
||||
NULL, /* Use current drive/directory. */
|
||||
@ -1187,6 +1186,9 @@ spawn_detached (gnupg_process_t process,
|
||||
pi.hProcess, pi.hThread,
|
||||
(int) pi.dwProcessId, (int) pi.dwThreadId);
|
||||
|
||||
/* Note: AllowSetForegroundWindow doesn't make sense for background
|
||||
process. */
|
||||
|
||||
CloseHandle (pi.hThread);
|
||||
CloseHandle (pi.hProcess);
|
||||
|
||||
@ -1217,7 +1219,6 @@ gnupg_process_spawn (const char *pgmname, const char *argv[],
|
||||
wchar_t *wcmdline = NULL;
|
||||
wchar_t *wpgmname = NULL;
|
||||
int ret;
|
||||
BOOL ask_inherit;
|
||||
HANDLE hd_in[2];
|
||||
HANDLE hd_out[2];
|
||||
HANDLE hd_err[2];
|
||||
@ -1342,6 +1343,7 @@ gnupg_process_spawn (const char *pgmname, const char *argv[],
|
||||
memset (&si, 0, sizeof si);
|
||||
|
||||
sca.ask_inherit = FALSE;
|
||||
sca.allow_foreground_window = FALSE;
|
||||
sca.plpAttributeList = &si.lpAttributeList;
|
||||
sca.arg = spawn_cb_arg;
|
||||
i = 0;
|
||||
@ -1354,7 +1356,6 @@ gnupg_process_spawn (const char *pgmname, const char *argv[],
|
||||
sca.hd[i] = INVALID_HANDLE_VALUE;
|
||||
if (spawn_cb)
|
||||
(*spawn_cb) (&sca);
|
||||
ask_inherit = sca.ask_inherit;
|
||||
|
||||
if (i != 0)
|
||||
{
|
||||
@ -1387,7 +1388,7 @@ gnupg_process_spawn (const char *pgmname, const char *argv[],
|
||||
UpdateProcThreadAttribute (si.lpAttributeList, 0,
|
||||
PROC_THREAD_ATTRIBUTE_HANDLE_LIST,
|
||||
sca.hd, sizeof (HANDLE) * i, NULL, NULL);
|
||||
ask_inherit = TRUE;
|
||||
sca.ask_inherit = TRUE;
|
||||
}
|
||||
|
||||
/* Prepare security attributes. */
|
||||
@ -1417,7 +1418,7 @@ gnupg_process_spawn (const char *pgmname, const char *argv[],
|
||||
wcmdline, /* Command line arguments. */
|
||||
&sec_attr, /* Process security attributes. */
|
||||
&sec_attr, /* Thread security attributes. */
|
||||
ask_inherit, /* Inherit handles. */
|
||||
sca.ask_inherit, /* Inherit handles. */
|
||||
cr_flags, /* Creation flags. */
|
||||
NULL, /* Environment. */
|
||||
NULL, /* Use current drive/directory. */
|
||||
@ -1468,14 +1469,14 @@ gnupg_process_spawn (const char *pgmname, const char *argv[],
|
||||
pi.hProcess, pi.hThread,
|
||||
(int) pi.dwProcessId, (int) pi.dwThreadId);
|
||||
|
||||
if ((flags & GNUPG_PROCESS_WINDOWS_ASFW))
|
||||
if (sca.allow_foreground_window)
|
||||
{
|
||||
/* Fixme: For unknown reasons AllowSetForegroundWindow returns
|
||||
* an invalid argument error if we pass it the correct
|
||||
* processID. As a workaround we use -1 (ASFW_ANY). */
|
||||
if (!AllowSetForegroundWindow (ASFW_ANY /*pi.dwProcessId*/))
|
||||
log_info ("AllowSetForegroundWindow() failed: ec=%d\n",
|
||||
(int)GetLastError ());
|
||||
(int)GetLastError ());
|
||||
}
|
||||
|
||||
/* Process has been created suspended; resume it now. */
|
||||
|
@ -215,6 +215,7 @@ struct spawn_cb_arg;
|
||||
#ifdef NEED_STRUCT_SPAWN_CB_ARG
|
||||
struct spawn_cb_arg {
|
||||
BOOL ask_inherit;
|
||||
BOOL allow_foreground_window;
|
||||
void *plpAttributeList;
|
||||
HANDLE hd[16];
|
||||
void *arg;
|
||||
@ -232,8 +233,6 @@ struct spawn_cb_arg {
|
||||
#define GNUPG_PROCESS_INHERIT_FILE (1 << 0)
|
||||
|
||||
#define GNUPG_PROCESS_DETACHED (1 << 1)
|
||||
/**/
|
||||
#define GNUPG_PROCESS_WINDOWS_ASFW (1 << 7)
|
||||
|
||||
/* Specify how to keep/connect standard fds. */
|
||||
#define GNUPG_PROCESS_STDIN_PIPE (1 << 8)
|
||||
|
Loading…
x
Reference in New Issue
Block a user