1 /* $Id: wapi.c,v 1.1 1999/12/22 14:48:30 dwelch Exp $
3 * reactos/subsys/csrss/init.c
5 * Initialize the CSRSS subsystem server process.
7 * ReactOS Operating System
11 /* INCLUDES ******************************************************************/
13 #include <ddk/ntddk.h>
14 #include <ntdll/rtl.h>
15 #include <csrss/csrss.h>
19 /* FUNCTIONS *****************************************************************/
21 static void Thread_Api2(HANDLE ServerPort
)
25 LPCMESSAGE LpcRequest
;
26 PCSRSS_API_REQUEST Request
;
27 CSRSS_API_REPLY Reply
;
28 CSRSS_PROCESS_DATA ProcessData
;
34 Status
= NtReplyWaitReceivePort(ServerPort
,
38 if (!NT_SUCCESS(Status
))
40 DisplayString(L
"NtReplyWaitReceivePort failed\n");
43 Request
= (PCSRSS_API_REQUEST
)LpcRequest
.MessageData
;
45 DisplayString(L
"Received request\n");
47 switch (Request
->Type
)
49 case CSRSS_CREATE_PROCESS
:
50 Reply
.Status
= CsrCreateProcess(&ProcessData
, Request
);
53 case CSRSS_TERMINATE_PROCESS
:
54 Reply
.Status
= CsrTerminateProcess(&ProcessData
, Request
);
57 case CSRSS_WRITE_CONSOLE
:
58 Reply
.Status
= CsrWriteConsole(&ProcessData
, Request
,
62 case CSRSS_READ_CONSOLE
:
63 Reply
.Status
= CsrReadConsole(&ProcessData
, Request
,
67 case CSRSS_NEW_CONSOLE
:
68 Reply
.Status
= CsrAllocConsole(&ProcessData
, Request
,
72 case CSRSS_FREE_CONSOLE
:
73 Reply
.Status
= CsrFreeConsole(&ProcessData
, Request
);
76 case CSRSS_CONNECT_PROCESS
:
77 Reply
.Status
= CsrConnectProcess(&ProcessData
, Request
);
80 Reply
.Status
= STATUS_NOT_IMPLEMENTED
;
83 LpcReply
= &LpcRequest
;
84 RtlCopyMemory(LpcReply
->MessageData
, &Reply
, sizeof(Reply
));
88 /**********************************************************************
93 * Handle connection requests from clients to the port
96 void Thread_Api(PVOID PortHandle
)
104 Status
= NtListenPort(PortHandle
, &Request
);
105 if (!NT_SUCCESS(Status
))
107 DisplayString(L
"NtListenPort() failed\n");
108 NtTerminateThread(NtCurrentThread(), Status
);
111 Status
= NtAcceptConnectPort(&ServerPort
,
117 if (!NT_SUCCESS(Status
))
119 DisplayString(L
"NtAcceptConnectPort() failed\n");
120 NtTerminateThread(NtCurrentThread(), Status
);
123 Status
= NtCompleteConnectPort(ServerPort
);
124 if (!NT_SUCCESS(Status
))
126 DisplayString(L
"NtCompleteConnectPort() failed\n");
127 NtTerminateThread(NtCurrentThread(), Status
);
130 Status
= RtlCreateUserThread(NtCurrentProcess(),
136 (PTHREAD_START_ROUTINE
)Thread_Api2
,
140 if (!NT_SUCCESS(Status
))
142 DisplayString(L
"Unable to create server thread\n");
144 NtTerminateThread(NtCurrentThread(), Status
);