Alexandre Julliard : wow64: Add a thunk for the wine_server_call() syscall.

Alexandre Julliard julliard at winehq.org
Mon Aug 2 16:43:35 CDT 2021


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Aug  2 16:11:21 2021 +0200

wow64: Add a thunk for the wine_server_call() syscall.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wow64/struct32.h | 20 ++++++++++++++++++++
 dlls/wow64/syscall.c  | 25 +++++++++++++++++++++++++
 dlls/wow64/syscall.h  |  1 +
 3 files changed, 46 insertions(+)

diff --git a/dlls/wow64/struct32.h b/dlls/wow64/struct32.h
index 419575c2ede..dd5814f431b 100644
--- a/dlls/wow64/struct32.h
+++ b/dlls/wow64/struct32.h
@@ -21,6 +21,8 @@
 #ifndef __WOW64_STRUCT32_H
 #define __WOW64_STRUCT32_H
 
+#include "wine/server.h"
+
 typedef struct
 {
     ULONG Length;
@@ -633,4 +635,22 @@ typedef struct
     SYSTEM_THREAD_INFORMATION32 ti[1];
 } SYSTEM_PROCESS_INFORMATION32;
 
+struct __server_iovec32
+{
+    ULONG        ptr;
+    data_size_t  size;
+};
+
+struct __server_request_info32
+{
+    union
+    {
+        union generic_request req;
+        union generic_reply   reply;
+    } u;
+    unsigned int            data_count;
+    ULONG                   reply_data;
+    struct __server_iovec32 data[__SERVER_MAX_DATA];
+};
+
 #endif /* __WOW64_STRUCT32_H */
diff --git a/dlls/wow64/syscall.c b/dlls/wow64/syscall.c
index 29d358595b0..2fd9f309b1b 100644
--- a/dlls/wow64/syscall.c
+++ b/dlls/wow64/syscall.c
@@ -242,6 +242,31 @@ NTSTATUS WINAPI wow64_NtSetDefaultUILanguage( UINT *args )
 }
 
 
+/**********************************************************************
+ *           wow64_wine_server_call
+ */
+NTSTATUS WINAPI wow64_wine_server_call( UINT *args )
+{
+    struct __server_request_info32 *req32 = get_ptr( &args );
+
+    unsigned int i;
+    NTSTATUS status;
+    struct __server_request_info req;
+
+    req.u.req = req32->u.req;
+    req.data_count = req32->data_count;
+    for (i = 0; i < req.data_count; i++)
+    {
+        req.data[i].ptr = ULongToPtr( req32->data[i].ptr );
+        req.data[i].size = req32->data[i].size;
+    }
+    req.reply_data = ULongToPtr( req32->reply_data );
+    status = wine_server_call( &req );
+    req32->u.reply = req.u.reply;
+    return status;
+}
+
+
 /**********************************************************************
  *           get_syscall_num
  */
diff --git a/dlls/wow64/syscall.h b/dlls/wow64/syscall.h
index 765456a8ab7..782a7a78c18 100644
--- a/dlls/wow64/syscall.h
+++ b/dlls/wow64/syscall.h
@@ -235,6 +235,7 @@
     SYSCALL_ENTRY( NtWriteVirtualMemory ) \
     SYSCALL_ENTRY( NtYieldExecution ) \
     SYSCALL_ENTRY( wine_nt_to_unix_file_name ) \
+    SYSCALL_ENTRY( wine_server_call ) \
     SYSCALL_ENTRY( wine_unix_to_nt_file_name )
 
 #endif /* __WOW64_SYSCALL_H */




More information about the wine-cvs mailing list