Jacek Caban : kernelbase: Use IOCTL_CONDRV_CTRL_EVENT in GenerateConsoleCtrlEvent.

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


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

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

kernelbase: Use IOCTL_CONDRV_CTRL_EVENT in GenerateConsoleCtrlEvent.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/tests/console.c  |  4 ++++
 dlls/kernelbase/console.c      | 14 +++++---------
 include/wine/server_protocol.h | 19 +------------------
 server/console.c               | 13 -------------
 server/protocol.def            |  7 -------
 server/request.h               |  5 -----
 server/trace.c                 |  9 ---------
 7 files changed, 10 insertions(+), 61 deletions(-)

diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c
index 3d53bfe260..46816f6ac0 100644
--- a/dlls/kernel32/tests/console.c
+++ b/dlls/kernel32/tests/console.c
@@ -3670,6 +3670,10 @@ static void test_FreeConsole(void)
     ok(!hwnd, "hwnd = %p\n", hwnd);
     ok(GetLastError() == ERROR_INVALID_HANDLE, "last error %u\n", GetLastError());
 
+    ret = GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0);
+    ok(!ret && GetLastError() == ERROR_INVALID_HANDLE, "GenerateConsoleCtrlEvent returned %x(%u)\n",
+       ret, GetLastError());
+
     SetStdHandle( STD_INPUT_HANDLE, (HANDLE)0xdeadbeef );
     handle = GetConsoleInputWaitHandle();
     ok(handle == (HANDLE)0xdeadbeef, "GetConsoleInputWaitHandle returned %p\n", handle);
diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c
index 7589f305b5..f4dd06ae2d 100644
--- a/dlls/kernelbase/console.c
+++ b/dlls/kernelbase/console.c
@@ -593,7 +593,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH FreeConsole(void)
  */
 BOOL WINAPI DECLSPEC_HOTPATCH GenerateConsoleCtrlEvent( DWORD event, DWORD group )
 {
-    BOOL ret;
+    struct condrv_ctrl_event ctrl_event;
 
     TRACE( "(%d, %x)\n", event, group );
 
@@ -603,14 +603,10 @@ BOOL WINAPI DECLSPEC_HOTPATCH GenerateConsoleCtrlEvent( DWORD event, DWORD group
 	return FALSE;
     }
 
-    SERVER_START_REQ( send_console_signal )
-    {
-        req->signal = event;
-        req->group_id = group;
-        ret = !wine_server_call_err( req );
-    }
-    SERVER_END_REQ;
-    return ret;
+    ctrl_event.event = event;
+    ctrl_event.group_id = group;
+    return console_ioctl( RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle,
+                          IOCTL_CONDRV_CTRL_EVENT, &ctrl_event, sizeof(ctrl_event), NULL, 0, NULL );
 }
 
 
diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h
index 98e4825439..5259b5a60c 100644
--- a/include/wine/server_protocol.h
+++ b/include/wine/server_protocol.h
@@ -1924,20 +1924,6 @@ struct create_console_output_reply
 
 
 
-struct send_console_signal_request
-{
-    struct request_header __header;
-    int          signal;
-    process_id_t group_id;
-    char __pad_20[4];
-};
-struct send_console_signal_reply
-{
-    struct reply_header __header;
-};
-
-
-
 struct get_next_console_request_request
 {
     struct request_header __header;
@@ -5541,7 +5527,6 @@ enum request
     REQ_append_console_input_history,
     REQ_get_console_input_history,
     REQ_create_console_output,
-    REQ_send_console_signal,
     REQ_get_next_console_request,
     REQ_read_directory_changes,
     REQ_read_change,
@@ -5831,7 +5816,6 @@ union generic_request
     struct append_console_input_history_request append_console_input_history_request;
     struct get_console_input_history_request get_console_input_history_request;
     struct create_console_output_request create_console_output_request;
-    struct send_console_signal_request send_console_signal_request;
     struct get_next_console_request_request get_next_console_request_request;
     struct read_directory_changes_request read_directory_changes_request;
     struct read_change_request read_change_request;
@@ -6119,7 +6103,6 @@ union generic_reply
     struct append_console_input_history_reply append_console_input_history_reply;
     struct get_console_input_history_reply get_console_input_history_reply;
     struct create_console_output_reply create_console_output_reply;
-    struct send_console_signal_reply send_console_signal_reply;
     struct get_next_console_request_reply get_next_console_request_reply;
     struct read_directory_changes_reply read_directory_changes_reply;
     struct read_change_reply read_change_reply;
@@ -6337,7 +6320,7 @@ union generic_reply
 
 /* ### protocol_version begin ### */
 
-#define SERVER_PROTOCOL_VERSION 640
+#define SERVER_PROTOCOL_VERSION 641
 
 /* ### protocol_version end ### */
 
diff --git a/server/console.c b/server/console.c
index 8339819458..15c764f3b5 100644
--- a/server/console.c
+++ b/server/console.c
@@ -2394,19 +2394,6 @@ DECL_HANDLER(create_console_output)
     release_object( console );
 }
 
-/* sends a signal to a console (process, group...) */
-DECL_HANDLER(send_console_signal)
-{
-    process_id_t group;
-
-    group = req->group_id ? req->group_id : current->process->group_id;
-
-    if (!group)
-        set_error( STATUS_INVALID_PARAMETER );
-    else
-        propagate_console_signal( current->process->console, req->signal, group );
-}
-
 /* get console which renderer is 'current' */
 static int cgwe_enum( struct process* process, void* user)
 {
diff --git a/server/protocol.def b/server/protocol.def
index 6e92f86cc0..92290af701 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -1515,13 +1515,6 @@ enum server_fd_type
 @END
 
 
-/* Sends a signal to a process group */
- at REQ(send_console_signal)
-    int          signal;        /* the signal to send */
-    process_id_t group_id;      /* the group to send the signal to */
- at END
-
-
 /* Retrieve the next pending console ioctl request */
 @REQ(get_next_console_request)
     obj_handle_t handle;        /* console server handle */
diff --git a/server/request.h b/server/request.h
index 5a602d3d81..db7215bd43 100644
--- a/server/request.h
+++ b/server/request.h
@@ -188,7 +188,6 @@ DECL_HANDLER(get_console_wait_event);
 DECL_HANDLER(append_console_input_history);
 DECL_HANDLER(get_console_input_history);
 DECL_HANDLER(create_console_output);
-DECL_HANDLER(send_console_signal);
 DECL_HANDLER(get_next_console_request);
 DECL_HANDLER(read_directory_changes);
 DECL_HANDLER(read_change);
@@ -477,7 +476,6 @@ static const req_handler req_handlers[REQ_NB_REQUESTS] =
     (req_handler)req_append_console_input_history,
     (req_handler)req_get_console_input_history,
     (req_handler)req_create_console_output,
-    (req_handler)req_send_console_signal,
     (req_handler)req_get_next_console_request,
     (req_handler)req_read_directory_changes,
     (req_handler)req_read_change,
@@ -1131,9 +1129,6 @@ C_ASSERT( FIELD_OFFSET(struct create_console_output_request, fd) == 28 );
 C_ASSERT( sizeof(struct create_console_output_request) == 32 );
 C_ASSERT( FIELD_OFFSET(struct create_console_output_reply, handle_out) == 8 );
 C_ASSERT( sizeof(struct create_console_output_reply) == 16 );
-C_ASSERT( FIELD_OFFSET(struct send_console_signal_request, signal) == 12 );
-C_ASSERT( FIELD_OFFSET(struct send_console_signal_request, group_id) == 16 );
-C_ASSERT( sizeof(struct send_console_signal_request) == 24 );
 C_ASSERT( FIELD_OFFSET(struct get_next_console_request_request, handle) == 12 );
 C_ASSERT( FIELD_OFFSET(struct get_next_console_request_request, signal) == 16 );
 C_ASSERT( FIELD_OFFSET(struct get_next_console_request_request, read) == 20 );
diff --git a/server/trace.c b/server/trace.c
index ffb3d37db9..a0174a1bd6 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -2089,12 +2089,6 @@ static void dump_create_console_output_reply( const struct create_console_output
     fprintf( stderr, " handle_out=%04x", req->handle_out );
 }
 
-static void dump_send_console_signal_request( const struct send_console_signal_request *req )
-{
-    fprintf( stderr, " signal=%d", req->signal );
-    fprintf( stderr, ", group_id=%04x", req->group_id );
-}
-
 static void dump_get_next_console_request_request( const struct get_next_console_request_request *req )
 {
     fprintf( stderr, " handle=%04x", req->handle );
@@ -4502,7 +4496,6 @@ static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
     (dump_func)dump_append_console_input_history_request,
     (dump_func)dump_get_console_input_history_request,
     (dump_func)dump_create_console_output_request,
-    (dump_func)dump_send_console_signal_request,
     (dump_func)dump_get_next_console_request_request,
     (dump_func)dump_read_directory_changes_request,
     (dump_func)dump_read_change_request,
@@ -4788,7 +4781,6 @@ static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
     NULL,
     (dump_func)dump_get_console_input_history_reply,
     (dump_func)dump_create_console_output_reply,
-    NULL,
     (dump_func)dump_get_next_console_request_reply,
     NULL,
     (dump_func)dump_read_change_reply,
@@ -5074,7 +5066,6 @@ static const char * const req_names[REQ_NB_REQUESTS] = {
     "append_console_input_history",
     "get_console_input_history",
     "create_console_output",
-    "send_console_signal",
     "get_next_console_request",
     "read_directory_changes",
     "read_change",




More information about the wine-cvs mailing list