From: Zhiyi Zhang <zzhang@codeweavers.com> --- dlls/ntdll/ntdll.spec | 1 + dlls/ntdll/signal_arm64ec.c | 1 + dlls/ntdll/unix/alpc.c | 6 ++++++ dlls/wow64/syscall.c | 14 ++++++++++++++ 4 files changed, 22 insertions(+) diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index d64a680534b..21b3cb6e6de 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -159,6 +159,7 @@ @ stdcall -syscall NtAlpcConnectPort(ptr ptr ptr ptr long ptr ptr ptr ptr ptr ptr) @ stdcall -syscall NtAlpcCreatePort(ptr ptr ptr) @ stdcall -syscall NtAlpcDisconnectPort(ptr long) +@ stdcall -syscall NtAlpcImpersonateClientOfPort(ptr ptr ptr) @ stdcall -syscall NtAlpcSendWaitReceivePort(ptr long ptr ptr ptr ptr ptr ptr) @ stub -syscall=0x004c NtApphelpCacheControl @ stdcall -syscall NtAreMappedFilesTheSame(ptr ptr) diff --git a/dlls/ntdll/signal_arm64ec.c b/dlls/ntdll/signal_arm64ec.c index db9546d0703..baee1f23722 100644 --- a/dlls/ntdll/signal_arm64ec.c +++ b/dlls/ntdll/signal_arm64ec.c @@ -368,6 +368,7 @@ DEFINE_SYSCALL(NtAlpcAcceptConnectPort, (HANDLE *communication_port, HANDLE conn DEFINE_SYSCALL(NtAlpcConnectPort, (HANDLE *port_handle, UNICODE_STRING *port_name, OBJECT_ATTRIBUTES *obj_attr, ALPC_PORT_ATTRIBUTES *port_attr, DWORD flags, PSID required_server_sid, ALPC_PORT_MESSAGE *connect_msg, SIZE_T *connect_msg_size, ALPC_MESSAGE_ATTRIBUTES *send_msg_attr, ALPC_MESSAGE_ATTRIBUTES *recv_msg_attr, LARGE_INTEGER *timeout)) DEFINE_SYSCALL(NtAlpcCreatePort, (HANDLE *port_handle, OBJECT_ATTRIBUTES *obj_attr, ALPC_PORT_ATTRIBUTES *port_attr)) DEFINE_SYSCALL(NtAlpcDisconnectPort, (HANDLE port_handle, ULONG flags)) +DEFINE_SYSCALL(NtAlpcImpersonateClientOfPort, (HANDLE port_handle, ALPC_PORT_MESSAGE *msg, void *reserved )) DEFINE_SYSCALL(NtAlpcSendWaitReceivePort, (HANDLE port_handle, DWORD flags, ALPC_PORT_MESSAGE *send_msg, ALPC_MESSAGE_ATTRIBUTES *send_msg_attr, ALPC_PORT_MESSAGE *recv_msg, SIZE_T *recv_buffer_size, ALPC_MESSAGE_ATTRIBUTES *recv_msg_attr, LARGE_INTEGER *timeout)) DEFINE_SYSCALL(NtApphelpCacheControl, (ULONG class, void *context)) DEFINE_SYSCALL(NtAreMappedFilesTheSame, (PVOID addr1, PVOID addr2)) diff --git a/dlls/ntdll/unix/alpc.c b/dlls/ntdll/unix/alpc.c index d6ad52974b1..c708b588011 100644 --- a/dlls/ntdll/unix/alpc.c +++ b/dlls/ntdll/unix/alpc.c @@ -75,3 +75,9 @@ NTSTATUS WINAPI NtAlpcSendWaitReceivePort( HANDLE port_handle, ULONG flags, send_msg_attr, recv_msg, recv_buffer_size, recv_msg_attr, timeout ); return STATUS_NOT_IMPLEMENTED; } + +NTSTATUS WINAPI NtAlpcImpersonateClientOfPort( HANDLE port_handle, ALPC_PORT_MESSAGE *msg, void *reserved ) +{ + FIXME( "%p, %p, %p stub!\n", port_handle, msg, reserved ); + return STATUS_NOT_IMPLEMENTED; +} diff --git a/dlls/wow64/syscall.c b/dlls/wow64/syscall.c index b60682b8022..d52c52fef8e 100644 --- a/dlls/wow64/syscall.c +++ b/dlls/wow64/syscall.c @@ -580,6 +580,20 @@ NTSTATUS WINAPI wow64_NtAlpcDisconnectPort( UINT *args ) return NtAlpcDisconnectPort( handle, flags ); } +/********************************************************************** + * wow64_NtAlpcImpersonateClientOfPort + */ +NTSTATUS WINAPI wow64_NtAlpcImpersonateClientOfPort( UINT *args ) +{ + HANDLE handle = get_handle( &args ); + ALPC_PORT_MESSAGE32 *msg32 = get_ptr( &args ); + void *reserved = get_ptr( &args ); + + ALPC_PORT_MESSAGE *msg; + + return NtAlpcImpersonateClientOfPort( handle, alpc_port_message_32to64( &msg, msg32 ? (sizeof(*msg) + msg32->DataLength) : 0, msg32, TRUE ), reserved ); +} + /********************************************************************** * wow64_NtAlpcSendWaitReceivePort */ -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10932