Corrected additional object manager issues pointed by Philip Susi
[reactos.git] / reactos / subsys / csrss / api / conio.c
1 /* $Id: conio.c,v 1.1 1999/12/22 14:48:30 dwelch Exp $
2 *
3 * reactos/subsys/csrss/api/conio.c
4 *
5 * Console I/O functions
6 *
7 * ReactOS Operating System
8 */
9
10 /* INCLUDES ******************************************************************/
11
12 #include <ddk/ntddk.h>
13
14 #include "csrss.h"
15 #include "api.h"
16
17 /* GLOBALS *******************************************************************/
18
19 static HANDLE ConsoleDevice;
20 static HANDLE KeyboardDevice;
21
22 /* FUNCTIONS *****************************************************************/
23
24 NTSTATUS CsrWriteConsole(PCSRSS_CONIO_PROCESS ProcessData,
25 PCSRSS_REQUEST Message,
26 PULONG CharCount)
27 {
28 NTSTATUS Status;
29
30 if (ProcessData->Console == NULL)
31 {
32 return(STATUS_UNSUCCESSFUL);
33 }
34
35 Status = NtWaitForSingleObject(ProcessData->Console->LockMutant,
36 TRUE,
37 NULL);
38 if (!NT_SUCCESS(Status))
39 {
40 return(Status);
41 }
42 if (Status == STATUS_ALERTED ||
43 Status == STATUS_USER_APC)
44 {
45 return(Status);
46 }
47
48 if (TopLevel == TRUE)
49 {
50 Status = NtReleaseMutant(ProcessData->Console->LockMutant, NULL);
51 if (!NT_SUCCESS(Status))
52 {
53 return(Status);
54 }
55
56 return(Status);
57 }
58 else
59 {
60 Status = NtReleaseMutant(ProcessData->Console->LockMutant, NULL);
61 if (!NT_SUCCESS(Status))
62 {
63 return(Status);
64 }
65
66 return(Status);
67 }
68 }
69
70 PCSRSS_CONIO_PROCESS CsrAllocConioProcess(VOID)
71 {
72 PCSRSS_CONIO_PROCESS ProcessData;
73
74 ThreadData = RtlAllocHeap(NULL, HEAP_ZERO_MEMORY,
75 sizeof(PROCESS_CONIO_THREAD));
76 if (ThreadData == NULL)
77 {
78 return(NULL);
79 }
80 ProcessData->Console = NULL;
81 return(ProcessData);
82 }
83
84 VOID CsrFreeConioProcess(PCSRSS_CONIO_PROCESS ProcessData)
85 {
86 RtlFreeHeap(NULL, 0, ProcessData);
87 }
88
89
90
91 /* EOF */