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