Zebediah Figura : ntdll: Fill the object type index in System(Extended)HandleInformation.

Alexandre Julliard julliard at winehq.org
Thu Feb 18 16:06:05 CST 2021


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

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Wed Feb 17 22:59:17 2021 -0600

ntdll: Fill the object type index in System(Extended)HandleInformation.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/unix/system.c       | 6 ++++--
 include/wine/server_protocol.h | 3 ++-
 server/handle.c                | 1 +
 server/protocol.def            | 1 +
 server/trace.c                 | 4 ++--
 5 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
index f4a879d8748..6cf044d496f 100644
--- a/dlls/ntdll/unix/system.c
+++ b/dlls/ntdll/unix/system.c
@@ -2447,7 +2447,8 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
                     shi->Handle[i].HandleValue  = handle_info[i].handle;
                     shi->Handle[i].AccessMask   = handle_info[i].access;
                     shi->Handle[i].HandleFlags  = handle_info[i].attributes;
-                    /* FIXME: Fill out ObjectType, ObjectPointer */
+                    shi->Handle[i].ObjectType   = handle_info[i].type;
+                    /* FIXME: Fill out ObjectPointer */
                 }
             }
             else if (ret == STATUS_BUFFER_TOO_SMALL)
@@ -2498,7 +2499,8 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
                     shi->Handles[i].HandleValue      = handle_info[i].handle;
                     shi->Handles[i].GrantedAccess    = handle_info[i].access;
                     shi->Handles[i].HandleAttributes = handle_info[i].attributes;
-                    /* FIXME: Fill out Object, ObjectTypeIndex */
+                    shi->Handles[i].ObjectTypeIndex  = handle_info[i].type;
+                    /* FIXME: Fill out Object */
                 }
             }
             else if (ret == STATUS_BUFFER_TOO_SMALL)
diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h
index 5e463fd5c9e..18551a2d448 100644
--- a/include/wine/server_protocol.h
+++ b/include/wine/server_protocol.h
@@ -4544,6 +4544,7 @@ struct handle_info
     obj_handle_t handle;
     unsigned int access;
     unsigned int attributes;
+    unsigned int type;
 };
 
 
@@ -6227,7 +6228,7 @@ union generic_reply
 
 /* ### protocol_version begin ### */
 
-#define SERVER_PROTOCOL_VERSION 683
+#define SERVER_PROTOCOL_VERSION 684
 
 /* ### protocol_version end ### */
 
diff --git a/server/handle.c b/server/handle.c
index 4291761ec6c..6e0848eedf0 100644
--- a/server/handle.c
+++ b/server/handle.c
@@ -833,6 +833,7 @@ static int enum_handles( struct process *process, void *user )
         handle->owner      = process->id;
         handle->handle     = index_to_handle(i);
         handle->access     = entry->access & ~RESERVED_ALL;
+        handle->type       = entry->ptr->ops->type->index;
         handle->attributes = 0;
         if (entry->access & RESERVED_INHERIT) handle->attributes |= OBJ_INHERIT;
         if (entry->access & RESERVED_CLOSE_PROTECT) handle->attributes |= OBJ_PROTECT_CLOSE;
diff --git a/server/protocol.def b/server/protocol.def
index 5126a9e37e5..7f3b785df51 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -3198,6 +3198,7 @@ struct handle_info
     obj_handle_t handle;
     unsigned int access;
     unsigned int attributes;
+    unsigned int type;
 };
 
 /* Return a list of all opened handles */
diff --git a/server/trace.c b/server/trace.c
index 9faa3d5a443..b07935cc54b 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -1342,8 +1342,8 @@ static void dump_varargs_handle_infos( const char *prefix, data_size_t size )
     while (size >= sizeof(*handle))
     {
         handle = cur_data;
-        fprintf( stderr, "{owner=%04x,handle=%04x,access=%08x,attributes=%08x}",
-                 handle->owner, handle->handle, handle->access, handle->attributes );
+        fprintf( stderr, "{owner=%04x,handle=%04x,access=%08x,attributes=%08x,type=%u}",
+                 handle->owner, handle->handle, handle->access, handle->attributes, handle->type );
         size -= sizeof(*handle);
         remove_data( sizeof(*handle) );
         if (size) fputc( ',', stderr );




More information about the wine-cvs mailing list