Module: wine Branch: master Commit: ba715798094896e8b98fc5803e16b00fa49edccc URL: http://source.winehq.org/git/wine.git/?a=commit;h=ba715798094896e8b98fc5803e...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Oct 20 16:21:06 2008 +0200
server: Added a request to unlink an object from its namespace.
---
include/wine/server_protocol.h | 18 +++++++++++++++++- server/directory.c | 12 ++++++++++++ server/protocol.def | 7 +++++++ server/request.h | 2 ++ server/trace.c | 8 ++++++++ 5 files changed, 46 insertions(+), 1 deletions(-)
diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index 5ae51f6..7175ae7 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -4042,6 +4042,19 @@ struct get_object_info_reply };
+ +struct unlink_object_request +{ + struct request_header __header; + obj_handle_t handle; +}; +struct unlink_object_reply +{ + struct reply_header __header; +}; + + + struct get_token_impersonation_level_request { struct request_header __header; @@ -4516,6 +4529,7 @@ enum request REQ_open_symlink, REQ_query_symlink, REQ_get_object_info, + REQ_unlink_object, REQ_get_token_impersonation_level, REQ_allocate_locally_unique_id, REQ_create_device_manager, @@ -4757,6 +4771,7 @@ union generic_request struct open_symlink_request open_symlink_request; struct query_symlink_request query_symlink_request; struct get_object_info_request get_object_info_request; + struct unlink_object_request unlink_object_request; struct get_token_impersonation_level_request get_token_impersonation_level_request; struct allocate_locally_unique_id_request allocate_locally_unique_id_request; struct create_device_manager_request create_device_manager_request; @@ -4996,6 +5011,7 @@ union generic_reply struct open_symlink_reply open_symlink_reply; struct query_symlink_reply query_symlink_reply; struct get_object_info_reply get_object_info_reply; + struct unlink_object_reply unlink_object_reply; struct get_token_impersonation_level_reply get_token_impersonation_level_reply; struct allocate_locally_unique_id_reply allocate_locally_unique_id_reply; struct create_device_manager_reply create_device_manager_reply; @@ -5015,6 +5031,6 @@ union generic_reply struct set_window_layered_info_reply set_window_layered_info_reply; };
-#define SERVER_PROTOCOL_VERSION 342 +#define SERVER_PROTOCOL_VERSION 343
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */ diff --git a/server/directory.c b/server/directory.c index d1d323c..f2545ea 100644 --- a/server/directory.c +++ b/server/directory.c @@ -508,3 +508,15 @@ DECL_HANDLER(get_directory_entry) release_object( dir ); } } + +/* unlink a named object */ +DECL_HANDLER(unlink_object) +{ + struct object *obj = get_handle_obj( current->process, req->handle, 0, NULL ); + + if (obj) + { + unlink_named_object( obj ); + release_object( obj ); + } +} diff --git a/server/protocol.def b/server/protocol.def index d9fd48c..b1258b2 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -2913,6 +2913,13 @@ enum message_type unsigned int ref_count; /* object ref count */ @END
+ +/* Unlink a named object */ +@REQ(unlink_object) + obj_handle_t handle; /* handle to the object */ +@END + + /* Query the impersonation level of an impersonation token */ @REQ(get_token_impersonation_level) obj_handle_t handle; /* handle to the object */ diff --git a/server/request.h b/server/request.h index 308b620..5fc5236 100644 --- a/server/request.h +++ b/server/request.h @@ -328,6 +328,7 @@ DECL_HANDLER(create_symlink); DECL_HANDLER(open_symlink); DECL_HANDLER(query_symlink); DECL_HANDLER(get_object_info); +DECL_HANDLER(unlink_object); DECL_HANDLER(get_token_impersonation_level); DECL_HANDLER(allocate_locally_unique_id); DECL_HANDLER(create_device_manager); @@ -568,6 +569,7 @@ static const req_handler req_handlers[REQ_NB_REQUESTS] = (req_handler)req_open_symlink, (req_handler)req_query_symlink, (req_handler)req_get_object_info, + (req_handler)req_unlink_object, (req_handler)req_get_token_impersonation_level, (req_handler)req_allocate_locally_unique_id, (req_handler)req_create_device_manager, diff --git a/server/trace.c b/server/trace.c index 8cdc021..8e1737e 100644 --- a/server/trace.c +++ b/server/trace.c @@ -3595,6 +3595,11 @@ static void dump_get_object_info_reply( const struct get_object_info_reply *req fprintf( stderr, " ref_count=%08x", req->ref_count ); }
+static void dump_unlink_object_request( const struct unlink_object_request *req ) +{ + fprintf( stderr, " handle=%p", req->handle ); +} + static void dump_get_token_impersonation_level_request( const struct get_token_impersonation_level_request *req ) { fprintf( stderr, " handle=%p", req->handle ); @@ -4011,6 +4016,7 @@ static const dump_func req_dumpers[REQ_NB_REQUESTS] = { (dump_func)dump_open_symlink_request, (dump_func)dump_query_symlink_request, (dump_func)dump_get_object_info_request, + (dump_func)dump_unlink_object_request, (dump_func)dump_get_token_impersonation_level_request, (dump_func)dump_allocate_locally_unique_id_request, (dump_func)dump_create_device_manager_request, @@ -4248,6 +4254,7 @@ static const dump_func reply_dumpers[REQ_NB_REQUESTS] = { (dump_func)dump_open_symlink_reply, (dump_func)dump_query_symlink_reply, (dump_func)dump_get_object_info_reply, + (dump_func)0, (dump_func)dump_get_token_impersonation_level_reply, (dump_func)dump_allocate_locally_unique_id_reply, (dump_func)dump_create_device_manager_reply, @@ -4485,6 +4492,7 @@ static const char * const req_names[REQ_NB_REQUESTS] = { "open_symlink", "query_symlink", "get_object_info", + "unlink_object", "get_token_impersonation_level", "allocate_locally_unique_id", "create_device_manager",