[CONSOLE.DLL]
[reactos.git] / win32ss / user / consrv / consrv.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Console Server DLL
4 * FILE: win32ss/user/consrv/consrv.h
5 * PURPOSE: Main header - Definitions
6 * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
7 */
8
9 #ifndef __CONSRV_H__
10 #define __CONSRV_H__
11
12 #pragma once
13
14 /* PSDK/NDK Headers */
15 #include <stdarg.h>
16 #define WIN32_NO_STATUS
17 #define _INC_WINDOWS
18 #define COM_NO_WINDOWS_H
19 #include <windef.h>
20 #include <winbase.h>
21 #include <wingdi.h>
22 #include <winnls.h>
23 #include <winreg.h>
24 #include <wincon.h>
25 #include <winuser.h>
26 #define NTOS_MODE_USER
27 #include <ndk/iofuncs.h>
28 #include <ndk/mmfuncs.h>
29 #include <ndk/obfuncs.h>
30 #include <ndk/psfuncs.h>
31 #include <ndk/setypes.h>
32 #include <ndk/rtlfuncs.h>
33
34 /* Public Win32K Headers */
35 #include <ntuser.h>
36
37 /* PSEH for SEH Support */
38 #include <pseh/pseh2.h>
39
40 /* CSRSS Header */
41 #include <csr/csrsrv.h>
42
43 /* CONSOLE Headers */
44 #include <win/console.h>
45 #include <win/conmsg.h>
46
47 #include "resource.h"
48
49
50 extern HINSTANCE ConSrvDllInstance;
51 extern HANDLE ConSrvHeap;
52
53 /* Object type magic numbers */
54 #define CONIO_INPUT_BUFFER_MAGIC 0x00000001 // --> Input-type handles
55 #define CONIO_SCREEN_BUFFER_MAGIC 0x00000002 // --> Output-type handles
56
57 /* Common things to input/output/console objects */
58 typedef struct Object_tt
59 {
60 ULONG Type;
61 struct _CONSOLE *Console;
62 LONG AccessRead, AccessWrite;
63 LONG ExclusiveRead, ExclusiveWrite;
64 LONG HandleCount;
65 } Object_t;
66
67
68 typedef struct _CONSOLE_IO_HANDLE
69 {
70 Object_t *Object; /* The object on which the handle points to */
71 DWORD Access;
72 BOOL Inheritable;
73 DWORD ShareMode;
74 } CONSOLE_IO_HANDLE, *PCONSOLE_IO_HANDLE;
75
76
77 #define ConsoleGetPerProcessData(Process) \
78 ((PCONSOLE_PROCESS_DATA)((Process)->ServerData[CONSRV_SERVERDLL_INDEX]))
79
80 typedef struct _CONSOLE_PROCESS_DATA
81 {
82 LIST_ENTRY ConsoleLink;
83 PCSR_PROCESS Process; // Process owning this structure.
84 HANDLE ConsoleEvent;
85 /* PCONSOLE */ struct _CONSOLE* Console;
86 /* PCONSOLE */ struct _CONSOLE* ParentConsole;
87
88 BOOL ConsoleApp; // TRUE if it is a CUI app, FALSE otherwise.
89
90 RTL_CRITICAL_SECTION HandleTableLock;
91 ULONG HandleTableSize;
92 PCONSOLE_IO_HANDLE HandleTable; // Length-varying table
93
94 LPTHREAD_START_ROUTINE CtrlDispatcher;
95 LPTHREAD_START_ROUTINE PropDispatcher; // We hold the property dialog handler there, till all the GUI thingie moves out from CSRSS.
96 } CONSOLE_PROCESS_DATA, *PCONSOLE_PROCESS_DATA;
97
98
99 #if 1 // Temporarily put there.
100 /*
101 * WARNING: Change the state of the console ONLY when the console is locked !
102 */
103 typedef enum _CONSOLE_STATE
104 {
105 CONSOLE_INITIALIZING, /* Console is initializing */
106 CONSOLE_RUNNING , /* Console running */
107 CONSOLE_TERMINATING , /* Console about to be destroyed (but still not) */
108 CONSOLE_IN_DESTRUCTION /* Console in destruction */
109 } CONSOLE_STATE, *PCONSOLE_STATE;
110 #endif
111
112
113 /* alias.c */
114 CSR_API(SrvAddConsoleAlias);
115 CSR_API(SrvGetConsoleAlias);
116 CSR_API(SrvGetConsoleAliases);
117 CSR_API(SrvGetConsoleAliasesLength);
118 CSR_API(SrvGetConsoleAliasExes);
119 CSR_API(SrvGetConsoleAliasExesLength);
120
121 /* coninput.c */
122 CSR_API(SrvGetConsoleInput);
123 CSR_API(SrvWriteConsoleInput);
124 CSR_API(SrvReadConsole);
125 CSR_API(SrvFlushConsoleInputBuffer);
126 CSR_API(SrvGetConsoleNumberOfInputEvents);
127
128 /* conoutput.c */
129 CSR_API(SrvReadConsoleOutput);
130 CSR_API(SrvWriteConsoleOutput);
131 CSR_API(SrvReadConsoleOutputString);
132 CSR_API(SrvWriteConsoleOutputString);
133 CSR_API(SrvFillConsoleOutput);
134 CSR_API(SrvWriteConsole);
135 CSR_API(SrvSetConsoleCursorPosition);
136 CSR_API(SrvGetConsoleCursorInfo);
137 CSR_API(SrvSetConsoleCursorInfo);
138 CSR_API(SrvSetConsoleTextAttribute);
139 CSR_API(SrvCreateConsoleScreenBuffer);
140 CSR_API(SrvGetConsoleScreenBufferInfo);
141 CSR_API(SrvSetConsoleActiveScreenBuffer);
142 CSR_API(SrvScrollConsoleScreenBuffer);
143 CSR_API(SrvSetConsoleScreenBufferSize);
144
145 /* console.c */
146 CSR_API(SrvOpenConsole);
147 CSR_API(SrvAllocConsole);
148 CSR_API(SrvAttachConsole);
149 CSR_API(SrvFreeConsole);
150 CSR_API(SrvSetConsoleMode);
151 CSR_API(SrvGetConsoleMode);
152 CSR_API(SrvSetConsoleTitle);
153 CSR_API(SrvGetConsoleTitle);
154 CSR_API(SrvGetConsoleHardwareState);
155 CSR_API(SrvSetConsoleHardwareState);
156 CSR_API(SrvGetConsoleWindow);
157 CSR_API(SrvSetConsoleIcon);
158 CSR_API(SrvGetConsoleCP);
159 CSR_API(SrvSetConsoleCP);
160 CSR_API(SrvGetConsoleProcessList);
161 CSR_API(SrvGenerateConsoleCtrlEvent);
162 CSR_API(SrvGetConsoleSelectionInfo);
163
164 /* handle.c */
165 CSR_API(SrvCloseHandle);
166 CSR_API(SrvVerifyConsoleIoHandle);
167 CSR_API(SrvDuplicateHandle);
168
169 NTSTATUS FASTCALL ConSrvInsertObject(PCONSOLE_PROCESS_DATA ProcessData,
170 PHANDLE Handle,
171 Object_t *Object,
172 DWORD Access,
173 BOOL Inheritable,
174 DWORD ShareMode);
175 NTSTATUS FASTCALL ConSrvRemoveObject(PCONSOLE_PROCESS_DATA ProcessData,
176 HANDLE Handle);
177 NTSTATUS FASTCALL ConSrvGetObject(PCONSOLE_PROCESS_DATA ProcessData,
178 HANDLE Handle,
179 Object_t** Object,
180 PCONSOLE_IO_HANDLE* Entry OPTIONAL,
181 DWORD Access,
182 BOOL LockConsole,
183 ULONG Type);
184 VOID FASTCALL ConSrvReleaseObject(Object_t *Object,
185 BOOL IsConsoleLocked);
186 NTSTATUS FASTCALL ConSrvAllocateConsole(PCONSOLE_PROCESS_DATA ProcessData,
187 PHANDLE pInputHandle,
188 PHANDLE pOutputHandle,
189 PHANDLE pErrorHandle,
190 PCONSOLE_START_INFO ConsoleStartInfo);
191 NTSTATUS FASTCALL ConSrvInheritConsole(PCONSOLE_PROCESS_DATA ProcessData,
192 struct _CONSOLE* Console,
193 BOOL CreateNewHandlesTable,
194 PHANDLE pInputHandle,
195 PHANDLE pOutputHandle,
196 PHANDLE pErrorHandle);
197 NTSTATUS FASTCALL ConSrvGetConsole(PCONSOLE_PROCESS_DATA ProcessData,
198 struct _CONSOLE** Console,
199 BOOL LockConsole);
200 VOID FASTCALL ConSrvReleaseConsole(struct _CONSOLE* Console,
201 BOOL WasConsoleLocked);
202 VOID FASTCALL ConSrvRemoveConsole(PCONSOLE_PROCESS_DATA ProcessData);
203
204 NTSTATUS NTAPI ConSrvNewProcess(PCSR_PROCESS SourceProcess,
205 PCSR_PROCESS TargetProcess);
206 NTSTATUS NTAPI ConSrvConnect(IN PCSR_PROCESS CsrProcess,
207 IN OUT PVOID ConnectionInfo,
208 IN OUT PULONG ConnectionInfoLength);
209 VOID NTAPI ConSrvDisconnect(PCSR_PROCESS Process);
210
211 /* lineinput.c */
212 CSR_API(SrvGetConsoleCommandHistoryLength);
213 CSR_API(SrvGetConsoleCommandHistory);
214 CSR_API(SrvExpungeConsoleCommandHistory);
215 CSR_API(SrvSetConsoleNumberOfCommands);
216 CSR_API(SrvGetConsoleHistory);
217 CSR_API(SrvSetConsoleHistory);
218
219 #endif // __CONSRV_H__
220
221 /* EOF */