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