ReactOS  0.4.14-dev-50-g13bb5e2
listen.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS Kernel
3  * LICENSE: GPL - See COPYING in the top level directory
4  * FILE: ntoskrnl/lpc/listen.c
5  * PURPOSE: Local Procedure Call: Listening
6  * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
7  */
8 
9 /* INCLUDES ******************************************************************/
10 
11 #include <ntoskrnl.h>
12 #define NDEBUG
13 #include <debug.h>
14 
15 /* PUBLIC FUNCTIONS **********************************************************/
16 
17 /*
18  * @implemented
19  */
21 NTAPI
22 NtListenPort(IN HANDLE PortHandle,
23  OUT PPORT_MESSAGE ConnectMessage)
24 {
26 
27  PAGED_CODE();
28  LPCTRACE(LPC_LISTEN_DEBUG, "Handle: %p\n", PortHandle);
29 
30  /* Wait forever for a connection request */
31  for (;;)
32  {
33  /* Do the wait */
34  Status = NtReplyWaitReceivePort(PortHandle,
35  NULL,
36  NULL,
37  ConnectMessage);
38 
39  _SEH2_TRY
40  {
41  /* Accept only LPC_CONNECTION_REQUEST requests */
42  if ((Status != STATUS_SUCCESS) ||
43  (LpcpGetMessageType(ConnectMessage) == LPC_CONNECTION_REQUEST))
44  {
45  /* Break out */
46  _SEH2_YIELD(break);
47  }
48  }
50  {
52  _SEH2_YIELD(break);
53  }
54  _SEH2_END;
55  }
56 
57  /* Return status */
58  return Status;
59 }
60 
61 /* EOF */
#define LpcpGetMessageType(x)
Definition: lpc_x.h:12
#define IN
Definition: typedefs.h:38
#define LPC_LISTEN_DEBUG
Definition: lpc.h:20
LONG NTSTATUS
Definition: precomp.h:26
#define PAGED_CODE()
Definition: video.h:57
_SEH2_TRY
Definition: create.c:4250
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
smooth NULL
Definition: ftsmooth.c:416
#define _SEH2_YIELD(STMT_)
Definition: pseh2_64.h:8
NTSTATUS NTAPI NtReplyWaitReceivePort(IN HANDLE PortHandle, OUT PVOID *PortContext OPTIONAL, IN PPORT_MESSAGE ReplyMessage OPTIONAL, OUT PPORT_MESSAGE ReceiveMessage)
Definition: reply.c:743
Status
Definition: gdiplustypes.h:24
_SEH2_END
Definition: create.c:4424
#define OUT
Definition: typedefs.h:39
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:6
#define _SEH2_GetExceptionCode()
Definition: pseh2_64.h:12
return STATUS_SUCCESS
Definition: btrfs.c:2966
#define LPCTRACE(x, fmt,...)
Definition: lpc.h:49
NTSTATUS NTAPI NtListenPort(IN HANDLE PortHandle, OUT PPORT_MESSAGE ConnectMessage)
Definition: listen.c:22