Alexandre Julliard : server: Added a request to unlink an object from its namespace.
Alexandre Julliard
julliard at winehq.org
Tue Oct 21 07:06:00 CDT 2008
Module: wine
Branch: master
Commit: ba715798094896e8b98fc5803e16b00fa49edccc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ba715798094896e8b98fc5803e16b00fa49edccc
Author: Alexandre Julliard <julliard at 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 */
+ at REQ(unlink_object)
+ obj_handle_t handle; /* handle to the object */
+ at 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",
More information about the wine-cvs
mailing list