diff --git a/dlls/wow64/sync.c b/dlls/wow64/sync.c index 7d8ad3edac3..84fd2e8111a 100644 --- a/dlls/wow64/sync.c +++ b/dlls/wow64/sync.c @@ -223,6 +223,29 @@ NTSTATUS WINAPI wow64_NtCreateSemaphore( UINT *args ) } +/********************************************************************** + * wow64_NtCreateSymbolicLinkObject + */ +NTSTATUS WINAPI wow64_NtCreateSymbolicLinkObject( UINT *args ) +{ + ULONG *handle_ptr = get_ptr( &args ); + ACCESS_MASK access = get_ulong( &args ); + OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args ); + UNICODE_STRING32 *target32 = get_ptr( &args ); + + struct object_attr64 attr; + UNICODE_STRING target; + HANDLE handle = 0; + NTSTATUS status; + + *handle_ptr = 0; + status = NtCreateSymbolicLinkObject( &handle, access, objattr_32to64( &attr, attr32 ), + unicode_str_32to64( &target, target32 )); + put_handle( handle_ptr, handle ); + return status; +} + + /********************************************************************** * wow64_NtCreateTimer */ @@ -399,6 +422,26 @@ NTSTATUS WINAPI wow64_NtOpenSemaphore( UINT *args ) } +/********************************************************************** + * wow64_NtOpenSymbolicLinkObject + */ +NTSTATUS WINAPI wow64_NtOpenSymbolicLinkObject( UINT *args ) +{ + ULONG *handle_ptr = get_ptr( &args ); + ACCESS_MASK access = get_ulong( &args ); + OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args ); + + struct object_attr64 attr; + HANDLE handle = 0; + NTSTATUS status; + + *handle_ptr = 0; + status = NtOpenSymbolicLinkObject( &handle, access, objattr_32to64( &attr, attr32 )); + put_handle( handle_ptr, handle ); + return status; +} + + /********************************************************************** * wow64_NtOpenTimer */ @@ -528,6 +571,24 @@ NTSTATUS WINAPI wow64_NtQuerySemaphore( UINT *args ) } +/********************************************************************** + * wow64_NtQuerySymbolicLinkObject + */ +NTSTATUS WINAPI wow64_NtQuerySymbolicLinkObject( UINT *args ) +{ + HANDLE handle = get_handle( &args ); + UNICODE_STRING32 *target32 = get_ptr( &args ); + ULONG *retlen = get_ptr( &args ); + + UNICODE_STRING target; + NTSTATUS status; + + status = NtQuerySymbolicLinkObject( handle, unicode_str_32to64( &target, target32 ), retlen ); + if (!status) target32->Length = target.Length; + return status; +} + + /********************************************************************** * wow64_NtQueryTimer */ diff --git a/dlls/wow64/syscall.h b/dlls/wow64/syscall.h index 677e92f1a37..60631a2d41c 100644 --- a/dlls/wow64/syscall.h +++ b/dlls/wow64/syscall.h @@ -36,6 +36,7 @@ SYSCALL_ENTRY( NtCreateKeyedEvent ) \ SYSCALL_ENTRY( NtCreateMutant ) \ SYSCALL_ENTRY( NtCreateSemaphore ) \ + SYSCALL_ENTRY( NtCreateSymbolicLinkObject ) \ SYSCALL_ENTRY( NtCreateTimer ) \ SYSCALL_ENTRY( NtDebugContinue ) \ SYSCALL_ENTRY( NtDeleteAtom ) \ @@ -48,6 +49,7 @@ SYSCALL_ENTRY( NtOpenKeyedEvent ) \ SYSCALL_ENTRY( NtOpenMutant ) \ SYSCALL_ENTRY( NtOpenSemaphore ) \ + SYSCALL_ENTRY( NtOpenSymbolicLinkObject ) \ SYSCALL_ENTRY( NtOpenTimer ) \ SYSCALL_ENTRY( NtPulseEvent ) \ SYSCALL_ENTRY( NtQueryDefaultLocale ) \ @@ -59,6 +61,7 @@ SYSCALL_ENTRY( NtQueryIoCompletion ) \ SYSCALL_ENTRY( NtQueryMutant ) \ SYSCALL_ENTRY( NtQuerySemaphore ) \ + SYSCALL_ENTRY( NtQuerySymbolicLinkObject ) \ SYSCALL_ENTRY( NtQueryTimer ) \ SYSCALL_ENTRY( NtReleaseKeyedEvent ) \ SYSCALL_ENTRY( NtReleaseMutant ) \