Module: wine Branch: master Commit: 626b2f1898f3780ae87fde65b370324f6a939965 URL: https://gitlab.winehq.org/wine/wine/-/commit/626b2f1898f3780ae87fde65b370324...
Author: Eric Pouech epouech@codeweavers.com Date: Wed Nov 15 18:56:14 2023 +0100
server: Preserve handle flags when inheriting a std handle.
Signed-off-by: Eric Pouech epouech@codeweavers.com
---
dlls/kernel32/tests/process.c | 4 ++-- server/process.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c index ed291d071cc..1ecf8a35f21 100644 --- a/dlls/kernel32/tests/process.c +++ b/dlls/kernel32/tests/process.c @@ -3319,11 +3319,11 @@ static void test_StdHandleInheritance(void)
/* all others handles type behave as H_DISK */ {ARG_STARTUPINFO | H_DISK, HATTR_NULL, .is_broken = HATTR_TYPE | FILE_TYPE_UNKNOWN}, -/* 5*/ {ARG_STD | H_DISK, HATTR_TYPE | FILE_TYPE_DISK, .is_todo = 1}, +/* 5*/ {ARG_STD | H_DISK, HATTR_TYPE | FILE_TYPE_DISK},
/* all others handles type behave as H_DISK */ {ARG_STARTUPINFO | ARG_HANDLE_PROTECT | H_DISK, HATTR_NULL, .is_broken = HATTR_TYPE | FILE_TYPE_UNKNOWN}, - {ARG_STD | ARG_HANDLE_PROTECT | H_DISK, HATTR_TYPE | HATTR_PROTECT | FILE_TYPE_DISK, .is_todo = 1}, + {ARG_STD | ARG_HANDLE_PROTECT | H_DISK, HATTR_TYPE | HATTR_PROTECT | FILE_TYPE_DISK}, }, nothing_gui[] = { diff --git a/server/process.c b/server/process.c index a0d5ea64d97..e166aeae64e 100644 --- a/server/process.c +++ b/server/process.c @@ -1336,11 +1336,11 @@ DECL_HANDLER(new_process) if (!(req->flags & PROCESS_CREATE_FLAGS_INHERIT_HANDLES) && info->data->console != 1) { info->data->hstdin = duplicate_handle( parent, info->data->hstdin, process, - 0, OBJ_INHERIT, DUPLICATE_SAME_ACCESS ); + 0, 0, DUPLICATE_SAME_ACCESS | DUPLICATE_SAME_ATTRIBUTES ); info->data->hstdout = duplicate_handle( parent, info->data->hstdout, process, - 0, OBJ_INHERIT, DUPLICATE_SAME_ACCESS ); + 0, 0, DUPLICATE_SAME_ACCESS | DUPLICATE_SAME_ATTRIBUTES ); info->data->hstderr = duplicate_handle( parent, info->data->hstderr, process, - 0, OBJ_INHERIT, DUPLICATE_SAME_ACCESS ); + 0, 0, DUPLICATE_SAME_ACCESS | DUPLICATE_SAME_ATTRIBUTES ); /* some handles above may have been invalid; this is not an error */ if (get_error() == STATUS_INVALID_HANDLE || get_error() == STATUS_OBJECT_TYPE_MISMATCH) clear_error();