05a07023a7844e4ad48d289c136a8a6db85f4dd4
[reactos.git] / include / reactos / subsys / win / basemsg.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Client/Server Runtime SubSystem
4 * FILE: include/reactos/subsys/win/basemsg.h
5 * PURPOSE: Public definitions for communication
6 * between Base API Clients and Servers
7 * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
8 */
9
10 #ifndef _BASEMSG_H
11 #define _BASEMSG_H
12
13 #pragma once
14
15 #define BASESRV_SERVERDLL_INDEX 1
16 #define BASESRV_FIRST_API_NUMBER 0
17
18 // Windows NT 4 table, adapted from http://j00ru.vexillium.org/csrss_list/api_list.html#Windows_NT
19 // It is for testing purposes. After that I will update it to 2k3 version and add stubs.
20 typedef enum _BASESRV_API_NUMBER
21 {
22 BasepCreateProcess = BASESRV_FIRST_API_NUMBER,
23 BasepCreateThread,
24 BasepGetTempFile,
25 BasepExitProcess,
26 // BasepDebugProcess,
27 // BasepCheckVDM,
28 // BasepUpdateVDMEntry,
29 // BasepGetNextVDMCommand,
30 // BasepExitVDM,
31 // BasepIsFirstVDM,
32 // BasepGetVDMExitCode,
33 // BasepSetReenterCount,
34 BasepSetProcessShutdownParam,
35 BasepGetProcessShutdownParam,
36 // BasepNlsSetUserInfo,
37 // BasepNlsSetMultipleUserInfo,
38 // BasepNlsCreateSortSection,
39 // BasepNlsPreserveSection,
40 // BasepSetVDMCurDirs,
41 // BasepGetVDMCurDirs,
42 // BasepBatNotification,
43 // BasepRegisterWowExec,
44 BasepSoundSentryNotification,
45 // BasepRefreshIniFileMapping,
46 BasepDefineDosDevice,
47
48 BasepMaxApiNumber
49 } BASESRV_API_NUMBER, *PBASESRV_API_NUMBER;
50
51 typedef struct _BASE_SXS_CREATEPROCESS_MSG
52 {
53 ULONG Flags;
54 ULONG ProcessParameterFlags;
55 HANDLE FileHandle;
56 UNICODE_STRING SxsWin32ExePath;
57 UNICODE_STRING SxsNtExePath;
58 SIZE_T OverrideManifestOffset;
59 ULONG OverrideManifestSize;
60 SIZE_T OverridePolicyOffset;
61 ULONG OverridePolicySize;
62 PVOID PEManifestAddress;
63 ULONG PEManifestSize;
64 UNICODE_STRING CultureFallbacks;
65 ULONG Unknown[7];
66 UNICODE_STRING AssemblyName;
67 } BASE_SXS_CREATEPROCESS_MSG, *PBASE_SXS_CREATEPROCESS_MSG;
68
69 typedef struct
70 {
71 //
72 // NT-type structure (BASE_CREATEPROCESS_MSG)
73 //
74 HANDLE ProcessHandle;
75 HANDLE ThreadHandle;
76 CLIENT_ID ClientId;
77 ULONG CreationFlags;
78 ULONG VdmBinaryType;
79 ULONG VdmTask;
80 HANDLE hVDM;
81 BASE_SXS_CREATEPROCESS_MSG Sxs;
82 PVOID PebAddressNative;
83 ULONG PebAddressWow64;
84 USHORT ProcessorArchitecture;
85 } BASE_CREATE_PROCESS, *PBASE_CREATE_PROCESS;
86
87 typedef struct
88 {
89 CLIENT_ID ClientId;
90 HANDLE ThreadHandle;
91 } BASE_CREATE_THREAD, *PBASE_CREATE_THREAD;
92
93 typedef struct
94 {
95 UINT uExitCode;
96 } BASE_EXIT_PROCESS, *PBASE_EXIT_PROCESS;
97
98 typedef struct
99 {
100 UINT UniqueID;
101 } BASE_GET_TEMP_FILE, *PBASE_GET_TEMP_FILE;
102
103 typedef struct
104 {
105 ULONG iTask;
106 HANDLE ConsoleHandle;
107 ULONG BinaryType;
108 HANDLE WaitObjectForParent;
109 HANDLE StdIn;
110 HANDLE StdOut;
111 HANDLE StdErr;
112 ULONG CodePage;
113 ULONG dwCreationFlags;
114 PCHAR CmdLine;
115 PCHAR appName;
116 PCHAR PifFile;
117 PCHAR CurDirectory;
118 PCHAR Env;
119 ULONG EnvLen;
120 PVOID StartupInfo;
121 PCHAR Desktop;
122 ULONG DesktopLen;
123 PCHAR Title;
124 ULONG TitleLen;
125 PCHAR Reserved;
126 ULONG ReservedLen;
127 USHORT CmdLen;
128 USHORT AppLen;
129 USHORT PifLen;
130 USHORT CurDirectoryLen;
131 USHORT CurDrive;
132 USHORT VDMState;
133 } BASE_CHECK_VDM, *PBASE_CHECK_VDM;
134
135 typedef struct
136 {
137 ULONG iTask;
138 ULONG BinaryType;
139 HANDLE ConsoleHandle;
140 HANDLE VDMProcessHandle;
141 HANDLE WaitObjectForParent;
142 USHORT EntryIndex;
143 USHORT VDMCreationState;
144 } BASE_UPDATE_VDM_ENTRY, *PBASE_UPDATE_VDM_ENTRY;
145
146 typedef struct
147 {
148 HANDLE ConsoleHandle;
149 HANDLE hParent;
150 ULONG ExitCode;
151 } BASE_GET_VDM_EXIT_CODE, *PBASE_GET_VDM_EXIT_CODE;
152
153 typedef struct
154 {
155 DWORD Level;
156 DWORD Flags;
157 } BASE_SET_PROCESS_SHUTDOWN_PARAMS, *PBASE_SET_PROCESS_SHUTDOWN_PARAMS;
158
159 typedef struct
160 {
161 DWORD Level;
162 DWORD Flags;
163 } BASE_GET_PROCESS_SHUTDOWN_PARAMS, *PBASE_GET_PROCESS_SHUTDOWN_PARAMS;
164
165 typedef struct
166 {
167 ULONG VideoMode;
168 } BASE_SOUND_SENTRY, *PBASE_SOUND_SENTRY;
169
170 typedef struct
171 {
172 UNICODE_STRING DeviceName;
173 UNICODE_STRING TargetName;
174 DWORD dwFlags;
175 } BASE_DEFINE_DOS_DEVICE, *PBASE_DEFINE_DOS_DEVICE;
176
177 typedef struct _BASE_API_MESSAGE
178 {
179 PORT_MESSAGE Header;
180
181 PCSR_CAPTURE_BUFFER CsrCaptureData;
182 CSR_API_NUMBER ApiNumber;
183 ULONG Status; // ReturnValue; // NTSTATUS Status
184 ULONG Reserved;
185 union
186 {
187 BASE_CREATE_PROCESS CreateProcessRequest;
188 BASE_CREATE_THREAD CreateThreadRequest;
189 BASE_EXIT_PROCESS ExitProcessRequest;
190 BASE_GET_TEMP_FILE GetTempFile;
191 BASE_CHECK_VDM CheckVdm;
192 BASE_UPDATE_VDM_ENTRY UpdateVdmEntry;
193 BASE_GET_VDM_EXIT_CODE GetVdmExitCode;
194 BASE_SET_PROCESS_SHUTDOWN_PARAMS SetShutdownParametersRequest;
195 BASE_GET_PROCESS_SHUTDOWN_PARAMS GetShutdownParametersRequest;
196 BASE_SOUND_SENTRY SoundSentryRequest;
197 BASE_DEFINE_DOS_DEVICE DefineDosDeviceRequest;
198 } Data;
199 } BASE_API_MESSAGE, *PBASE_API_MESSAGE;
200
201 // Check that a BASE_API_MESSAGE can hold in a CSR_API_MESSAGE.
202 CHECK_API_MSG_SIZE(BASE_API_MESSAGE);
203
204 #endif // _BASEMSG_H
205
206 /* EOF */