Module: wine Branch: master Commit: f9c89932595c874cf9eb6fc8d3244d89ff55bbf8 URL: https://source.winehq.org/git/wine.git/?a=commit;h=f9c89932595c874cf9eb6fc8d...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Sep 1 15:35:51 2020 +0200
server: Introduce IOCTL_CONDRV_CTRL_EVENT ioctl.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
include/wine/condrv.h | 8 ++++++++ server/console.c | 19 +++++++++++++++++++ server/trace.c | 1 + 3 files changed, 28 insertions(+)
diff --git a/include/wine/condrv.h b/include/wine/condrv.h index 14177a5e19..2e6c5c689f 100644 --- a/include/wine/condrv.h +++ b/include/wine/condrv.h @@ -36,6 +36,7 @@ #define IOCTL_CONDRV_SET_INPUT_INFO CTL_CODE(FILE_DEVICE_CONSOLE, 14, METHOD_BUFFERED, FILE_WRITE_PROPERTIES) #define IOCTL_CONDRV_GET_TITLE CTL_CODE(FILE_DEVICE_CONSOLE, 15, METHOD_BUFFERED, FILE_READ_PROPERTIES) #define IOCTL_CONDRV_SET_TITLE CTL_CODE(FILE_DEVICE_CONSOLE, 16, METHOD_BUFFERED, FILE_WRITE_PROPERTIES) +#define IOCTL_CONDRV_CTRL_EVENT CTL_CODE(FILE_DEVICE_CONSOLE, 17, METHOD_BUFFERED, FILE_WRITE_PROPERTIES)
/* console output ioctls */ #define IOCTL_CONDRV_READ_OUTPUT CTL_CODE(FILE_DEVICE_CONSOLE, 30, METHOD_BUFFERED, FILE_READ_DATA) @@ -226,6 +227,13 @@ enum condrv_renderer_event_type CONSOLE_RENDERER_EXIT_EVENT, };
+/* IOCTL_CONDRV_CTRL_EVENT params */ +struct condrv_ctrl_event +{ + int event; /* the event to send */ + unsigned int group_id; /* the group to send the event to */ +}; + /* Wine specific values for console inheritance (params->ConsoleHandle) */ #define CONSOLE_HANDLE_ALLOC ((HANDLE)1)
diff --git a/server/console.c b/server/console.c index 93ea509ae4..8339819458 100644 --- a/server/console.c +++ b/server/console.c @@ -1844,6 +1844,25 @@ static int console_input_ioctl( struct fd *fd, ioctl_code_t code, struct async * return 1; }
+ case IOCTL_CONDRV_CTRL_EVENT: + { + const struct condrv_ctrl_event *event = get_req_data(); + process_id_t group; + if (get_req_data_size() != sizeof(*event)) + { + set_error( STATUS_INVALID_PARAMETER ); + return 0; + } + group = event->group_id ? event->group_id : current->process->group_id; + if (!group) + { + set_error( STATUS_INVALID_PARAMETER ); + return 0; + } + propagate_console_signal( console, event->event, group ); + return !get_error(); + } + default: set_error( STATUS_INVALID_HANDLE ); return 0; diff --git a/server/trace.c b/server/trace.c index 93e53d2f42..ffb3d37db9 100644 --- a/server/trace.c +++ b/server/trace.c @@ -116,6 +116,7 @@ static void dump_ioctl_code( const char *prefix, const ioctl_code_t *code ) #define CASE(c) case c: fprintf( stderr, "%s%s", prefix, #c ); break CASE(IOCTL_CONDRV_ACTIVATE); CASE(IOCTL_CONDRV_ATTACH_RENDERER); + CASE(IOCTL_CONDRV_CTRL_EVENT); CASE(IOCTL_CONDRV_FILL_OUTPUT); CASE(IOCTL_CONDRV_GET_INPUT_INFO); CASE(IOCTL_CONDRV_GET_MODE);