1 /* $Id: wapi.c,v 1.4 2000/02/29 23:57:46 ea Exp $
3 * reactos/subsys/csrss/api/wapi.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
"CSR: NtReplyWaitReceivePort failed\n");
47 Request
= (PCSRSS_API_REQUEST
)LpcRequest
.MessageData
;
49 ProcessData
= CsrGetProcessData(LpcRequest
.ClientProcessId
);
51 DisplayString(L
"CSR: 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("CSR: Failed to create private heap, aborting\n");
127 CsrInitProcessData();
131 Status
= NtListenPort(PortHandle
, &Request
);
132 if (!NT_SUCCESS(Status
))
134 DisplayString(L
"CSR: NtListenPort() failed\n");
135 NtTerminateThread(NtCurrentThread(), Status
);
138 Status
= NtAcceptConnectPort(&ServerPort
,
144 if (!NT_SUCCESS(Status
))
146 DisplayString(L
"CSR: NtAcceptConnectPort() failed\n");
147 NtTerminateThread(NtCurrentThread(), Status
);
150 Status
= NtCompleteConnectPort(ServerPort
);
151 if (!NT_SUCCESS(Status
))
153 DisplayString(L
"CSR: NtCompleteConnectPort() failed\n");
154 NtTerminateThread(NtCurrentThread(), Status
);
157 Status
= RtlCreateUserThread(NtCurrentProcess(),
163 (PTHREAD_START_ROUTINE
)Thread_Api2
,
167 if (!NT_SUCCESS(Status
))
169 DisplayString(L
"CSR: Unable to create server thread\n");
171 NtTerminateThread(NtCurrentThread(), Status
);