server/ntdll: Simplistic implementation of NtQueryObject(ObjectBasicInformation).
diff --git a/server/handle.c b/server/handle.c
index f8f007d..f0c58a8 100644
--- a/server/handle.c
+++ b/server/handle.c
@@ -399,9 +399,9 @@
 {
     struct handle_entry *entry;
 
-    if (get_magic_handle( handle )) return ~0U;  /* magic handles have all access rights */
+    if (get_magic_handle( handle )) return ~RESERVED_ALL;  /* magic handles have all access rights */
     if (!(entry = get_handle( process, handle ))) return 0;
-    return entry->access;
+    return entry->access & ~RESERVED_ALL;
 }
 
 /* find the first inherited handle of the given type */
@@ -540,3 +540,14 @@
         release_object( src );
     }
 }
+
+DECL_HANDLER(get_object_info)
+{
+    struct object *obj;
+
+    if (!(obj = get_handle_obj( current->process, req->handle, 0, NULL ))) return;
+
+    reply->access = get_handle_access( current->process, req->handle );
+    reply->ref_count = obj->refcount;
+    release_object( obj );
+}
diff --git a/server/protocol.def b/server/protocol.def
index 72157fd..f49f331 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -2848,3 +2848,12 @@
 @REPLY
     VARARG(target_name,unicode_str); /* target name */
 @END
+
+
+/* Query basic object information */
+@REQ(get_object_info)
+    obj_handle_t   handle;        /* handle to the object */
+@REPLY
+    unsigned int   access;        /* granted access mask */
+    unsigned int   ref_count;     /* object ref count */
+@END
diff --git a/server/request.h b/server/request.h
index 5a7dcfc..b52c1aa 100644
--- a/server/request.h
+++ b/server/request.h
@@ -324,6 +324,7 @@
 DECL_HANDLER(create_symlink);
 DECL_HANDLER(open_symlink);
 DECL_HANDLER(query_symlink);
+DECL_HANDLER(get_object_info);
 
 #ifdef WANT_REQUEST_HANDLERS
 
@@ -544,6 +545,7 @@
     (req_handler)req_create_symlink,
     (req_handler)req_open_symlink,
     (req_handler)req_query_symlink,
+    (req_handler)req_get_object_info,
 };
 #endif  /* WANT_REQUEST_HANDLERS */
 
diff --git a/server/trace.c b/server/trace.c
index 0c0798e..f9ff323 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -3424,6 +3424,17 @@
     dump_varargs_unicode_str( cur_size );
 }
 
+static void dump_get_object_info_request( const struct get_object_info_request *req )
+{
+    fprintf( stderr, " handle=%p", req->handle );
+}
+
+static void dump_get_object_info_reply( const struct get_object_info_reply *req )
+{
+    fprintf( stderr, " access=%08x,", req->access );
+    fprintf( stderr, " ref_count=%08x", req->ref_count );
+}
+
 static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
     (dump_func)dump_new_process_request,
     (dump_func)dump_get_new_process_info_request,
@@ -3639,6 +3650,7 @@
     (dump_func)dump_create_symlink_request,
     (dump_func)dump_open_symlink_request,
     (dump_func)dump_query_symlink_request,
+    (dump_func)dump_get_object_info_request,
 };
 
 static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
@@ -3856,6 +3868,7 @@
     (dump_func)dump_create_symlink_reply,
     (dump_func)dump_open_symlink_reply,
     (dump_func)dump_query_symlink_reply,
+    (dump_func)dump_get_object_info_reply,
 };
 
 static const char * const req_names[REQ_NB_REQUESTS] = {
@@ -4073,6 +4086,7 @@
     "create_symlink",
     "open_symlink",
     "query_symlink",
+    "get_object_info",
 };
 
 static const struct