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 HANDLE_DETACHED_PROCESS (HANDLE)-2
65 #define HANDLE_CREATE_NEW_CONSOLE (HANDLE)-3
66 #define HANDLE_CREATE_NO_WINDOW (HANDLE)-4
69 // This stuff maybe should go in a vdm.h?
71 typedef enum _VDM_ENTRY_CODE
74 VdmEntryUpdateProcess
,
75 VdmEntryUpdateControlCHandler
81 #define VDM_UNDO_PARTIAL 0x01
82 #define VDM_UNDO_FULL 0x02
83 #define VDM_UNDO_REUSE 0x04
84 #define VDM_UNDO_COMPLETED 0x08
87 // Binary Types to share with VDM
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
100 #define VDM_NOT_LOADED 0x01
101 #define VDM_NOT_READY 0x02
102 #define VDM_READY 0x04
104 /* Undocumented CreateProcess flag */
105 #define STARTF_SHELLPRIVATE 0x400
107 typedef struct _CODEPAGE_ENTRY
111 HANDLE SectionHandle
;
112 PBYTE SectionMapping
;
113 CPTABLEINFO CodePageTable
;
114 } CODEPAGE_ENTRY
, *PCODEPAGE_ENTRY
;
116 typedef struct tagLOADPARMS32
{
124 typedef enum _BASE_SEARCH_PATH_TYPE
126 BaseSearchPathInvalid
,
129 BaseSearchPathDefault
,
131 BaseSearchPathCurrent
,
133 } BASE_SEARCH_PATH_TYPE
, *PBASE_SEARCH_PATH_TYPE
;
135 typedef enum _BASE_CURRENT_DIR_PLACEMENT
137 BaseCurrentDirPlacementInvalid
= -1,
138 BaseCurrentDirPlacementDefault
,
139 BaseCurrentDirPlacementSafe
,
140 BaseCurrentDirPlacementMax
141 } BASE_CURRENT_DIR_PLACEMENT
;
143 typedef struct _BASEP_ACTCTX_BLOCK
146 PVOID ActivationContext
;
147 PVOID CompletionContext
;
148 LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
;
149 } BASEP_ACTCTX_BLOCK
, *PBASEP_ACTCTX_BLOCK
;
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
155 extern PBASE_STATIC_SERVER_DATA BaseStaticServerData
;
159 (*WaitForInputIdleType
)(
161 DWORD dwMilliseconds
);
163 extern WaitForInputIdleType UserWaitForInputIdleRoutine
;
165 /* GLOBAL VARIABLES **********************************************************/
167 extern BOOL bIsFileApiAnsi
;
168 extern HMODULE hCurrentModule
;
170 extern RTL_CRITICAL_SECTION BaseDllDirectoryLock
;
172 extern UNICODE_STRING BaseDllDirectory
;
173 extern UNICODE_STRING BaseDefaultPath
;
174 extern UNICODE_STRING BaseDefaultPathAppend
;
175 extern PLDR_DATA_TABLE_ENTRY BasepExeLdrEntry
;
177 extern LPTOP_LEVEL_EXCEPTION_FILTER GlobalTopLevelExceptionFilter
;
179 extern SYSTEM_BASIC_INFORMATION BaseCachedSysInfo
;
181 extern BOOLEAN BaseRunningInServerProcess
;
183 /* FUNCTION PROTOTYPES *******************************************************/
187 BaseDllInitializeMemoryManager(VOID
);
189 BOOL WINAPI
VerifyConsoleIoHandle(HANDLE Handle
);
191 BOOL WINAPI
CloseConsoleHandle(HANDLE Handle
);
194 GetConsoleInputWaitHandle(VOID
);
196 HANDLE WINAPI
OpenConsoleW(LPCWSTR wsName
,
197 DWORD dwDesiredAccess
,
201 BOOL WINAPI
SetConsoleInputExeNameW(LPCWSTR lpInputExeName
);
205 HANDLE FASTCALL
TranslateStdHandle(HANDLE hHandle
);
207 PWCHAR
FilenameA2W(LPCSTR NameA
, BOOL alloc
);
208 DWORD
FilenameW2A_N(LPSTR dest
, INT destlen
, LPCWSTR src
, INT srclen
);
210 DWORD
FilenameW2A_FitOrFail(LPSTR DestA
, INT destLen
, LPCWSTR SourceW
, INT sourceLen
);
211 DWORD
FilenameU2A_FitOrFail(LPSTR DestA
, INT destLen
, PUNICODE_STRING SourceU
);
213 #define HeapAlloc RtlAllocateHeap
214 #define HeapReAlloc RtlReAllocateHeap
215 #define HeapFree RtlFreeHeap
216 #define _lread (_readfun)_hread
220 BaseFormatTimeOut(OUT PLARGE_INTEGER Timeout
,
221 IN DWORD dwMilliseconds
);
225 BaseFormatObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes
,
226 IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL
,
227 IN PUNICODE_STRING ObjectName
);
231 BaseCreateStack(HANDLE hProcess
,
234 PINITIAL_TEB InitialTeb
);
238 BaseInitializeContext(IN PCONTEXT Context
,
240 IN PVOID StartAddress
,
241 IN PVOID StackAddress
,
242 IN ULONG ContextType
);
246 BaseThreadStartupThunk(VOID
);
250 BaseProcessStartThunk(VOID
);
254 BasepFreeActivationContextActivationBlock(
255 IN PBASEP_ACTCTX_BLOCK ActivationBlock
260 BasepAllocateActivationContextActivationBlock(
262 IN PVOID CompletionRoutine
,
263 IN PVOID CompletionContext
,
264 OUT PBASEP_ACTCTX_BLOCK
*ActivationBlock
270 BaseThreadStartup(LPTHREAD_START_ROUTINE lpStartAddress
,
275 BaseFreeThreadStack(IN HANDLE hProcess
,
276 IN PINITIAL_TEB InitialTeb
);
281 BaseFiberStartup(VOID
);
283 typedef UINT (WINAPI
*PPROCESS_START_ROUTINE
)(VOID
);
287 BaseProcessStartup(PPROCESS_START_ROUTINE lpStartAddress
);
291 BasepIsRealtimeAllowed(IN BOOLEAN Keep
);
295 BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString
,
296 OUT LPWSTR
* UnicodeString
);
300 Basep8BitStringToStaticUnicodeString(IN LPCSTR AnsiString
);
304 Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString
,
307 typedef NTSTATUS (NTAPI
*PRTL_CONVERT_STRING
)(IN PUNICODE_STRING UnicodeString
,
308 IN PANSI_STRING AnsiString
,
309 IN BOOLEAN AllocateMemory
);
311 typedef ULONG (NTAPI
*PRTL_COUNT_STRING
)(IN PUNICODE_STRING UnicodeString
);
313 typedef NTSTATUS (NTAPI
*PRTL_CONVERT_STRINGA
)(IN PANSI_STRING AnsiString
,
314 IN PCUNICODE_STRING UnicodeString
,
315 IN BOOLEAN AllocateMemory
);
317 typedef ULONG (NTAPI
*PRTL_COUNT_STRINGA
)(IN PANSI_STRING UnicodeString
);
321 BasepUnicodeStringToAnsiSize(IN PUNICODE_STRING String
);
325 BasepAnsiStringToUnicodeSize(IN PANSI_STRING String
);
327 extern PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
;
328 extern PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString
;
329 extern PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize
;
330 extern PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize
;
332 extern UNICODE_STRING BaseWindowsDirectory
, BaseWindowsSystemDirectory
;
333 extern HANDLE BaseNamedObjectDirectory
;
337 BaseGetNamedObjectDirectory(VOID
);
341 BasepMapFile(IN LPCWSTR lpApplicationName
,
342 OUT PHANDLE hSection
,
343 IN PUNICODE_STRING ApplicationName
);
345 PCODEPAGE_ENTRY FASTCALL
346 IntGetCodePageEntry(UINT CodePage
);
350 BaseComputeProcessDllPath(
357 BaseComputeProcessExePath(
363 BaseIsDosApplication(
364 IN PUNICODE_STRING PathName
,
371 IN HANDLE FileHandle
,
372 IN PWCHAR ApplicationName
,
373 IN PWCHAR Environment
,
375 IN PVOID
* SdbQueryAppCompatData
,
376 IN PULONG SdbQueryAppCompatDataSize
,
378 IN PULONG SxsDataSize
,
379 OUT PULONG FusionFlags
384 IsShimInfrastructureDisabled(
390 BaseDestroyVDMEnvironment(
391 IN PANSI_STRING AnsiEnv
,
392 IN PUNICODE_STRING UnicodeEnv
397 BaseGetVdmConfigInfo(
401 IN PUNICODE_STRING CmdLineString
,
407 BaseCreateVDMEnvironment(
408 IN PWCHAR lpEnvironment
,
409 IN PANSI_STRING AnsiEnv
,
410 IN PUNICODE_STRING UnicodeEnv
415 InitCommandLines(VOID
);
419 BaseSetLastNTError(IN NTSTATUS Status
);
422 WCHAR WINAPI
RtlAnsiCharToUnicodeChar(LPSTR
*);
426 DuplicateConsoleHandle(HANDLE hConsole
,
427 DWORD dwDesiredAccess
,
433 BasepLocateExeLdrEntry(IN PLDR_DATA_TABLE_ENTRY Entry
,
435 OUT BOOLEAN
*StopEnumeration
);
438 (NTAPI
*PBASEP_APPCERT_PLUGIN_FUNC
)(
439 IN PCHAR ApplicationName
,
444 (NTAPI
*PBASEP_APPCERT_EMBEDDED_FUNC
)(
445 IN PCHAR ApplicationName
449 (NTAPI
*PSAFER_REPLACE_PROCESS_THREAD_TOKENS
)(
455 typedef struct _BASEP_APPCERT_ENTRY
459 PBASEP_APPCERT_PLUGIN_FUNC fPluginCertFunc
;
460 } BASEP_APPCERT_ENTRY
, *PBASEP_APPCERT_ENTRY
;
462 typedef struct _BASE_MSG_SXS_HANDLES
467 LARGE_INTEGER ViewBase
;
468 } BASE_MSG_SXS_HANDLES
, *PBASE_MSG_SXS_HANDLES
;
470 typedef struct _SXS_WIN32_NT_PATH_PAIR
472 PUNICODE_STRING Win32
;
474 } SXS_WIN32_NT_PATH_PAIR
, *PSXS_WIN32_NT_PATH_PAIR
;
476 typedef struct _SXS_OVERRIDE_MANIFEST
481 } SXS_OVERRIDE_MANIFEST
, *PSXS_OVERRIDE_MANIFEST
;
485 BasepConfigureAppCertDlls(
489 IN ULONG ValueLength
,
491 IN PVOID EntryContext
494 extern LIST_ENTRY BasepAppCertDllsList
;
495 extern RTL_CRITICAL_SECTION gcsAppCert
;
500 IN ULONG UpdateIndex
,
501 IN OUT PHANDLE WaitHandle
,
508 BaseMarkFileForDelete(
509 IN HANDLE FileHandle
,
510 IN ULONG FileAttributes
516 IN HANDLE ProcessHandle
,
520 /* FIXME: This is EXPORTED! It should go in an external kernel32.h header */
523 BasepFreeAppCompatData(
524 IN PVOID AppCompatData
,
525 IN PVOID AppCompatSxsData