Merging r37048, r37051, r37052, r37055 from the-real-msvc branch
[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 DWORD ProcessGroup;
52 HANDLE Process;
53 ULONG ShutdownLevel;
54 ULONG ShutdownFlags;
55 HANDLE ConsoleEvent;
56 PVOID CsrSectionViewBase;
57 ULONG CsrSectionViewSize;
58 HANDLE ServerCommunicationPort;
59 struct _CSRSS_PROCESS_DATA * next;
60 LIST_ENTRY ProcessEntry;
61 PCONTROLDISPATCHER CtrlDispatcher;
62 BOOL Terminated;
63 } CSRSS_PROCESS_DATA, *PCSRSS_PROCESS_DATA;
64
65 typedef VOID (STDCALL *CSR_CLEANUP_OBJECT_PROC)(Object_t *Object);
66
67 typedef struct tagCSRSS_OBJECT_DEFINITION
68 {
69 LONG Type;
70 CSR_CLEANUP_OBJECT_PROC CsrCleanupObjectProc;
71 } CSRSS_OBJECT_DEFINITION, *PCSRSS_OBJECT_DEFINITION;
72
73 typedef NTSTATUS (STDCALL *CSRSS_API_PROC)(PCSRSS_PROCESS_DATA ProcessData,
74 PCSR_API_MESSAGE Request);
75
76 typedef struct _CSRSS_API_DEFINITION
77 {
78 ULONG Type;
79 ULONG MinRequestSize;
80 CSRSS_API_PROC Handler;
81 } CSRSS_API_DEFINITION, *PCSRSS_API_DEFINITION;
82
83 #define CSRSS_DEFINE_API(Func, Handler) \
84 { Func, sizeof(CSRSS_##Func), Handler }
85
86 typedef struct _CSRSS_LISTEN_DATA
87 {
88 HANDLE ApiPortHandle;
89 ULONG ApiDefinitionsCount;
90 PCSRSS_API_DEFINITION *ApiDefinitions;
91 } CSRSS_LISTEN_DATA, *PCSRSS_LISTEN_DATA;
92
93 #define CSR_API(n) NTSTATUS STDCALL n (\
94 PCSRSS_PROCESS_DATA ProcessData,\
95 PCSR_API_MESSAGE Request)
96
97 /* init.c */
98 extern HANDLE hBootstrapOk;
99
100 /* api/process.c */
101 CSR_API(CsrConnectProcess);
102 CSR_API(CsrCreateProcess);
103 CSR_API(CsrTerminateProcess);
104
105 /* print.c */
106 VOID STDCALL DisplayString(LPCWSTR lpwString);
107 VOID STDCALL PrintString (char* fmt, ...);
108
109 /* api/wapi.c */
110 NTSTATUS FASTCALL CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions);
111 VOID FASTCALL CsrApiCallHandler(PCSRSS_PROCESS_DATA ProcessData,
112 PCSR_API_MESSAGE Request);
113 DWORD STDCALL ServerApiPortThread (PVOID PortHandle);
114 DWORD STDCALL ServerSbApiPortThread (PVOID PortHandle);
115 DWORD STDCALL Console_Api( PVOID unused );
116 VOID
117 NTAPI
118 ClientConnectionThread(HANDLE ServerPort);
119
120 extern HANDLE CsrssApiHeap;
121
122 /* api/conio.c */
123 VOID STDCALL CsrInitConsoleSupport(VOID);
124
125 /* api/process.c */
126 typedef NTSTATUS (STDCALL *CSRSS_ENUM_PROCESS_PROC)(PCSRSS_PROCESS_DATA ProcessData,
127 PVOID Context);
128 VOID STDCALL CsrInitProcessData(VOID);
129 PCSRSS_PROCESS_DATA STDCALL CsrGetProcessData(HANDLE ProcessId);
130 PCSRSS_PROCESS_DATA STDCALL CsrCreateProcessData(HANDLE ProcessId);
131 NTSTATUS STDCALL CsrFreeProcessData( HANDLE Pid );
132 NTSTATUS STDCALL CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc, PVOID Context);
133
134 /* api/handle.c */
135 NTSTATUS FASTCALL CsrRegisterObjectDefinitions(PCSRSS_OBJECT_DEFINITION NewDefinitions);
136 NTSTATUS STDCALL CsrInsertObject( PCSRSS_PROCESS_DATA ProcessData, PHANDLE Handle, Object_t *Object, DWORD Access, BOOL Inheritable );
137 NTSTATUS STDCALL CsrDuplicateHandleTable(PCSRSS_PROCESS_DATA SourceProcessData, PCSRSS_PROCESS_DATA TargetProcessData);
138 NTSTATUS STDCALL CsrGetObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Handle, Object_t **Object, DWORD Access );
139 BOOL STDCALL CsrServerInitialization (int,char**,char**);
140 NTSTATUS STDCALL CsrReleaseObjectByPointer(Object_t *Object);
141 NTSTATUS STDCALL CsrReleaseObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Object );
142 NTSTATUS STDCALL CsrVerifyObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Object );
143
144 CSR_API(CsrGetInputHandle);
145 CSR_API(CsrGetOutputHandle);
146 CSR_API(CsrCloseHandle);
147 CSR_API(CsrVerifyHandle);
148 CSR_API(CsrDuplicateHandle);
149 CSR_API(CsrGetInputWaitHandle);
150
151 /* api/user.c */
152 CSR_API(CsrRegisterServicesProcess);
153 CSR_API(CsrExitReactos);
154 CSR_API(CsrGetShutdownParameters);
155 CSR_API(CsrSetShutdownParameters);
156
157 CSR_API(CsrSetLogonNotifyWindow);
158 CSR_API(CsrRegisterLogonProcess);
159
160
161 #endif /* ndef API_H_INCLUDED */
162
163 /* EOF */
164