ReactOS  0.4.15-dev-1187-g119f102
api.h
Go to the documentation of this file.
1 /*
2  * COPYRIGHT: See COPYING in the top level directory
3  * PROJECT: ReactOS Console Server DLL
4  * FILE: win32ss/user/winsrv/consrv/api.h
5  * PURPOSE: Public server APIs definitions
6  * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
7  */
8 
9 #pragma once
10 
11 /*
12  * Helper macros to define the CSR_API_ROUTINE-s defined in CONSRV,
13  * factoring out the common prologue and epilogue code, and including
14  * the necessary local variables.
15  */
16 
17 #define CON_API_NOCONSOLE_IMPL(Name, TYPE, RequestName) \
18  NTSTATUS \
19  Name##Impl( \
20  IN PCONSOLE_PROCESS_DATA ProcessData, \
21  IN OUT PCSR_API_MESSAGE ApiMessage, \
22  IN TYPE* RequestName, /* Request */ \
23  IN OUT PCSR_REPLY_CODE ReplyCode OPTIONAL)
24 
25 // NTSTATUS NTAPI
26 // Name(
27  // IN OUT PCSR_API_MESSAGE ApiMessage,
28  // IN OUT PCSR_REPLY_CODE ReplyCode OPTIONAL)
29 #define CON_API_NOCONSOLE_ENTRY(Name, TYPE, RequestName) \
30  CON_API_NOCONSOLE_IMPL(Name, TYPE, RequestName); \
31  CSR_API(Name) \
32  { \
33  TYPE* RequestName = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.RequestName; \
34  PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrGetClientThread()->Process); \
35  \
36  return Name##Impl(ProcessData, ApiMessage, RequestName, ReplyCode); \
37  }
38 
39 #define CON_API_NOCONSOLE(Name, TYPE, RequestName) \
40  CON_API_NOCONSOLE_ENTRY(Name, TYPE, RequestName); \
41  CON_API_NOCONSOLE_IMPL(Name, TYPE, RequestName)
42 
43 
44 
45 #define CON_API_IMPL(Name, TYPE, RequestName) \
46  NTSTATUS \
47  Name##Impl( \
48  IN PCONSOLE_PROCESS_DATA ProcessData, \
49  IN PCONSRV_CONSOLE Console, \
50  IN OUT PCSR_API_MESSAGE ApiMessage, \
51  IN TYPE* RequestName, /* Request */ \
52  IN OUT PCSR_REPLY_CODE ReplyCode OPTIONAL)
53 
54 // NTSTATUS NTAPI
55 // Name(
56  // IN OUT PCSR_API_MESSAGE ApiMessage,
57  // IN OUT PCSR_REPLY_CODE ReplyCode OPTIONAL)
58 #define CON_API_ENTRY(Name, TYPE, RequestName) \
59  CON_API_IMPL(Name, TYPE, RequestName); \
60  CSR_API(Name) \
61  { \
62  NTSTATUS Status; \
63  TYPE* RequestName = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.RequestName; \
64  PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrGetClientThread()->Process); \
65  PCONSRV_CONSOLE Console; \
66  \
67  Status = ConSrvGetConsole(ProcessData, \
68  /* RequestName->ConsoleHandle, */ \
69  &Console, TRUE); \
70  if (!NT_SUCCESS(Status)) \
71  return Status; \
72  \
73  Status = Name##Impl(ProcessData, Console, \
74  ApiMessage, RequestName, ReplyCode); \
75  \
76  ConSrvReleaseConsole(Console, TRUE); \
77  return Status; \
78  }
79 
80 #define CON_API(Name, TYPE, RequestName) \
81  CON_API_ENTRY(Name, TYPE, RequestName); \
82  CON_API_IMPL(Name, TYPE, RequestName)
83 
84 
85 /*
86  * List of CSR_API_ROUTINE-s defined in this module.
87  */
88 
89 /* alias.c */
90 CSR_API(SrvAddConsoleAlias);
91 CSR_API(SrvGetConsoleAlias);
92 CSR_API(SrvGetConsoleAliases);
93 CSR_API(SrvGetConsoleAliasesLength);
94 CSR_API(SrvGetConsoleAliasExes);
95 CSR_API(SrvGetConsoleAliasExesLength);
96 
97 /* coninput.c */
98 CSR_API(SrvReadConsole);
99 CSR_API(SrvGetConsoleInput);
100 CSR_API(SrvWriteConsoleInput);
101 CSR_API(SrvFlushConsoleInputBuffer);
102 CSR_API(SrvGetConsoleNumberOfInputEvents);
103 
104 /* conoutput.c */
105 CSR_API(SrvInvalidateBitMapRect);
106 CSR_API(SrvSetConsolePalette);
107 CSR_API(SrvReadConsoleOutput);
108 CSR_API(SrvWriteConsole);
109 CSR_API(SrvWriteConsoleOutput);
110 CSR_API(SrvReadConsoleOutputString);
111 CSR_API(SrvWriteConsoleOutputString);
112 CSR_API(SrvFillConsoleOutput);
113 CSR_API(SrvGetConsoleCursorInfo);
114 CSR_API(SrvSetConsoleCursorInfo);
115 CSR_API(SrvSetConsoleCursorPosition);
116 CSR_API(SrvSetConsoleTextAttribute);
117 CSR_API(SrvCreateConsoleScreenBuffer);
118 CSR_API(SrvGetConsoleScreenBufferInfo);
119 CSR_API(SrvSetConsoleActiveScreenBuffer);
120 CSR_API(SrvSetConsoleScreenBufferSize);
121 CSR_API(SrvScrollConsoleScreenBuffer);
122 CSR_API(SrvSetConsoleWindowInfo);
123 
124 /* console.c */
125 CSR_API(SrvAllocConsole);
126 CSR_API(SrvAttachConsole);
127 CSR_API(SrvFreeConsole);
128 CSR_API(SrvGetConsoleMode);
129 CSR_API(SrvSetConsoleMode);
130 CSR_API(SrvGetConsoleTitle);
131 CSR_API(SrvSetConsoleTitle);
132 CSR_API(SrvGetConsoleCP);
133 CSR_API(SrvSetConsoleCP);
134 CSR_API(SrvGetConsoleProcessList);
135 CSR_API(SrvGenerateConsoleCtrlEvent);
136 CSR_API(SrvConsoleNotifyLastClose);
137 
138 CSR_API(SrvGetConsoleMouseInfo);
139 CSR_API(SrvSetConsoleKeyShortcuts);
140 CSR_API(SrvGetConsoleKeyboardLayoutName);
141 CSR_API(SrvGetConsoleCharType);
142 CSR_API(SrvSetConsoleLocalEUDC);
143 CSR_API(SrvSetConsoleCursorMode);
144 CSR_API(SrvGetConsoleCursorMode);
145 CSR_API(SrvGetConsoleNlsMode);
146 CSR_API(SrvSetConsoleNlsMode);
147 CSR_API(SrvGetConsoleLangId);
148 
149 /* frontendctl.c */
150 CSR_API(SrvGetConsoleHardwareState);
151 CSR_API(SrvSetConsoleHardwareState);
152 CSR_API(SrvGetConsoleDisplayMode);
153 CSR_API(SrvSetConsoleDisplayMode);
154 CSR_API(SrvGetLargestConsoleWindowSize);
155 CSR_API(SrvShowConsoleCursor);
156 CSR_API(SrvSetConsoleCursor);
157 CSR_API(SrvConsoleMenuControl);
158 CSR_API(SrvSetConsoleMenuClose);
159 
160 /* Used by USERSRV!SrvGetThreadConsoleDesktop() */
161 NTSTATUS
162 NTAPI
164  IN ULONG_PTR ThreadId,
165  OUT HDESK* ConsoleDesktop);
166 
167 CSR_API(SrvGetConsoleWindow);
168 CSR_API(SrvSetConsoleIcon);
169 CSR_API(SrvGetConsoleSelectionInfo);
170 
171 CSR_API(SrvGetConsoleNumberOfFonts);
172 CSR_API(SrvGetConsoleFontInfo);
173 CSR_API(SrvGetConsoleFontSize);
174 CSR_API(SrvGetConsoleCurrentFont);
175 CSR_API(SrvSetConsoleFont);
176 
177 /* handle.c */
178 CSR_API(SrvOpenConsole);
179 CSR_API(SrvDuplicateHandle);
180 CSR_API(SrvGetHandleInformation);
181 CSR_API(SrvSetHandleInformation);
182 CSR_API(SrvCloseHandle);
183 CSR_API(SrvVerifyConsoleIoHandle);
184 
185 /* history.c */
186 CSR_API(SrvGetConsoleCommandHistory);
187 CSR_API(SrvGetConsoleCommandHistoryLength);
188 CSR_API(SrvExpungeConsoleCommandHistory);
189 CSR_API(SrvSetConsoleNumberOfCommands);
190 CSR_API(SrvGetConsoleHistory);
191 CSR_API(SrvSetConsoleHistory);
192 CSR_API(SrvSetConsoleCommandHistoryMode);
193 
194 /* subsysreg.c */
195 CSR_API(SrvRegisterConsoleVDM);
196 CSR_API(SrvVDMConsoleOperation);
197 CSR_API(SrvRegisterConsoleOS2);
198 CSR_API(SrvSetConsoleOS2OemFormat);
199 CSR_API(SrvRegisterConsoleIME);
200 CSR_API(SrvUnregisterConsoleIME);
201 
202 /* EOF */
#define IN
Definition: typedefs.h:39
LONG NTSTATUS
Definition: precomp.h:26
uint32_t ULONG_PTR
Definition: typedefs.h:65
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
CSR_API(BaseSrvCheckApplicationCompatibility)
Definition: appcompat.c:56
#define OUT
Definition: typedefs.h:40
NTSTATUS NTAPI GetThreadConsoleDesktop(IN ULONG_PTR ThreadId, OUT HDESK *ConsoleDesktop)
Definition: frontendctl.c:265