Alexandre Julliard : wow64: Add thunks for some general synchronization syscalls.
Alexandre Julliard
julliard at winehq.org
Fri Jul 23 18:08:01 CDT 2021
Module: wine
Branch: master
Commit: 1409b421d22e5c916e1fea7e9d04543eeebb8d8f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=1409b421d22e5c916e1fea7e9d04543eeebb8d8f
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri Jul 23 17:47:39 2021 +0200
wow64: Add thunks for some general synchronization syscalls.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/wow64/sync.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++
dlls/wow64/syscall.h | 10 ++++-
2 files changed, 114 insertions(+), 1 deletion(-)
diff --git a/dlls/wow64/sync.c b/dlls/wow64/sync.c
index 84fd2e8111a..c748668620a 100644
--- a/dlls/wow64/sync.c
+++ b/dlls/wow64/sync.c
@@ -282,6 +282,18 @@ NTSTATUS WINAPI wow64_NtDebugContinue( UINT *args )
}
+/**********************************************************************
+ * wow64_NtDelayExecution
+ */
+NTSTATUS WINAPI wow64_NtDelayExecution( UINT *args )
+{
+ BOOLEAN alertable = get_ulong( &args );
+ const LARGE_INTEGER *timeout = get_ptr( &args );
+
+ return NtDelayExecution( alertable, timeout );
+}
+
+
/**********************************************************************
* wow64_NtOpenDirectoryObject
*/
@@ -556,6 +568,18 @@ NTSTATUS WINAPI wow64_NtQueryMutant( UINT *args )
}
+/**********************************************************************
+ * wow64_NtQueryPerformanceCounter
+ */
+NTSTATUS WINAPI wow64_NtQueryPerformanceCounter( UINT *args )
+{
+ LARGE_INTEGER *counter = get_ptr( &args );
+ LARGE_INTEGER *frequency = get_ptr( &args );
+
+ return NtQueryPerformanceCounter( counter, frequency );
+}
+
+
/**********************************************************************
* wow64_NtQuerySemaphore
*/
@@ -604,6 +628,19 @@ NTSTATUS WINAPI wow64_NtQueryTimer( UINT *args )
}
+/**********************************************************************
+ * wow64_NtQueryTimerResolution
+ */
+NTSTATUS WINAPI wow64_NtQueryTimerResolution( UINT *args )
+{
+ ULONG *min_res = get_ptr( &args );
+ ULONG *max_res = get_ptr( &args );
+ ULONG *current_res = get_ptr( &args );
+
+ return NtQueryTimerResolution( min_res, max_res, current_res );
+}
+
+
/**********************************************************************
* wow64_NtReleaseKeyedEvent
*/
@@ -715,6 +752,33 @@ NTSTATUS WINAPI wow64_NtSetTimer( UINT *args )
}
+/**********************************************************************
+ * wow64_NtSetTimerResolution
+ */
+NTSTATUS WINAPI wow64_NtSetTimerResolution( UINT *args )
+{
+ ULONG res = get_ulong( &args );
+ BOOLEAN set = get_ulong( &args );
+ ULONG *current_res = get_ptr( &args );
+
+ return NtSetTimerResolution( res, set, current_res );
+}
+
+
+/**********************************************************************
+ * wow64_NtSignalAndWaitForSingleObject
+ */
+NTSTATUS WINAPI wow64_NtSignalAndWaitForSingleObject( UINT *args )
+{
+ HANDLE signal = get_handle( &args );
+ HANDLE wait = get_handle( &args );
+ BOOLEAN alertable = get_ulong( &args );
+ const LARGE_INTEGER *timeout = get_ptr( &args );
+
+ return NtSignalAndWaitForSingleObject( signal, wait, alertable, timeout );
+}
+
+
/**********************************************************************
* wow64_NtTerminateJobObject
*/
@@ -813,3 +877,44 @@ NTSTATUS WINAPI wow64_NtWaitForKeyedEvent( UINT *args )
return NtWaitForKeyedEvent( handle, key, alertable, timeout );
}
+
+
+/**********************************************************************
+ * wow64_NtWaitForMultipleObjects
+ */
+NTSTATUS WINAPI wow64_NtWaitForMultipleObjects( UINT *args )
+{
+ DWORD count = get_ulong( &args );
+ LONG *handles_ptr = get_ptr( &args );
+ BOOLEAN wait_any = get_ulong( &args );
+ BOOLEAN alertable = get_ulong( &args );
+ const LARGE_INTEGER *timeout = get_ptr( &args );
+
+ HANDLE handles[MAXIMUM_WAIT_OBJECTS];
+ DWORD i;
+
+ for (i = 0; i < count && i < MAXIMUM_WAIT_OBJECTS; i++) handles[i] = LongToHandle( handles_ptr[i] );
+ return NtWaitForMultipleObjects( count, handles, wait_any, alertable, timeout );
+}
+
+
+/**********************************************************************
+ * wow64_NtWaitForSingleObject
+ */
+NTSTATUS WINAPI wow64_NtWaitForSingleObject( UINT *args )
+{
+ HANDLE handle = get_handle( &args );
+ BOOLEAN alertable = get_ulong( &args );
+ const LARGE_INTEGER *timeout = get_ptr( &args );
+
+ return NtWaitForSingleObject( handle, alertable, timeout );
+}
+
+
+/**********************************************************************
+ * wow64_NtYieldExecution
+ */
+NTSTATUS WINAPI wow64_NtYieldExecution( UINT *args )
+{
+ return NtYieldExecution();
+}
diff --git a/dlls/wow64/syscall.h b/dlls/wow64/syscall.h
index 60631a2d41c..91552953088 100644
--- a/dlls/wow64/syscall.h
+++ b/dlls/wow64/syscall.h
@@ -39,6 +39,7 @@
SYSCALL_ENTRY( NtCreateSymbolicLinkObject ) \
SYSCALL_ENTRY( NtCreateTimer ) \
SYSCALL_ENTRY( NtDebugContinue ) \
+ SYSCALL_ENTRY( NtDelayExecution ) \
SYSCALL_ENTRY( NtDeleteAtom ) \
SYSCALL_ENTRY( NtFindAtom ) \
SYSCALL_ENTRY( NtGetCurrentProcessorNumber ) \
@@ -60,9 +61,11 @@
SYSCALL_ENTRY( NtQueryInstallUILanguage ) \
SYSCALL_ENTRY( NtQueryIoCompletion ) \
SYSCALL_ENTRY( NtQueryMutant ) \
+ SYSCALL_ENTRY( NtQueryPerformanceCounter ) \
SYSCALL_ENTRY( NtQuerySemaphore ) \
SYSCALL_ENTRY( NtQuerySymbolicLinkObject ) \
SYSCALL_ENTRY( NtQueryTimer ) \
+ SYSCALL_ENTRY( NtQueryTimerResolution ) \
SYSCALL_ENTRY( NtReleaseKeyedEvent ) \
SYSCALL_ENTRY( NtReleaseMutant ) \
SYSCALL_ENTRY( NtReleaseSemaphore ) \
@@ -73,8 +76,13 @@
SYSCALL_ENTRY( NtSetInformationDebugObject ) \
SYSCALL_ENTRY( NtSetIoCompletion ) \
SYSCALL_ENTRY( NtSetTimer ) \
+ SYSCALL_ENTRY( NtSetTimerResolution ) \
+ SYSCALL_ENTRY( NtSignalAndWaitForSingleObject ) \
SYSCALL_ENTRY( NtTerminateJobObject ) \
SYSCALL_ENTRY( NtWaitForDebugEvent ) \
- SYSCALL_ENTRY( NtWaitForKeyedEvent )
+ SYSCALL_ENTRY( NtWaitForKeyedEvent ) \
+ SYSCALL_ENTRY( NtWaitForMultipleObjects ) \
+ SYSCALL_ENTRY( NtWaitForSingleObject ) \
+ SYSCALL_ENTRY( NtYieldExecution )
#endif /* __WOW64_SYSCALL_H */
More information about the wine-cvs
mailing list