diff --git a/reactos/ntoskrnl/lpc/ntlpc/listen.c b/reactos/ntoskrnl/lpc/ntlpc/listen.c index aaa0b970d47..12adb0c4718 100644 --- a/reactos/ntoskrnl/lpc/ntlpc/listen.c +++ b/reactos/ntoskrnl/lpc/ntlpc/listen.c @@ -23,8 +23,30 @@ NTAPI NtListenPort(IN HANDLE PortHandle, OUT PPORT_MESSAGE ConnectMessage) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + NTSTATUS Status; + PAGED_CODE(); + LPCTRACE(LPC_LISTEN_DEBUG, "Handle: %lx\n", PortHandle); + + /* Wait forever for a connection request. */ + for (;;) + { + /* Do the wait */ + Status = NtReplyWaitReceivePort(PortHandle, + NULL, + NULL, + ConnectMessage); + + /* Accept only LPC_CONNECTION_REQUEST requests. */ + if ((Status != STATUS_SUCCESS) || + (LpcpGetMessageType(ConnectMessage) == LPC_CONNECTION_REQUEST)) + { + /* Break out */ + break; + } + } + + /* Return status */ + return Status; } diff --git a/reactos/ntoskrnl/lpc/ntlpc/lpc.h b/reactos/ntoskrnl/lpc/ntlpc/lpc.h index 0c276001bc2..f117829e64c 100644 --- a/reactos/ntoskrnl/lpc/ntlpc/lpc.h +++ b/reactos/ntoskrnl/lpc/ntlpc/lpc.h @@ -51,7 +51,7 @@ // Gets the message type, removing the kernel-mode flag // #define LpcpGetMessageType(x) \ - ((x)->u2.s2.MessageType &~ LPCP_KERNEL_MESSAGE) + ((x)->u2.s2.Type &~ LPCP_KERNEL_MESSAGE) // // Waits on an LPC semaphore for a receive operation