wow64: Add thunks for the memory mapping syscalls.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2021-07-27 11:21:23 +02:00
parent dffe2bf8e2
commit 458b859ddf
2 changed files with 85 additions and 0 deletions

View File

@ -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 ) \

View File

@ -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
*/