1 /* $Id: process.c,v 1.6 2000/03/22 18:36:00 dwelch Exp $
3 * reactos/subsys/csrss/api/process.c
5 * "\windows\ApiPort" port process management functions
7 * ReactOS Operating System
10 /* INCLUDES ******************************************************************/
12 #include <ddk/ntddk.h>
14 #include <csrss/csrss.h>
18 /* GLOBALS *******************************************************************/
20 static ULONG NrProcess
;
21 static PCSRSS_PROCESS_DATA ProcessData
[256];
23 /* FUNCTIONS *****************************************************************/
25 VOID
CsrInitProcessData(VOID
)
31 ProcessData
[i
] = NULL
;
36 PCSRSS_PROCESS_DATA
CsrGetProcessData(ULONG ProcessId
)
40 for (i
=0; i
<NrProcess
; i
++)
43 ProcessData
[i
]->ProcessId
== ProcessId
)
45 return(ProcessData
[i
]);
48 for (i
=0; i
<NrProcess
; i
++)
50 if (ProcessData
[i
] == NULL
)
52 ProcessData
[i
] = RtlAllocateHeap(CsrssApiHeap
,
54 sizeof(CSRSS_PROCESS_DATA
));
55 if (ProcessData
[i
] == NULL
)
59 ProcessData
[i
]->ProcessId
= ProcessId
;
60 return(ProcessData
[i
]);
63 DbgPrint("CSR: CsrGetProcessData() failed\n");
68 NTSTATUS
CsrCreateProcess (PCSRSS_PROCESS_DATA ProcessData
,
69 PCSRSS_CREATE_PROCESS_REQUEST Request
,
70 PLPCMESSAGE
* LpcReply
)
72 PCSRSS_PROCESS_DATA NewProcessData
;
73 PCSRSS_API_REPLY Reply
;
75 (*LpcReply
) = RtlAllocateHeap(CsrssApiHeap
,
78 (*LpcReply
)->ActualMessageLength
= sizeof(CSRSS_API_REPLY
);
79 (*LpcReply
)->TotalMessageLength
= sizeof(LPCMESSAGE
);
80 Reply
= (PCSRSS_API_REPLY
)((*LpcReply
)->MessageData
);
82 NewProcessData
= CsrGetProcessData(Request
->NewProcessId
);
84 if (NewProcessData
== NULL
)
86 Reply
->Status
= STATUS_NO_MEMORY
;
87 return(STATUS_NO_MEMORY
);
90 if (Request
->Flags
& DETACHED_PROCESS
)
92 NewProcessData
->Console
= NULL
;
94 else if (Request
->Flags
& CREATE_NEW_CONSOLE
)
96 PCSRSS_CONSOLE Console
;
98 Console
= RtlAllocateHeap(CsrssApiHeap
,
100 sizeof(CSRSS_CONSOLE
));
101 CsrInitConsole(ProcessData
,
103 NewProcessData
->Console
= Console
;
107 NewProcessData
->Console
= ProcessData
->Console
;
110 CsrInsertObject(NewProcessData
,
111 &Reply
->Data
.CreateProcessReply
.ConsoleHandle
,
112 NewProcessData
->Console
);
114 DbgPrint("CSR: ConsoleHandle %x\n",
115 Reply
->Data
.CreateProcessReply
.ConsoleHandle
);
116 DisplayString(L
"CSR: Did CreateProcess successfully\n");
118 return(STATUS_SUCCESS
);
121 NTSTATUS
CsrTerminateProcess(PCSRSS_PROCESS_DATA ProcessData
,
122 PCSRSS_API_REQUEST LpcMessage
,
123 PLPCMESSAGE
* LpcReply
)
125 PCSRSS_API_REPLY Reply
;
127 (*LpcReply
) = (PLPCMESSAGE
)RtlAllocateHeap(CsrssApiHeap
,
130 (*LpcReply
)->ActualMessageLength
= sizeof(CSRSS_API_REPLY
);
131 (*LpcReply
)->TotalMessageLength
= sizeof(LPCMESSAGE
);
132 Reply
= (PCSRSS_API_REPLY
)((*LpcReply
)->MessageData
);
134 Reply
->Status
= STATUS_NOT_IMPLEMENTED
;
136 return(STATUS_NOT_IMPLEMENTED
);
139 NTSTATUS
CsrConnectProcess(PCSRSS_PROCESS_DATA ProcessData
,
140 PCSRSS_API_REQUEST Request
,
141 PLPCMESSAGE
* LpcReply
)
143 PCSRSS_API_REPLY Reply
;
145 (*LpcReply
) = RtlAllocateHeap(CsrssApiHeap
,
148 (*LpcReply
)->ActualMessageLength
= sizeof(CSRSS_API_REPLY
);
149 (*LpcReply
)->TotalMessageLength
= sizeof(LPCMESSAGE
);
150 Reply
= (PCSRSS_API_REPLY
)((*LpcReply
)->MessageData
);
152 Reply
->Status
= STATUS_SUCCESS
;
154 return(STATUS_SUCCESS
);