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)
14 /* PSDK/NDK Headers */
16 #define WIN32_NO_STATUS
18 #define COM_NO_WINDOWS_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>
34 /* Public Win32K Headers */
37 /* PSEH for SEH Support */
38 #include <pseh/pseh2.h>
41 #include <csr/csrsrv.h>
44 #include <win/console.h>
45 #include <win/conmsg.h>
50 extern HINSTANCE ConSrvDllInstance
;
51 extern HANDLE ConSrvHeap
;
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
57 /* Common things to input/output/console objects */
58 typedef struct Object_tt
61 struct _CONSOLE
*Console
;
62 LONG AccessRead
, AccessWrite
;
63 LONG ExclusiveRead
, ExclusiveWrite
;
68 typedef struct _CONSOLE_IO_HANDLE
70 Object_t
*Object
; /* The object on which the handle points to */
74 } CONSOLE_IO_HANDLE
, *PCONSOLE_IO_HANDLE
;
77 #define ConsoleGetPerProcessData(Process) \
78 ((PCONSOLE_PROCESS_DATA)((Process)->ServerData[CONSRV_SERVERDLL_INDEX]))
80 typedef struct _CONSOLE_PROCESS_DATA
82 LIST_ENTRY ConsoleLink
;
83 PCSR_PROCESS Process
; // Process owning this structure.
85 /* PCONSOLE */ struct _CONSOLE
* Console
;
86 /* PCONSOLE */ struct _CONSOLE
* ParentConsole
;
88 BOOL ConsoleApp
; // TRUE if it is a CUI app, FALSE otherwise.
90 RTL_CRITICAL_SECTION HandleTableLock
;
91 ULONG HandleTableSize
;
92 PCONSOLE_IO_HANDLE HandleTable
; // Length-varying table
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
;
99 #if 1 // Temporarily put there.
101 * WARNING: Change the state of the console ONLY when the console is locked !
103 typedef enum _CONSOLE_STATE
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
;
114 CSR_API(SrvAddConsoleAlias
);
115 CSR_API(SrvGetConsoleAlias
);
116 CSR_API(SrvGetConsoleAliases
);
117 CSR_API(SrvGetConsoleAliasesLength
);
118 CSR_API(SrvGetConsoleAliasExes
);
119 CSR_API(SrvGetConsoleAliasExesLength
);
122 CSR_API(SrvGetConsoleInput
);
123 CSR_API(SrvWriteConsoleInput
);
124 CSR_API(SrvReadConsole
);
125 CSR_API(SrvFlushConsoleInputBuffer
);
126 CSR_API(SrvGetConsoleNumberOfInputEvents
);
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
);
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
);
165 CSR_API(SrvCloseHandle
);
166 CSR_API(SrvVerifyConsoleIoHandle
);
167 CSR_API(SrvDuplicateHandle
);
169 NTSTATUS FASTCALL
ConSrvInsertObject(PCONSOLE_PROCESS_DATA ProcessData
,
175 NTSTATUS FASTCALL
ConSrvRemoveObject(PCONSOLE_PROCESS_DATA ProcessData
,
177 NTSTATUS FASTCALL
ConSrvGetObject(PCONSOLE_PROCESS_DATA ProcessData
,
180 PCONSOLE_IO_HANDLE
* Entry OPTIONAL
,
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
,
200 VOID FASTCALL
ConSrvReleaseConsole(struct _CONSOLE
* Console
,
201 BOOL WasConsoleLocked
);
202 VOID FASTCALL
ConSrvRemoveConsole(PCONSOLE_PROCESS_DATA ProcessData
);
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
);
212 CSR_API(SrvGetConsoleCommandHistoryLength
);
213 CSR_API(SrvGetConsoleCommandHistory
);
214 CSR_API(SrvExpungeConsoleCommandHistory
);
215 CSR_API(SrvSetConsoleNumberOfCommands
);
216 CSR_API(SrvGetConsoleHistory
);
217 CSR_API(SrvSetConsoleHistory
);
219 #endif // __CONSRV_H__