From fa1547f01da91ce7bee7ec1b6467123c83d95f85 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Mon, 30 Oct 2006 14:32:18 +0000 Subject: [PATCH] - Implement NtListenPort as a wrapper around NtReplyWaitReceivePort that only listens for connection requests. SMSS can now do this. svn path=/trunk/; revision=24668 --- reactos/ntoskrnl/lpc/ntlpc/listen.c | 26 ++++++++++++++++++++++++-- reactos/ntoskrnl/lpc/ntlpc/lpc.h | 2 +- 2 files changed, 25 insertions(+), 3 deletions(-) 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