[REACTOS]
[reactos.git] / reactos / dll / win32 / kernel32 / include / kernel32.h
1 #pragma once
2
3 //
4 // Kernel32 Filter IDs
5 //
6 #define kernel32file 200
7 #define kernel32ver 201
8 #define actctx 202
9 #define resource 203
10 #define kernel32session 204
11
12
13 #if DBG
14 #define DEBUG_CHANNEL(ch) static ULONG gDebugChannel = ch;
15 #else
16 #define DEBUG_CHANNEL(ch)
17 #endif
18
19 #define TRACE(fmt, ...) TRACE__(gDebugChannel, fmt, ##__VA_ARGS__)
20 #define WARN(fmt, ...) WARN__(gDebugChannel, fmt, ##__VA_ARGS__)
21 #define FIXME(fmt, ...) WARN__(gDebugChannel, fmt,## __VA_ARGS__)
22 #define ERR(fmt, ...) ERR__(gDebugChannel, fmt, ##__VA_ARGS__)
23
24 #define STUB \
25 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); \
26 DPRINT1("%s() is UNIMPLEMENTED!\n", __FUNCTION__)
27
28 #define debugstr_a
29 #define debugstr_w
30 #define wine_dbgstr_w
31 #define debugstr_guid
32
33 #include "wine/unicode.h"
34 #include "baseheap.h"
35
36 #define BINARY_UNKNOWN (0)
37 #define BINARY_PE_EXE32 (1)
38 #define BINARY_PE_DLL32 (2)
39 #define BINARY_PE_EXE64 (3)
40 #define BINARY_PE_DLL64 (4)
41 #define BINARY_WIN16 (5)
42 #define BINARY_OS216 (6)
43 #define BINARY_DOS (7)
44 #define BINARY_UNIX_EXE (8)
45 #define BINARY_UNIX_LIB (9)
46
47 #define MAGIC(c1,c2,c3,c4) ((c1) + ((c2)<<8) + ((c3)<<16) + ((c4)<<24))
48
49 #define MAGIC_HEAP MAGIC( 'H','E','A','P' )
50
51 #define ROUNDUP(a,b) ((((a)+(b)-1)/(b))*(b))
52 #define ROUNDDOWN(a,b) (((a)/(b))*(b))
53
54 #define ROUND_DOWN(n, align) \
55 (((ULONG)n) & ~((align) - 1l))
56
57 #define ROUND_UP(n, align) \
58 ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
59
60 #ifndef FIELD_OFFSET
61 #define FIELD_OFFSET(type,fld) ((LONG)&(((type *)0)->fld))
62 #endif
63
64 //
65 // This stuff maybe should go in a vdm.h?
66 //
67 typedef enum _VDM_ENTRY_CODE
68 {
69 VdmEntryUndo,
70 VdmEntryUpdateProcess,
71 VdmEntryUpdateControlCHandler
72 } VDM_ENTRY_CODE;
73
74 //
75 // Undo States
76 //
77 #define VDM_UNDO_PARTIAL 0x01
78 #define VDM_UNDO_FULL 0x02
79 #define VDM_UNDO_REUSE 0x04
80 #define VDM_UNDO_COMPLETED 0x08
81
82 //
83 // Binary Types to share with VDM
84 //
85 #define BINARY_TYPE_EXE 0x01
86 #define BINARY_TYPE_COM 0x02
87 #define BINARY_TYPE_PIF 0x03
88 #define BINARY_TYPE_DOS 0x10
89 #define BINARY_TYPE_SEPARATE_WOW 0x20
90 #define BINARY_TYPE_WOW 0x40
91 #define BINARY_TYPE_WOW_EX 0x80
92
93 //
94 // VDM States
95 //
96 #define VDM_NOT_LOADED 0x01
97 #define VDM_NOT_READY 0x02
98 #define VDM_READY 0x04
99
100 /* Undocumented CreateProcess flag */
101 #define STARTF_SHELLPRIVATE 0x400
102
103 typedef struct _CODEPAGE_ENTRY
104 {
105 LIST_ENTRY Entry;
106 UINT CodePage;
107 HANDLE SectionHandle;
108 PBYTE SectionMapping;
109 CPTABLEINFO CodePageTable;
110 } CODEPAGE_ENTRY, *PCODEPAGE_ENTRY;
111
112 typedef struct tagLOADPARMS32
113 {
114 LPSTR lpEnvAddress;
115 LPSTR lpCmdLine;
116 WORD wMagicValue;
117 WORD wCmdShow;
118 DWORD dwReserved;
119 } LOADPARMS32;
120
121 typedef enum _BASE_SEARCH_PATH_TYPE
122 {
123 BaseSearchPathInvalid,
124 BaseSearchPathDll,
125 BaseSearchPathApp,
126 BaseSearchPathDefault,
127 BaseSearchPathEnv,
128 BaseSearchPathCurrent,
129 BaseSearchPathMax
130 } BASE_SEARCH_PATH_TYPE, *PBASE_SEARCH_PATH_TYPE;
131
132 typedef enum _BASE_CURRENT_DIR_PLACEMENT
133 {
134 BaseCurrentDirPlacementInvalid = -1,
135 BaseCurrentDirPlacementDefault,
136 BaseCurrentDirPlacementSafe,
137 BaseCurrentDirPlacementMax
138 } BASE_CURRENT_DIR_PLACEMENT;
139
140 typedef struct _BASEP_ACTCTX_BLOCK
141 {
142 ULONG Flags;
143 PVOID ActivationContext;
144 PVOID CompletionContext;
145 LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine;
146 } BASEP_ACTCTX_BLOCK, *PBASEP_ACTCTX_BLOCK;
147
148 #define BASEP_GET_MODULE_HANDLE_EX_PARAMETER_VALIDATION_ERROR 1
149 #define BASEP_GET_MODULE_HANDLE_EX_PARAMETER_VALIDATION_SUCCESS 2
150 #define BASEP_GET_MODULE_HANDLE_EX_PARAMETER_VALIDATION_CONTINUE 3
151
152 extern PBASE_STATIC_SERVER_DATA BaseStaticServerData;
153
154 typedef
155 DWORD
156 (*WaitForInputIdleType)(
157 HANDLE hProcess,
158 DWORD dwMilliseconds);
159
160 extern WaitForInputIdleType UserWaitForInputIdleRoutine;
161
162 /* GLOBAL VARIABLES **********************************************************/
163
164 extern BOOL bIsFileApiAnsi;
165 extern HMODULE hCurrentModule;
166
167 extern RTL_CRITICAL_SECTION BaseDllDirectoryLock;
168
169 extern UNICODE_STRING BaseDllDirectory;
170 extern UNICODE_STRING BaseDefaultPath;
171 extern UNICODE_STRING BaseDefaultPathAppend;
172 extern PLDR_DATA_TABLE_ENTRY BasepExeLdrEntry;
173
174 extern LPTOP_LEVEL_EXCEPTION_FILTER GlobalTopLevelExceptionFilter;
175
176 extern SYSTEM_BASIC_INFORMATION BaseCachedSysInfo;
177
178 extern BOOLEAN BaseRunningInServerProcess;
179
180 /* FUNCTION PROTOTYPES *******************************************************/
181
182 VOID
183 NTAPI
184 BaseDllInitializeMemoryManager(VOID);
185
186 PTEB GetTeb(VOID);
187
188 PWCHAR FilenameA2W(LPCSTR NameA, BOOL alloc);
189 DWORD FilenameW2A_N(LPSTR dest, INT destlen, LPCWSTR src, INT srclen);
190
191 DWORD FilenameW2A_FitOrFail(LPSTR DestA, INT destLen, LPCWSTR SourceW, INT sourceLen);
192 DWORD FilenameU2A_FitOrFail(LPSTR DestA, INT destLen, PUNICODE_STRING SourceU);
193
194 #define HeapAlloc RtlAllocateHeap
195 #define HeapReAlloc RtlReAllocateHeap
196 #define HeapFree RtlFreeHeap
197 #define _lread (_readfun)_hread
198
199 PLARGE_INTEGER
200 WINAPI
201 BaseFormatTimeOut(OUT PLARGE_INTEGER Timeout,
202 IN DWORD dwMilliseconds);
203
204 POBJECT_ATTRIBUTES
205 WINAPI
206 BaseFormatObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes,
207 IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL,
208 IN PUNICODE_STRING ObjectName);
209
210 NTSTATUS
211 WINAPI
212 BaseCreateStack(HANDLE hProcess,
213 SIZE_T StackReserve,
214 SIZE_T StackCommit,
215 PINITIAL_TEB InitialTeb);
216
217 VOID
218 WINAPI
219 BaseInitializeContext(IN PCONTEXT Context,
220 IN PVOID Parameter,
221 IN PVOID StartAddress,
222 IN PVOID StackAddress,
223 IN ULONG ContextType);
224
225 VOID
226 WINAPI
227 BaseThreadStartupThunk(VOID);
228
229 VOID
230 WINAPI
231 BaseProcessStartThunk(VOID);
232
233 VOID
234 NTAPI
235 BasepFreeActivationContextActivationBlock(
236 IN PBASEP_ACTCTX_BLOCK ActivationBlock
237 );
238
239 NTSTATUS
240 NTAPI
241 BasepAllocateActivationContextActivationBlock(
242 IN DWORD Flags,
243 IN PVOID CompletionRoutine,
244 IN PVOID CompletionContext,
245 OUT PBASEP_ACTCTX_BLOCK *ActivationBlock
246 );
247
248 __declspec(noreturn)
249 VOID
250 WINAPI
251 BaseThreadStartup(LPTHREAD_START_ROUTINE lpStartAddress,
252 LPVOID lpParameter);
253
254 VOID
255 WINAPI
256 BaseFreeThreadStack(IN HANDLE hProcess,
257 IN PINITIAL_TEB InitialTeb);
258
259 __declspec(noreturn)
260 VOID
261 WINAPI
262 BaseFiberStartup(VOID);
263
264 typedef UINT (WINAPI *PPROCESS_START_ROUTINE)(VOID);
265
266 VOID
267 WINAPI
268 BaseProcessStartup(PPROCESS_START_ROUTINE lpStartAddress);
269
270 PVOID
271 WINAPI
272 BasepIsRealtimeAllowed(IN BOOLEAN Keep);
273
274 VOID
275 WINAPI
276 BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString,
277 OUT LPWSTR* UnicodeString);
278
279 PUNICODE_STRING
280 WINAPI
281 Basep8BitStringToStaticUnicodeString(IN LPCSTR AnsiString);
282
283 BOOLEAN
284 WINAPI
285 Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString,
286 IN LPCSTR String);
287
288 typedef NTSTATUS (NTAPI *PRTL_CONVERT_STRING)(IN PUNICODE_STRING UnicodeString,
289 IN PANSI_STRING AnsiString,
290 IN BOOLEAN AllocateMemory);
291
292 typedef ULONG (NTAPI *PRTL_COUNT_STRING)(IN PUNICODE_STRING UnicodeString);
293
294 typedef NTSTATUS (NTAPI *PRTL_CONVERT_STRINGA)(IN PANSI_STRING AnsiString,
295 IN PCUNICODE_STRING UnicodeString,
296 IN BOOLEAN AllocateMemory);
297
298 typedef ULONG (NTAPI *PRTL_COUNT_STRINGA)(IN PANSI_STRING UnicodeString);
299
300 ULONG
301 NTAPI
302 BasepUnicodeStringToAnsiSize(IN PUNICODE_STRING String);
303
304 ULONG
305 NTAPI
306 BasepAnsiStringToUnicodeSize(IN PANSI_STRING String);
307
308 extern PRTL_CONVERT_STRING Basep8BitStringToUnicodeString;
309 extern PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString;
310 extern PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize;
311 extern PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize;
312
313 extern UNICODE_STRING BaseWindowsDirectory, BaseWindowsSystemDirectory;
314 extern HANDLE BaseNamedObjectDirectory;
315
316 HANDLE
317 WINAPI
318 BaseGetNamedObjectDirectory(VOID);
319
320 NTSTATUS
321 WINAPI
322 BasepMapFile(IN LPCWSTR lpApplicationName,
323 OUT PHANDLE hSection,
324 IN PUNICODE_STRING ApplicationName);
325
326 PCODEPAGE_ENTRY FASTCALL
327 IntGetCodePageEntry(UINT CodePage);
328
329 LPWSTR
330 WINAPI
331 BaseComputeProcessDllPath(
332 IN LPWSTR FullPath,
333 IN PVOID Environment
334 );
335
336 LPWSTR
337 WINAPI
338 BaseComputeProcessExePath(
339 IN LPWSTR FullPath
340 );
341
342 ULONG
343 WINAPI
344 BaseIsDosApplication(
345 IN PUNICODE_STRING PathName,
346 IN NTSTATUS Status
347 );
348
349 NTSTATUS
350 WINAPI
351 BasepCheckBadapp(
352 IN HANDLE FileHandle,
353 IN PWCHAR ApplicationName,
354 IN PWCHAR Environment,
355 IN USHORT ExeType,
356 IN PVOID* SdbQueryAppCompatData,
357 IN PULONG SdbQueryAppCompatDataSize,
358 IN PVOID* SxsData,
359 IN PULONG SxsDataSize,
360 OUT PULONG FusionFlags
361 );
362
363 BOOLEAN
364 WINAPI
365 IsShimInfrastructureDisabled(
366 VOID
367 );
368
369 BOOL
370 NTAPI
371 BaseDestroyVDMEnvironment(
372 IN PANSI_STRING AnsiEnv,
373 IN PUNICODE_STRING UnicodeEnv
374 );
375
376 BOOL
377 WINAPI
378 BaseGetVdmConfigInfo(
379 IN LPCWSTR Reserved,
380 IN ULONG DosSeqId,
381 IN ULONG BinaryType,
382 IN PUNICODE_STRING CmdLineString,
383 OUT PULONG VdmSize
384 );
385
386 BOOL
387 NTAPI
388 BaseCreateVDMEnvironment(
389 IN PWCHAR lpEnvironment,
390 IN PANSI_STRING AnsiEnv,
391 IN PUNICODE_STRING UnicodeEnv
392 );
393
394 VOID
395 WINAPI
396 InitCommandLines(VOID);
397
398 VOID
399 WINAPI
400 BaseSetLastNTError(IN NTSTATUS Status);
401
402 /* FIXME */
403 WCHAR WINAPI RtlAnsiCharToUnicodeChar(LPSTR *);
404
405 VOID
406 NTAPI
407 BasepLocateExeLdrEntry(IN PLDR_DATA_TABLE_ENTRY Entry,
408 IN PVOID Context,
409 OUT BOOLEAN *StopEnumeration);
410
411 typedef NTSTATUS
412 (NTAPI *PBASEP_APPCERT_PLUGIN_FUNC)(
413 IN PCHAR ApplicationName,
414 IN ULONG CertFlag
415 );
416
417 typedef NTSTATUS
418 (NTAPI *PBASEP_APPCERT_EMBEDDED_FUNC)(
419 IN PCHAR ApplicationName
420 );
421
422 typedef NTSTATUS
423 (NTAPI *PSAFER_REPLACE_PROCESS_THREAD_TOKENS)(
424 IN HANDLE Token,
425 IN HANDLE Process,
426 IN HANDLE Thread
427 );
428
429 typedef struct _BASEP_APPCERT_ENTRY
430 {
431 LIST_ENTRY Entry;
432 UNICODE_STRING Name;
433 PBASEP_APPCERT_PLUGIN_FUNC fPluginCertFunc;
434 } BASEP_APPCERT_ENTRY, *PBASEP_APPCERT_ENTRY;
435
436 typedef struct _BASE_MSG_SXS_HANDLES
437 {
438 HANDLE File;
439 HANDLE Process;
440 HANDLE Section;
441 LARGE_INTEGER ViewBase;
442 } BASE_MSG_SXS_HANDLES, *PBASE_MSG_SXS_HANDLES;
443
444 typedef struct _SXS_WIN32_NT_PATH_PAIR
445 {
446 PUNICODE_STRING Win32;
447 PUNICODE_STRING Nt;
448 } SXS_WIN32_NT_PATH_PAIR, *PSXS_WIN32_NT_PATH_PAIR;
449
450 typedef struct _SXS_OVERRIDE_MANIFEST
451 {
452 PCWCH Name;
453 PVOID Address;
454 ULONG Size;
455 } SXS_OVERRIDE_MANIFEST, *PSXS_OVERRIDE_MANIFEST;
456
457 NTSTATUS
458 NTAPI
459 BasepConfigureAppCertDlls(
460 IN PWSTR ValueName,
461 IN ULONG ValueType,
462 IN PVOID ValueData,
463 IN ULONG ValueLength,
464 IN PVOID Context,
465 IN PVOID EntryContext
466 );
467
468 extern LIST_ENTRY BasepAppCertDllsList;
469 extern RTL_CRITICAL_SECTION gcsAppCert;
470
471 BOOL
472 WINAPI
473 BaseUpdateVDMEntry(
474 IN ULONG UpdateIndex,
475 IN OUT PHANDLE WaitHandle,
476 IN ULONG IndexInfo,
477 IN ULONG BinaryType
478 );
479
480 VOID
481 WINAPI
482 BaseMarkFileForDelete(
483 IN HANDLE FileHandle,
484 IN ULONG FileAttributes
485 );
486
487 BOOL
488 WINAPI
489 BaseCheckForVDM(
490 IN HANDLE ProcessHandle,
491 OUT LPDWORD ExitCode
492 );
493
494 /* FIXME: This is EXPORTED! It should go in an external kernel32.h header */
495 VOID
496 WINAPI
497 BasepFreeAppCompatData(
498 IN PVOID AppCompatData,
499 IN PVOID AppCompatSxsData
500 );