6 #define kernel32file 200
7 #define kernel32ver 201
10 #define kernel32session 204
14 #define DEBUG_CHANNEL(ch) static ULONG gDebugChannel = ch;
16 #define DEBUG_CHANNEL(ch)
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__)
25 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); \
26 DPRINT1("%s() is UNIMPLEMENTED!\n", __FUNCTION__)
33 #include "wine/unicode.h"
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)
47 #define MAGIC(c1,c2,c3,c4) ((c1) + ((c2)<<8) + ((c3)<<16) + ((c4)<<24))
49 #define MAGIC_HEAP MAGIC( 'H','E','A','P' )
51 #define ROUNDUP(a,b) ((((a)+(b)-1)/(b))*(b))
52 #define ROUNDDOWN(a,b) (((a)/(b))*(b))
54 #define ROUND_DOWN(n, align) \
55 (((ULONG)n) & ~((align) - 1l))
57 #define ROUND_UP(n, align) \
58 ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
61 #define FIELD_OFFSET(type,fld) ((LONG)&(((type *)0)->fld))
64 #define IsConsoleHandle(h) \
65 (((((ULONG_PTR)h) & 0x10000003) == 0x3) ? TRUE : FALSE)
67 #define HANDLE_DETACHED_PROCESS (HANDLE)-2
68 #define HANDLE_CREATE_NEW_CONSOLE (HANDLE)-3
69 #define HANDLE_CREATE_NO_WINDOW (HANDLE)-4
72 // This stuff maybe should go in a vdm.h?
74 typedef enum _VDM_ENTRY_CODE
77 VdmEntryUpdateProcess
,
78 VdmEntryUpdateControlCHandler
84 #define VDM_UNDO_PARTIAL 0x01
85 #define VDM_UNDO_FULL 0x02
86 #define VDM_UNDO_REUSE 0x04
87 #define VDM_UNDO_COMPLETED 0x08
90 // Binary Types to share with VDM
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
103 #define VDM_NOT_LOADED 0x01
104 #define VDM_NOT_READY 0x02
105 #define VDM_READY 0x04
107 /* Undocumented CreateProcess flag */
108 #define STARTF_SHELLPRIVATE 0x400
110 typedef struct _CODEPAGE_ENTRY
114 HANDLE SectionHandle
;
115 PBYTE SectionMapping
;
116 CPTABLEINFO CodePageTable
;
117 } CODEPAGE_ENTRY
, *PCODEPAGE_ENTRY
;
119 typedef struct tagLOADPARMS32
{
127 typedef enum _BASE_SEARCH_PATH_TYPE
129 BaseSearchPathInvalid
,
132 BaseSearchPathDefault
,
134 BaseSearchPathCurrent
,
136 } BASE_SEARCH_PATH_TYPE
, *PBASE_SEARCH_PATH_TYPE
;
138 typedef enum _BASE_CURRENT_DIR_PLACEMENT
140 BaseCurrentDirPlacementInvalid
= -1,
141 BaseCurrentDirPlacementDefault
,
142 BaseCurrentDirPlacementSafe
,
143 BaseCurrentDirPlacementMax
144 } BASE_CURRENT_DIR_PLACEMENT
;
146 typedef struct _BASEP_ACTCTX_BLOCK
149 PVOID ActivationContext
;
150 PVOID CompletionContext
;
151 LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
;
152 } BASEP_ACTCTX_BLOCK
, *PBASEP_ACTCTX_BLOCK
;
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
158 extern PBASE_STATIC_SERVER_DATA BaseStaticServerData
;
162 (*WaitForInputIdleType
)(
164 DWORD dwMilliseconds
);
166 extern WaitForInputIdleType UserWaitForInputIdleRoutine
;
168 /* GLOBAL VARIABLES **********************************************************/
170 extern BOOL bIsFileApiAnsi
;
171 extern HMODULE hCurrentModule
;
173 extern RTL_CRITICAL_SECTION BaseDllDirectoryLock
;
175 extern UNICODE_STRING BaseDllDirectory
;
176 extern UNICODE_STRING BaseDefaultPath
;
177 extern UNICODE_STRING BaseDefaultPathAppend
;
178 extern PLDR_DATA_TABLE_ENTRY BasepExeLdrEntry
;
180 extern LPTOP_LEVEL_EXCEPTION_FILTER GlobalTopLevelExceptionFilter
;
182 extern SYSTEM_BASIC_INFORMATION BaseCachedSysInfo
;
184 extern BOOLEAN BaseRunningInServerProcess
;
186 /* FUNCTION PROTOTYPES *******************************************************/
190 BaseDllInitializeMemoryManager(VOID
);
192 BOOL WINAPI
VerifyConsoleIoHandle(HANDLE Handle
);
194 BOOL WINAPI
CloseConsoleHandle(HANDLE Handle
);
197 GetConsoleInputWaitHandle (VOID
);
199 HANDLE WINAPI
OpenConsoleW (LPCWSTR wsName
,
200 DWORD dwDesiredAccess
,
204 BOOL WINAPI
SetConsoleInputExeNameW(LPCWSTR lpInputExeName
);
208 HANDLE FASTCALL
TranslateStdHandle(HANDLE hHandle
);
210 PWCHAR
FilenameA2W(LPCSTR NameA
, BOOL alloc
);
211 DWORD
FilenameW2A_N(LPSTR dest
, INT destlen
, LPCWSTR src
, INT srclen
);
213 DWORD
FilenameW2A_FitOrFail(LPSTR DestA
, INT destLen
, LPCWSTR SourceW
, INT sourceLen
);
214 DWORD
FilenameU2A_FitOrFail(LPSTR DestA
, INT destLen
, PUNICODE_STRING SourceU
);
216 #define HeapAlloc RtlAllocateHeap
217 #define HeapReAlloc RtlReAllocateHeap
218 #define HeapFree RtlFreeHeap
219 #define _lread (_readfun)_hread
223 BaseFormatTimeOut(OUT PLARGE_INTEGER Timeout
,
224 IN DWORD dwMilliseconds
);
228 BaseFormatObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes
,
229 IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL
,
230 IN PUNICODE_STRING ObjectName
);
234 BaseCreateStack(HANDLE hProcess
,
237 PINITIAL_TEB InitialTeb
);
241 BaseInitializeContext(IN PCONTEXT Context
,
243 IN PVOID StartAddress
,
244 IN PVOID StackAddress
,
245 IN ULONG ContextType
);
249 BaseThreadStartupThunk(VOID
);
253 BaseProcessStartThunk(VOID
);
257 BasepFreeActivationContextActivationBlock(
258 IN PBASEP_ACTCTX_BLOCK ActivationBlock
263 BasepAllocateActivationContextActivationBlock(
265 IN PVOID CompletionRoutine
,
266 IN PVOID CompletionContext
,
267 OUT PBASEP_ACTCTX_BLOCK
*ActivationBlock
273 BaseThreadStartup(LPTHREAD_START_ROUTINE lpStartAddress
,
278 BaseFreeThreadStack(IN HANDLE hProcess
,
279 IN PINITIAL_TEB InitialTeb
);
284 BaseFiberStartup(VOID
);
286 typedef UINT (WINAPI
*PPROCESS_START_ROUTINE
)(VOID
);
290 BaseProcessStartup(PPROCESS_START_ROUTINE lpStartAddress
);
294 BasepIsRealtimeAllowed(IN BOOLEAN Keep
);
298 BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString
,
299 OUT LPWSTR
* UnicodeString
);
303 Basep8BitStringToStaticUnicodeString(IN LPCSTR AnsiString
);
307 Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString
,
310 typedef NTSTATUS (NTAPI
*PRTL_CONVERT_STRING
)(IN PUNICODE_STRING UnicodeString
,
311 IN PANSI_STRING AnsiString
,
312 IN BOOLEAN AllocateMemory
);
314 typedef ULONG (NTAPI
*PRTL_COUNT_STRING
)(IN PUNICODE_STRING UnicodeString
);
316 typedef NTSTATUS (NTAPI
*PRTL_CONVERT_STRINGA
)(IN PANSI_STRING AnsiString
,
317 IN PCUNICODE_STRING UnicodeString
,
318 IN BOOLEAN AllocateMemory
);
320 typedef ULONG (NTAPI
*PRTL_COUNT_STRINGA
)(IN PANSI_STRING UnicodeString
);
324 BasepUnicodeStringToAnsiSize(IN PUNICODE_STRING String
);
328 BasepAnsiStringToUnicodeSize(IN PANSI_STRING String
);
330 extern PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
;
331 extern PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString
;
332 extern PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize
;
333 extern PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize
;
335 extern UNICODE_STRING BaseWindowsDirectory
, BaseWindowsSystemDirectory
;
336 extern HANDLE BaseNamedObjectDirectory
;
340 BaseGetNamedObjectDirectory(VOID
);
344 BasepMapFile(IN LPCWSTR lpApplicationName
,
345 OUT PHANDLE hSection
,
346 IN PUNICODE_STRING ApplicationName
);
348 PCODEPAGE_ENTRY FASTCALL
349 IntGetCodePageEntry(UINT CodePage
);
353 BaseComputeProcessDllPath(
360 BaseComputeProcessExePath(
366 BaseIsDosApplication(
367 IN PUNICODE_STRING PathName
,
374 IN HANDLE FileHandle
,
375 IN PWCHAR ApplicationName
,
376 IN PWCHAR Environment
,
378 IN PVOID
* SdbQueryAppCompatData
,
379 IN PULONG SdbQueryAppCompatDataSize
,
381 IN PULONG SxsDataSize
,
382 OUT PULONG FusionFlags
387 IsShimInfrastructureDisabled(
393 BaseDestroyVDMEnvironment(
394 IN PANSI_STRING AnsiEnv
,
395 IN PUNICODE_STRING UnicodeEnv
400 BaseGetVdmConfigInfo(
404 IN PUNICODE_STRING CmdLineString
,
410 BaseCreateVDMEnvironment(
411 IN PWCHAR lpEnvironment
,
412 IN PANSI_STRING AnsiEnv
,
413 IN PUNICODE_STRING UnicodeEnv
418 InitCommandLines(VOID
);
422 BaseSetLastNTError(IN NTSTATUS Status
);
425 WCHAR WINAPI
RtlAnsiCharToUnicodeChar(LPSTR
*);
429 DuplicateConsoleHandle(HANDLE hConsole
,
430 DWORD dwDesiredAccess
,
436 BasepLocateExeLdrEntry(IN PLDR_DATA_TABLE_ENTRY Entry
,
438 OUT BOOLEAN
*StopEnumeration
);
441 (NTAPI
*PBASEP_APPCERT_PLUGIN_FUNC
)(
442 IN PCHAR ApplicationName
,
447 (NTAPI
*PBASEP_APPCERT_EMBEDDED_FUNC
)(
448 IN PCHAR ApplicationName
452 (NTAPI
*PSAFER_REPLACE_PROCESS_THREAD_TOKENS
)(
458 typedef struct _BASEP_APPCERT_ENTRY
462 PBASEP_APPCERT_PLUGIN_FUNC fPluginCertFunc
;
463 } BASEP_APPCERT_ENTRY
, *PBASEP_APPCERT_ENTRY
;
465 typedef struct _BASE_MSG_SXS_HANDLES
470 LARGE_INTEGER ViewBase
;
471 } BASE_MSG_SXS_HANDLES
, *PBASE_MSG_SXS_HANDLES
;
473 typedef struct _SXS_WIN32_NT_PATH_PAIR
475 PUNICODE_STRING Win32
;
477 } SXS_WIN32_NT_PATH_PAIR
, *PSXS_WIN32_NT_PATH_PAIR
;
479 typedef struct _SXS_OVERRIDE_MANIFEST
484 } SXS_OVERRIDE_MANIFEST
, *PSXS_OVERRIDE_MANIFEST
;
488 BasepConfigureAppCertDlls(
492 IN ULONG ValueLength
,
494 IN PVOID EntryContext
497 extern LIST_ENTRY BasepAppCertDllsList
;
498 extern RTL_CRITICAL_SECTION gcsAppCert
;
503 IN ULONG UpdateIndex
,
504 IN OUT PHANDLE WaitHandle
,
511 BaseMarkFileForDelete(
512 IN HANDLE FileHandle
,
513 IN ULONG FileAttributes
519 IN HANDLE ProcessHandle
,
523 /* FIXME: This is EXPORTED! It should go in an external kernel32.h header */
526 BasepFreeAppCompatData(
527 IN PVOID AppCompatData
,
528 IN PVOID AppCompatSxsData