Updated the minix driver
[reactos.git] / reactos / subsys / csrss / api / process.c
1 /* $Id: process.c,v 1.6 2000/03/22 18:36:00 dwelch Exp $
2 *
3 * reactos/subsys/csrss/api/process.c
4 *
5 * "\windows\ApiPort" port process management functions
6 *
7 * ReactOS Operating System
8 */
9
10 /* INCLUDES ******************************************************************/
11
12 #include <ddk/ntddk.h>
13
14 #include <csrss/csrss.h>
15
16 #include "api.h"
17
18 /* GLOBALS *******************************************************************/
19
20 static ULONG NrProcess;
21 static PCSRSS_PROCESS_DATA ProcessData[256];
22
23 /* FUNCTIONS *****************************************************************/
24
25 VOID CsrInitProcessData(VOID)
26 {
27 ULONG i;
28
29 for (i=0; i<256; i++)
30 {
31 ProcessData[i] = NULL;
32 }
33 NrProcess = 256;
34 }
35
36 PCSRSS_PROCESS_DATA CsrGetProcessData(ULONG ProcessId)
37 {
38 ULONG i;
39
40 for (i=0; i<NrProcess; i++)
41 {
42 if (ProcessData[i] &&
43 ProcessData[i]->ProcessId == ProcessId)
44 {
45 return(ProcessData[i]);
46 }
47 }
48 for (i=0; i<NrProcess; i++)
49 {
50 if (ProcessData[i] == NULL)
51 {
52 ProcessData[i] = RtlAllocateHeap(CsrssApiHeap,
53 HEAP_ZERO_MEMORY,
54 sizeof(CSRSS_PROCESS_DATA));
55 if (ProcessData[i] == NULL)
56 {
57 return(NULL);
58 }
59 ProcessData[i]->ProcessId = ProcessId;
60 return(ProcessData[i]);
61 }
62 }
63 DbgPrint("CSR: CsrGetProcessData() failed\n");
64 return(NULL);
65 }
66
67
68 NTSTATUS CsrCreateProcess (PCSRSS_PROCESS_DATA ProcessData,
69 PCSRSS_CREATE_PROCESS_REQUEST Request,
70 PLPCMESSAGE* LpcReply)
71 {
72 PCSRSS_PROCESS_DATA NewProcessData;
73 PCSRSS_API_REPLY Reply;
74
75 (*LpcReply) = RtlAllocateHeap(CsrssApiHeap,
76 HEAP_ZERO_MEMORY,
77 sizeof(LPCMESSAGE));
78 (*LpcReply)->ActualMessageLength = sizeof(CSRSS_API_REPLY);
79 (*LpcReply)->TotalMessageLength = sizeof(LPCMESSAGE);
80 Reply = (PCSRSS_API_REPLY)((*LpcReply)->MessageData);
81
82 NewProcessData = CsrGetProcessData(Request->NewProcessId);
83
84 if (NewProcessData == NULL)
85 {
86 Reply->Status = STATUS_NO_MEMORY;
87 return(STATUS_NO_MEMORY);
88 }
89
90 if (Request->Flags & DETACHED_PROCESS)
91 {
92 NewProcessData->Console = NULL;
93 }
94 else if (Request->Flags & CREATE_NEW_CONSOLE)
95 {
96 PCSRSS_CONSOLE Console;
97
98 Console = RtlAllocateHeap(CsrssApiHeap,
99 HEAP_ZERO_MEMORY,
100 sizeof(CSRSS_CONSOLE));
101 CsrInitConsole(ProcessData,
102 Console);
103 NewProcessData->Console = Console;
104 }
105 else
106 {
107 NewProcessData->Console = ProcessData->Console;
108 }
109
110 CsrInsertObject(NewProcessData,
111 &Reply->Data.CreateProcessReply.ConsoleHandle,
112 NewProcessData->Console);
113
114 DbgPrint("CSR: ConsoleHandle %x\n",
115 Reply->Data.CreateProcessReply.ConsoleHandle);
116 DisplayString(L"CSR: Did CreateProcess successfully\n");
117
118 return(STATUS_SUCCESS);
119 }
120
121 NTSTATUS CsrTerminateProcess(PCSRSS_PROCESS_DATA ProcessData,
122 PCSRSS_API_REQUEST LpcMessage,
123 PLPCMESSAGE* LpcReply)
124 {
125 PCSRSS_API_REPLY Reply;
126
127 (*LpcReply) = (PLPCMESSAGE)RtlAllocateHeap(CsrssApiHeap,
128 HEAP_ZERO_MEMORY,
129 sizeof(LPCMESSAGE));
130 (*LpcReply)->ActualMessageLength = sizeof(CSRSS_API_REPLY);
131 (*LpcReply)->TotalMessageLength = sizeof(LPCMESSAGE);
132 Reply = (PCSRSS_API_REPLY)((*LpcReply)->MessageData);
133
134 Reply->Status = STATUS_NOT_IMPLEMENTED;
135
136 return(STATUS_NOT_IMPLEMENTED);
137 }
138
139 NTSTATUS CsrConnectProcess(PCSRSS_PROCESS_DATA ProcessData,
140 PCSRSS_API_REQUEST Request,
141 PLPCMESSAGE* LpcReply)
142 {
143 PCSRSS_API_REPLY Reply;
144
145 (*LpcReply) = RtlAllocateHeap(CsrssApiHeap,
146 HEAP_ZERO_MEMORY,
147 sizeof(LPCMESSAGE));
148 (*LpcReply)->ActualMessageLength = sizeof(CSRSS_API_REPLY);
149 (*LpcReply)->TotalMessageLength = sizeof(LPCMESSAGE);
150 Reply = (PCSRSS_API_REPLY)((*LpcReply)->MessageData);
151
152 Reply->Status = STATUS_SUCCESS;
153
154 return(STATUS_SUCCESS);
155 }
156
157 /* EOF */