Jacek Caban : server: Introduce IOCTL_CONDRV_CTRL_EVENT ioctl.

Alexandre Julliard julliard at winehq.org
Tue Sep 1 15:43:31 CDT 2020


Module: wine
Branch: master
Commit: f9c89932595c874cf9eb6fc8d3244d89ff55bbf8
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=f9c89932595c874cf9eb6fc8d3244d89ff55bbf8

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Sep  1 15:35:51 2020 +0200

server: Introduce IOCTL_CONDRV_CTRL_EVENT ioctl.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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);




More information about the wine-cvs mailing list