Alexandre Julliard : wow64: Add thunks for the memory mapping syscalls.

Alexandre Julliard julliard at winehq.org
Tue Jul 27 15:51:00 CDT 2021


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Jul 27 11:21:23 2021 +0200

wow64: Add thunks for the memory mapping syscalls.

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

---

 dlls/wow64/syscall.h |  4 +++
 dlls/wow64/virtual.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 85 insertions(+)

diff --git a/dlls/wow64/syscall.h b/dlls/wow64/syscall.h
index 23d36ff3992..516e0d833c4 100644
--- a/dlls/wow64/syscall.h
+++ b/dlls/wow64/syscall.h
@@ -28,6 +28,7 @@
     SYSCALL_ENTRY( NtAllocateUuids ) \
     SYSCALL_ENTRY( NtAllocateVirtualMemory ) \
     SYSCALL_ENTRY( NtAllocateVirtualMemoryEx ) \
+    SYSCALL_ENTRY( NtAreMappedFilesTheSame ) \
     SYSCALL_ENTRY( NtCancelTimer ) \
     SYSCALL_ENTRY( NtClearEvent ) \
     SYSCALL_ENTRY( NtClearPowerRequest ) \
@@ -62,11 +63,13 @@
     SYSCALL_ENTRY( NtFlushVirtualMemory ) \
     SYSCALL_ENTRY( NtFreeVirtualMemory ) \
     SYSCALL_ENTRY( NtGetCurrentProcessorNumber ) \
+    SYSCALL_ENTRY( NtGetNlsSectionPtr ) \
     SYSCALL_ENTRY( NtListenPort ) \
     SYSCALL_ENTRY( NtLoadKey ) \
     SYSCALL_ENTRY( NtLoadKey2 ) \
     SYSCALL_ENTRY( NtLockVirtualMemory ) \
     SYSCALL_ENTRY( NtMakeTemporaryObject ) \
+    SYSCALL_ENTRY( NtMapViewOfSection ) \
     SYSCALL_ENTRY( NtOpenDirectoryObject ) \
     SYSCALL_ENTRY( NtOpenEvent ) \
     SYSCALL_ENTRY( NtOpenIoCompletion ) \
@@ -128,6 +131,7 @@
     SYSCALL_ENTRY( NtTerminateJobObject ) \
     SYSCALL_ENTRY( NtUnloadKey ) \
     SYSCALL_ENTRY( NtUnlockVirtualMemory ) \
+    SYSCALL_ENTRY( NtUnmapViewOfSection ) \
     SYSCALL_ENTRY( NtWaitForDebugEvent ) \
     SYSCALL_ENTRY( NtWaitForKeyedEvent ) \
     SYSCALL_ENTRY( NtWaitForMultipleObjects ) \
diff --git a/dlls/wow64/virtual.c b/dlls/wow64/virtual.c
index aa680a5fd26..27b46ee74e8 100644
--- a/dlls/wow64/virtual.c
+++ b/dlls/wow64/virtual.c
@@ -89,6 +89,18 @@ NTSTATUS WINAPI wow64_NtAllocateVirtualMemoryEx( UINT *args )
 }
 
 
+/**********************************************************************
+ *           wow64_NtAreMappedFilesTheSame
+ */
+NTSTATUS WINAPI wow64_NtAreMappedFilesTheSame( UINT *args )
+{
+    void *ptr1 = get_ptr( &args );
+    void *ptr2 = get_ptr( &args );
+
+    return NtAreMappedFilesTheSame( ptr1, ptr2 );
+}
+
+
 /**********************************************************************
  *           wow64_NtFlushVirtualMemory
  */
@@ -139,6 +151,32 @@ NTSTATUS WINAPI wow64_NtFreeVirtualMemory( UINT *args )
 }
 
 
+/**********************************************************************
+ *           wow64_NtGetNlsSectionPtr
+ */
+NTSTATUS WINAPI wow64_NtGetNlsSectionPtr( UINT *args )
+{
+    ULONG type = get_ulong( &args );
+    ULONG id = get_ulong( &args );
+    void *unknown = get_ptr( &args );
+    ULONG *addr32 = get_ptr( &args );
+    ULONG *size32 = get_ptr( &args );
+
+    void *addr;
+    SIZE_T size;
+    NTSTATUS status;
+
+    status = NtGetNlsSectionPtr( type, id, unknown, addr_32to64( &addr, addr32 ),
+                                 size_32to64( &size, size32 ));
+    if (!status)
+    {
+        put_addr( addr32, addr );
+        put_size( size32, size );
+    }
+    return status;
+}
+
+
 /**********************************************************************
  *           wow64_NtLockVirtualMemory
  */
@@ -164,6 +202,37 @@ NTSTATUS WINAPI wow64_NtLockVirtualMemory( UINT *args )
 }
 
 
+/**********************************************************************
+ *           wow64_NtMapViewOfSection
+ */
+NTSTATUS WINAPI wow64_NtMapViewOfSection( UINT *args )
+{
+    HANDLE handle = get_handle( &args );
+    HANDLE process = get_handle( &args );
+    ULONG *addr32 = get_ptr( &args );
+    ULONG_PTR zero_bits = get_ulong( &args );
+    SIZE_T commit = get_ulong( &args );
+    const LARGE_INTEGER *offset = get_ptr( &args );
+    ULONG *size32 = get_ptr( &args );
+    SECTION_INHERIT inherit = get_ulong( &args );
+    ULONG alloc = get_ulong( &args );
+    ULONG protect = get_ulong( &args );
+
+    void *addr;
+    SIZE_T size;
+    NTSTATUS status;
+
+    status = NtMapViewOfSection( handle, process, addr_32to64( &addr, addr32 ), get_zero_bits( zero_bits ),
+                                 commit, offset, size_32to64( &size, size32 ), inherit, alloc, protect );
+    if (NT_SUCCESS(status))
+    {
+        put_addr( addr32, addr );
+        put_size( size32, size );
+    }
+    return status;
+}
+
+
 /**********************************************************************
  *           wow64_NtProtectVirtualMemory
  */
@@ -235,6 +304,18 @@ NTSTATUS WINAPI wow64_NtUnlockVirtualMemory( UINT *args )
 }
 
 
+/**********************************************************************
+ *           wow64_NtUnmapViewOfSection
+ */
+NTSTATUS WINAPI wow64_NtUnmapViewOfSection( UINT *args )
+{
+    HANDLE process = get_handle( &args );
+    void *addr = get_ptr( &args );
+
+    return NtUnmapViewOfSection( process, addr );
+}
+
+
 /**********************************************************************
  *           wow64_NtWriteVirtualMemory
  */




More information about the wine-cvs mailing list