1 /* $Id: wapi.c,v 1.2 1999/12/30 01:51:42 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 /* GLOBALS *******************************************************************/
23 /* FUNCTIONS *****************************************************************/
25 static void Thread_Api2(HANDLE ServerPort
)
29 LPCMESSAGE LpcRequest
;
30 PCSRSS_API_REQUEST Request
;
31 CSRSS_API_REPLY Reply
;
32 PCSRSS_PROCESS_DATA ProcessData
;
38 Status
= NtReplyWaitReceivePort(ServerPort
,
42 if (!NT_SUCCESS(Status
))
44 DisplayString(L
"NtReplyWaitReceivePort failed\n");
47 Request
= (PCSRSS_API_REQUEST
)LpcRequest
.MessageData
;
49 ProcessData
= CsrGetProcessData(LpcRequest
.ClientProcessId
);
51 DisplayString(L
"Received request\n");
53 switch (Request
->Type
)
55 case CSRSS_CREATE_PROCESS
:
56 Reply
.Status
= CsrCreateProcess(ProcessData
,
60 case CSRSS_TERMINATE_PROCESS
:
61 Reply
.Status
= CsrTerminateProcess(ProcessData
,
65 case CSRSS_WRITE_CONSOLE
:
66 Reply
.Status
= CsrWriteConsole(ProcessData
,
71 case CSRSS_READ_CONSOLE
:
72 Reply
.Status
= CsrReadConsole(ProcessData
,
77 case CSRSS_ALLOC_CONSOLE
:
78 Reply
.Status
= CsrAllocConsole(ProcessData
,
83 case CSRSS_FREE_CONSOLE
:
84 Reply
.Status
= CsrFreeConsole(ProcessData
,
88 case CSRSS_CONNECT_PROCESS
:
89 Reply
.Status
= CsrConnectProcess(ProcessData
,
93 Reply
.Status
= STATUS_NOT_IMPLEMENTED
;
96 LpcReply
= &LpcRequest
;
97 RtlCopyMemory(LpcReply
->MessageData
, &Reply
, sizeof(Reply
));
101 /**********************************************************************
106 * Handle connection requests from clients to the port
107 * "\Windows\ApiPort".
109 void Thread_Api(PVOID PortHandle
)
115 CsrssApiHeap
= RtlCreateHeap(HEAP_GROWABLE
,
121 if (CsrssApiHeap
== NULL
)
123 PrintString("Failed to create private heap, aborting\n");
129 Status
= NtListenPort(PortHandle
, &Request
);
130 if (!NT_SUCCESS(Status
))
132 DisplayString(L
"NtListenPort() failed\n");
133 NtTerminateThread(NtCurrentThread(), Status
);
136 Status
= NtAcceptConnectPort(&ServerPort
,
142 if (!NT_SUCCESS(Status
))
144 DisplayString(L
"NtAcceptConnectPort() failed\n");
145 NtTerminateThread(NtCurrentThread(), Status
);
148 Status
= NtCompleteConnectPort(ServerPort
);
149 if (!NT_SUCCESS(Status
))
151 DisplayString(L
"NtCompleteConnectPort() failed\n");
152 NtTerminateThread(NtCurrentThread(), Status
);
155 Status
= RtlCreateUserThread(NtCurrentProcess(),
161 (PTHREAD_START_ROUTINE
)Thread_Api2
,
165 if (!NT_SUCCESS(Status
))
167 DisplayString(L
"Unable to create server thread\n");
169 NtTerminateThread(NtCurrentThread(), Status
);