- Implement access masks and optional inheritability for console handles. Currently...
[reactos.git] / reactos / subsystems / win32 / csrss / include / api.h
1 /* $Id$
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: subsys/csrss/include/api.h
6 * PURPOSE: CSRSS API interface
7 */
8
9 #ifndef API_H_INCLUDED
10 #define API_H_INCLUDED
11
12 #define NTOS_MODE_USER
13 #include <ndk/ntndk.h>
14
15 #include <csrss/csrss.h>
16
17 typedef struct Object_tt
18 {
19 LONG Type;
20 LONG ReferenceCount;
21 CRITICAL_SECTION Lock;
22 } Object_t;
23
24 typedef struct ConsoleInput_t
25 {
26 LIST_ENTRY ListEntry;
27 INPUT_RECORD InputEvent;
28 BOOLEAN Echoed; // already been echoed or not
29 BOOLEAN Fake; // synthesized, not a real event
30 BOOLEAN NotChar; // message should not be used to return a character
31 } ConsoleInput;
32
33 typedef struct tagCSRSS_CONSOLE *PCSRSS_CONSOLE;
34
35 typedef struct _CSRSS_HANDLE
36 {
37 Object_t *Object;
38 DWORD Access;
39 BOOL Inheritable;
40 } CSRSS_HANDLE, *PCSRSS_HANDLE;
41
42 typedef struct _CSRSS_PROCESS_DATA
43 {
44 PCSRSS_CONSOLE Console;
45 PCSRSS_CONSOLE ParentConsole;
46 BOOL bInheritHandles;
47 RTL_CRITICAL_SECTION HandleTableLock;
48 ULONG HandleTableSize;
49 PCSRSS_HANDLE HandleTable;
50 HANDLE ProcessId;
51 HANDLE Process;
52 ULONG ShutdownLevel;
53 ULONG ShutdownFlags;
54 HANDLE ConsoleEvent;
55 PVOID CsrSectionViewBase;
56 ULONG CsrSectionViewSize;
57 HANDLE ServerCommunicationPort;
58 struct _CSRSS_PROCESS_DATA * next;
59 LIST_ENTRY ProcessEntry;
60 PCONTROLDISPATCHER CtrlDispatcher;
61 BOOL Terminated;
62 } CSRSS_PROCESS_DATA, *PCSRSS_PROCESS_DATA;
63
64 typedef VOID (STDCALL *CSR_CLEANUP_OBJECT_PROC)(Object_t *Object);
65
66 typedef struct tagCSRSS_OBJECT_DEFINITION
67 {
68 LONG Type;
69 CSR_CLEANUP_OBJECT_PROC CsrCleanupObjectProc;
70 } CSRSS_OBJECT_DEFINITION, *PCSRSS_OBJECT_DEFINITION;
71
72 typedef NTSTATUS (STDCALL *CSRSS_API_PROC)(PCSRSS_PROCESS_DATA ProcessData,
73 PCSR_API_MESSAGE Request);
74
75 typedef struct _CSRSS_API_DEFINITION
76 {
77 ULONG Type;
78 ULONG MinRequestSize;
79 CSRSS_API_PROC Handler;
80 } CSRSS_API_DEFINITION, *PCSRSS_API_DEFINITION;
81
82 #define CSRSS_DEFINE_API(Func, Handler) \
83 { Func, sizeof(CSRSS_##Func), Handler }
84
85 typedef struct _CSRSS_LISTEN_DATA
86 {
87 HANDLE ApiPortHandle;
88 ULONG ApiDefinitionsCount;
89 PCSRSS_API_DEFINITION *ApiDefinitions;
90 } CSRSS_LISTEN_DATA, *PCSRSS_LISTEN_DATA;
91
92 #define CSR_API(n) NTSTATUS STDCALL n (\
93 PCSRSS_PROCESS_DATA ProcessData,\
94 PCSR_API_MESSAGE Request)
95
96 /* init.c */
97 extern HANDLE hBootstrapOk;
98
99 /* api/process.c */
100 CSR_API(CsrConnectProcess);
101 CSR_API(CsrCreateProcess);
102 CSR_API(CsrTerminateProcess);
103
104 /* print.c */
105 VOID STDCALL DisplayString(LPCWSTR lpwString);
106 VOID STDCALL PrintString (char* fmt, ...);
107
108 /* api/wapi.c */
109 NTSTATUS FASTCALL CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions);
110 VOID FASTCALL CsrApiCallHandler(PCSRSS_PROCESS_DATA ProcessData,
111 PCSR_API_MESSAGE Request);
112 DWORD STDCALL ServerApiPortThread (PVOID PortHandle);
113 DWORD STDCALL ServerSbApiPortThread (PVOID PortHandle);
114 DWORD STDCALL Console_Api( PVOID unused );
115 VOID
116 NTAPI
117 ClientConnectionThread(HANDLE ServerPort);
118
119 extern HANDLE CsrssApiHeap;
120
121 /* api/conio.c */
122 VOID STDCALL CsrInitConsoleSupport(VOID);
123
124 /* api/process.c */
125 typedef NTSTATUS (STDCALL *CSRSS_ENUM_PROCESS_PROC)(PCSRSS_PROCESS_DATA ProcessData,
126 PVOID Context);
127 VOID STDCALL CsrInitProcessData(VOID);
128 PCSRSS_PROCESS_DATA STDCALL CsrGetProcessData(HANDLE ProcessId);
129 PCSRSS_PROCESS_DATA STDCALL CsrCreateProcessData(HANDLE ProcessId);
130 NTSTATUS STDCALL CsrFreeProcessData( HANDLE Pid );
131 NTSTATUS STDCALL CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc, PVOID Context);
132
133 /* api/handle.c */
134 NTSTATUS FASTCALL CsrRegisterObjectDefinitions(PCSRSS_OBJECT_DEFINITION NewDefinitions);
135 NTSTATUS STDCALL CsrInsertObject( PCSRSS_PROCESS_DATA ProcessData, PHANDLE Handle, Object_t *Object, DWORD Access, BOOL Inheritable );
136 NTSTATUS STDCALL CsrDuplicateHandleTable(PCSRSS_PROCESS_DATA SourceProcessData, PCSRSS_PROCESS_DATA TargetProcessData);
137 NTSTATUS STDCALL CsrGetObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Handle, Object_t **Object, DWORD Access );
138 BOOL STDCALL CsrServerInitialization (int,char**,char**);
139 NTSTATUS STDCALL CsrReleaseObjectByPointer(Object_t *Object);
140 NTSTATUS STDCALL CsrReleaseObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Object );
141 NTSTATUS STDCALL CsrVerifyObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Object );
142
143 CSR_API(CsrGetInputHandle);
144 CSR_API(CsrGetOutputHandle);
145 CSR_API(CsrCloseHandle);
146 CSR_API(CsrVerifyHandle);
147 CSR_API(CsrDuplicateHandle);
148 CSR_API(CsrGetInputWaitHandle);
149
150 /* api/user.c */
151 CSR_API(CsrRegisterServicesProcess);
152 CSR_API(CsrExitReactos);
153 CSR_API(CsrGetShutdownParameters);
154 CSR_API(CsrSetShutdownParameters);
155
156 CSR_API(CsrSetLogonNotifyWindow);
157 CSR_API(CsrRegisterLogonProcess);
158
159 CSR_API(CsrAddConsoleAlias);
160 CSR_API(CsrGetConsoleAlias);
161 CSR_API(CsrGetAllConsoleAliases);
162 CSR_API(CsrGetAllConsoleAliasesLength);
163 CSR_API(CsrGetConsoleAliasesExes);
164 CSR_API(CsrGetConsoleAliasesExesLength);
165
166
167 #endif /* ndef API_H_INCLUDED */
168
169 /* EOF */
170