Signed-off-by: Micah N Gorrell mgorrell@codeweavers.com --- include/wine/server_protocol.h | 53 +++++++++++++++++++++++++++++++++- server/request.h | 15 ++++++++++ server/trace.c | 35 ++++++++++++++++++++++ 3 files changed, 102 insertions(+), 1 deletion(-)
diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index a45d092deb..cbee9e36c5 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -5340,6 +5340,48 @@ struct get_kernel_object_handle_reply
+struct register_device_notification_request +{ + struct request_header __header; + user_handle_t recipient; +}; +struct register_device_notification_reply +{ + struct reply_header __header; + user_handle_t handle; + char __pad_12[4]; +}; + + + +struct unregister_device_notification_request +{ + struct request_header __header; + user_handle_t notification; +}; +struct unregister_device_notification_reply +{ + struct reply_header __header; +}; + + + +struct get_device_notifications_request +{ + struct request_header __header; + char __pad_12[4]; +}; +struct get_device_notifications_reply +{ + struct reply_header __header; + int count; + /* VARARG(handles,user_handles); */ + char __pad_12[4]; +}; + + + + struct make_process_system_request { struct request_header __header; @@ -6055,6 +6097,9 @@ enum request REQ_grab_kernel_object, REQ_release_kernel_object, REQ_get_kernel_object_handle, + REQ_register_device_notification, + REQ_unregister_device_notification, + REQ_get_device_notifications, REQ_make_process_system, REQ_get_token_statistics, REQ_create_completion, @@ -6360,6 +6405,9 @@ union generic_request struct grab_kernel_object_request grab_kernel_object_request; struct release_kernel_object_request release_kernel_object_request; struct get_kernel_object_handle_request get_kernel_object_handle_request; + struct register_device_notification_request register_device_notification_request; + struct unregister_device_notification_request unregister_device_notification_request; + struct get_device_notifications_request get_device_notifications_request; struct make_process_system_request make_process_system_request; struct get_token_statistics_request get_token_statistics_request; struct create_completion_request create_completion_request; @@ -6663,6 +6711,9 @@ union generic_reply struct grab_kernel_object_reply grab_kernel_object_reply; struct release_kernel_object_reply release_kernel_object_reply; struct get_kernel_object_handle_reply get_kernel_object_handle_reply; + struct register_device_notification_reply register_device_notification_reply; + struct unregister_device_notification_reply unregister_device_notification_reply; + struct get_device_notifications_reply get_device_notifications_reply; struct make_process_system_reply make_process_system_reply; struct get_token_statistics_reply get_token_statistics_reply; struct create_completion_reply create_completion_reply; @@ -6694,6 +6745,6 @@ union generic_reply struct resume_process_reply resume_process_reply; };
-#define SERVER_PROTOCOL_VERSION 583 +#define SERVER_PROTOCOL_VERSION 585
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */ diff --git a/server/request.h b/server/request.h index 07918dff3f..6724789808 100644 --- a/server/request.h +++ b/server/request.h @@ -381,6 +381,9 @@ DECL_HANDLER(set_kernel_object_ptr); DECL_HANDLER(grab_kernel_object); DECL_HANDLER(release_kernel_object); DECL_HANDLER(get_kernel_object_handle); +DECL_HANDLER(register_device_notification); +DECL_HANDLER(unregister_device_notification); +DECL_HANDLER(get_device_notifications); DECL_HANDLER(make_process_system); DECL_HANDLER(get_token_statistics); DECL_HANDLER(create_completion); @@ -685,6 +688,9 @@ static const req_handler req_handlers[REQ_NB_REQUESTS] = (req_handler)req_grab_kernel_object, (req_handler)req_release_kernel_object, (req_handler)req_get_kernel_object_handle, + (req_handler)req_register_device_notification, + (req_handler)req_unregister_device_notification, + (req_handler)req_get_device_notifications, (req_handler)req_make_process_system, (req_handler)req_get_token_statistics, (req_handler)req_create_completion, @@ -2315,6 +2321,15 @@ C_ASSERT( FIELD_OFFSET(struct get_kernel_object_handle_request, access) == 24 ); C_ASSERT( sizeof(struct get_kernel_object_handle_request) == 32 ); C_ASSERT( FIELD_OFFSET(struct get_kernel_object_handle_reply, handle) == 8 ); C_ASSERT( sizeof(struct get_kernel_object_handle_reply) == 16 ); +C_ASSERT( FIELD_OFFSET(struct register_device_notification_request, recipient) == 12 ); +C_ASSERT( sizeof(struct register_device_notification_request) == 16 ); +C_ASSERT( FIELD_OFFSET(struct register_device_notification_reply, handle) == 8 ); +C_ASSERT( sizeof(struct register_device_notification_reply) == 16 ); +C_ASSERT( FIELD_OFFSET(struct unregister_device_notification_request, notification) == 12 ); +C_ASSERT( sizeof(struct unregister_device_notification_request) == 16 ); +C_ASSERT( sizeof(struct get_device_notifications_request) == 16 ); +C_ASSERT( FIELD_OFFSET(struct get_device_notifications_reply, count) == 8 ); +C_ASSERT( sizeof(struct get_device_notifications_reply) == 16 ); C_ASSERT( sizeof(struct make_process_system_request) == 16 ); C_ASSERT( FIELD_OFFSET(struct make_process_system_reply, event) == 8 ); C_ASSERT( sizeof(struct make_process_system_reply) == 16 ); diff --git a/server/trace.c b/server/trace.c index 28bf3dd7ac..a90ddf6551 100644 --- a/server/trace.c +++ b/server/trace.c @@ -4336,6 +4336,31 @@ static void dump_get_kernel_object_handle_reply( const struct get_kernel_object_ fprintf( stderr, " handle=%04x", req->handle ); }
+static void dump_register_device_notification_request( const struct register_device_notification_request *req ) +{ + fprintf( stderr, " recipient=%08x", req->recipient ); +} + +static void dump_register_device_notification_reply( const struct register_device_notification_reply *req ) +{ + fprintf( stderr, " handle=%08x", req->handle ); +} + +static void dump_unregister_device_notification_request( const struct unregister_device_notification_request *req ) +{ + fprintf( stderr, " notification=%08x", req->notification ); +} + +static void dump_get_device_notifications_request( const struct get_device_notifications_request *req ) +{ +} + +static void dump_get_device_notifications_reply( const struct get_device_notifications_reply *req ) +{ + fprintf( stderr, " count=%d", req->count ); + dump_varargs_user_handles( ", handles=", cur_size ); +} + static void dump_make_process_system_request( const struct make_process_system_request *req ) { } @@ -4864,6 +4889,9 @@ static const dump_func req_dumpers[REQ_NB_REQUESTS] = { (dump_func)dump_grab_kernel_object_request, (dump_func)dump_release_kernel_object_request, (dump_func)dump_get_kernel_object_handle_request, + (dump_func)dump_register_device_notification_request, + (dump_func)dump_unregister_device_notification_request, + (dump_func)dump_get_device_notifications_request, (dump_func)dump_make_process_system_request, (dump_func)dump_get_token_statistics_request, (dump_func)dump_create_completion_request, @@ -5165,6 +5193,9 @@ static const dump_func reply_dumpers[REQ_NB_REQUESTS] = { NULL, NULL, (dump_func)dump_get_kernel_object_handle_reply, + (dump_func)dump_register_device_notification_reply, + NULL, + (dump_func)dump_get_device_notifications_reply, (dump_func)dump_make_process_system_reply, (dump_func)dump_get_token_statistics_reply, (dump_func)dump_create_completion_reply, @@ -5466,6 +5497,9 @@ static const char * const req_names[REQ_NB_REQUESTS] = { "grab_kernel_object", "release_kernel_object", "get_kernel_object_handle", + "register_device_notification", + "unregister_device_notification", + "get_device_notifications", "make_process_system", "get_token_statistics", "create_completion", @@ -5535,6 +5569,7 @@ static const struct { "ERROR_HOTKEY_ALREADY_REGISTERED", 0xc0010000 | ERROR_HOTKEY_ALREADY_REGISTERED }, { "ERROR_HOTKEY_NOT_REGISTERED", 0xc0010000 | ERROR_HOTKEY_NOT_REGISTERED }, { "ERROR_INVALID_CURSOR_HANDLE", 0xc0010000 | ERROR_INVALID_CURSOR_HANDLE }, + { "ERROR_INVALID_HANDLE", 0xc0010000 | ERROR_INVALID_HANDLE }, { "ERROR_INVALID_INDEX", 0xc0010000 | ERROR_INVALID_INDEX }, { "ERROR_INVALID_WINDOW_HANDLE", 0xc0010000 | ERROR_INVALID_WINDOW_HANDLE }, { "ERROR_NO_MORE_USER_HANDLES", 0xc0010000 | ERROR_NO_MORE_USER_HANDLES },