17#define CON_API_NOCONSOLE_IMPL(Name, TYPE, RequestName) \
20 IN PCONSOLE_PROCESS_DATA ProcessData, \
21 IN OUT PCSR_API_MESSAGE ApiMessage, \
22 IN TYPE* RequestName, \
23 IN OUT PCSR_REPLY_CODE ReplyCode OPTIONAL)
29#define CON_API_NOCONSOLE_ENTRY(Name, TYPE, RequestName) \
30 CON_API_NOCONSOLE_IMPL(Name, TYPE, RequestName); \
33 TYPE* RequestName = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.RequestName; \
34 PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrGetClientThread()->Process); \
36 return Name##Impl(ProcessData, ApiMessage, RequestName, ReplyCode); \
39#define CON_API_NOCONSOLE(Name, TYPE, RequestName) \
40 CON_API_NOCONSOLE_ENTRY(Name, TYPE, RequestName); \
41 CON_API_NOCONSOLE_IMPL(Name, TYPE, RequestName)
45#define CON_API_IMPL(Name, TYPE, RequestName) \
48 IN PCONSOLE_PROCESS_DATA ProcessData, \
49 IN PCONSRV_CONSOLE Console, \
50 IN OUT PCSR_API_MESSAGE ApiMessage, \
51 IN TYPE* RequestName, \
52 IN OUT PCSR_REPLY_CODE ReplyCode OPTIONAL)
58#define CON_API_ENTRY(Name, TYPE, RequestName) \
59 CON_API_IMPL(Name, TYPE, RequestName); \
63 TYPE* RequestName = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.RequestName; \
64 PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrGetClientThread()->Process); \
65 PCONSRV_CONSOLE Console; \
67 Status = ConSrvGetConsole(ProcessData, \
70 if (!NT_SUCCESS(Status)) \
73 Status = Name##Impl(ProcessData, Console, \
74 ApiMessage, RequestName, ReplyCode); \
76 ConSrvReleaseConsole(Console, TRUE); \
80#define CON_API(Name, TYPE, RequestName) \
81 CON_API_ENTRY(Name, TYPE, RequestName); \
82 CON_API_IMPL(Name, TYPE, RequestName)
139CSR_API(SrvSetConsoleKeyShortcuts);
142CSR_API(SrvSetConsoleLocalEUDC);
143CSR_API(SrvSetConsoleCursorMode);
144CSR_API(SrvGetConsoleCursorMode);
165 OUT HDESK* ConsoleDesktop);
196CSR_API(SrvVDMConsoleOperation);
198CSR_API(SrvSetConsoleOS2OemFormat);
200CSR_API(SrvUnregisterConsoleIME);
NTSTATUS NTAPI GetThreadConsoleDesktop(IN ULONG_PTR ThreadId, OUT HDESK *ConsoleDesktop)