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))
65 // This stuff maybe should go in a vdm.h?
67 typedef enum _VDM_ENTRY_CODE
70 VdmEntryUpdateProcess
,
71 VdmEntryUpdateControlCHandler
77 #define VDM_UNDO_PARTIAL 0x01
78 #define VDM_UNDO_FULL 0x02
79 #define VDM_UNDO_REUSE 0x04
80 #define VDM_UNDO_COMPLETED 0x08
83 // Binary Types to share with VDM
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
96 #define VDM_NOT_LOADED 0x01
97 #define VDM_NOT_READY 0x02
98 #define VDM_READY 0x04
100 /* Undocumented CreateProcess flag */
101 #define STARTF_SHELLPRIVATE 0x400
103 typedef struct _CODEPAGE_ENTRY
107 HANDLE SectionHandle
;
108 PBYTE SectionMapping
;
109 CPTABLEINFO CodePageTable
;
110 } CODEPAGE_ENTRY
, *PCODEPAGE_ENTRY
;
112 typedef struct tagLOADPARMS32
121 typedef enum _BASE_SEARCH_PATH_TYPE
123 BaseSearchPathInvalid
,
126 BaseSearchPathDefault
,
128 BaseSearchPathCurrent
,
130 } BASE_SEARCH_PATH_TYPE
, *PBASE_SEARCH_PATH_TYPE
;
132 typedef enum _BASE_CURRENT_DIR_PLACEMENT
134 BaseCurrentDirPlacementInvalid
= -1,
135 BaseCurrentDirPlacementDefault
,
136 BaseCurrentDirPlacementSafe
,
137 BaseCurrentDirPlacementMax
138 } BASE_CURRENT_DIR_PLACEMENT
;
140 typedef struct _BASEP_ACTCTX_BLOCK
143 PVOID ActivationContext
;
144 PVOID CompletionContext
;
145 LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
;
146 } BASEP_ACTCTX_BLOCK
, *PBASEP_ACTCTX_BLOCK
;
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
152 extern PBASE_STATIC_SERVER_DATA BaseStaticServerData
;
156 (*WaitForInputIdleType
)(
158 DWORD dwMilliseconds
);
160 extern WaitForInputIdleType UserWaitForInputIdleRoutine
;
162 /* GLOBAL VARIABLES **********************************************************/
164 extern BOOL bIsFileApiAnsi
;
165 extern HMODULE hCurrentModule
;
167 extern RTL_CRITICAL_SECTION BaseDllDirectoryLock
;
169 extern UNICODE_STRING BaseDllDirectory
;
170 extern UNICODE_STRING BaseDefaultPath
;
171 extern UNICODE_STRING BaseDefaultPathAppend
;
172 extern PLDR_DATA_TABLE_ENTRY BasepExeLdrEntry
;
174 extern LPTOP_LEVEL_EXCEPTION_FILTER GlobalTopLevelExceptionFilter
;
176 extern SYSTEM_BASIC_INFORMATION BaseCachedSysInfo
;
178 extern BOOLEAN BaseRunningInServerProcess
;
180 /* FUNCTION PROTOTYPES *******************************************************/
184 BaseDllInitializeMemoryManager(VOID
);
188 PWCHAR
FilenameA2W(LPCSTR NameA
, BOOL alloc
);
189 DWORD
FilenameW2A_N(LPSTR dest
, INT destlen
, LPCWSTR src
, INT srclen
);
191 DWORD
FilenameW2A_FitOrFail(LPSTR DestA
, INT destLen
, LPCWSTR SourceW
, INT sourceLen
);
192 DWORD
FilenameU2A_FitOrFail(LPSTR DestA
, INT destLen
, PUNICODE_STRING SourceU
);
194 #define HeapAlloc RtlAllocateHeap
195 #define HeapReAlloc RtlReAllocateHeap
196 #define HeapFree RtlFreeHeap
197 #define _lread (_readfun)_hread
201 BaseFormatTimeOut(OUT PLARGE_INTEGER Timeout
,
202 IN DWORD dwMilliseconds
);
206 BaseFormatObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes
,
207 IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL
,
208 IN PUNICODE_STRING ObjectName
);
212 BaseCreateStack(HANDLE hProcess
,
215 PINITIAL_TEB InitialTeb
);
219 BaseInitializeContext(IN PCONTEXT Context
,
221 IN PVOID StartAddress
,
222 IN PVOID StackAddress
,
223 IN ULONG ContextType
);
227 BaseThreadStartupThunk(VOID
);
231 BaseProcessStartThunk(VOID
);
235 BasepFreeActivationContextActivationBlock(
236 IN PBASEP_ACTCTX_BLOCK ActivationBlock
241 BasepAllocateActivationContextActivationBlock(
243 IN PVOID CompletionRoutine
,
244 IN PVOID CompletionContext
,
245 OUT PBASEP_ACTCTX_BLOCK
*ActivationBlock
251 BaseThreadStartup(LPTHREAD_START_ROUTINE lpStartAddress
,
256 BaseFreeThreadStack(IN HANDLE hProcess
,
257 IN PINITIAL_TEB InitialTeb
);
262 BaseFiberStartup(VOID
);
264 typedef UINT (WINAPI
*PPROCESS_START_ROUTINE
)(VOID
);
268 BaseProcessStartup(PPROCESS_START_ROUTINE lpStartAddress
);
272 BasepIsRealtimeAllowed(IN BOOLEAN Keep
);
276 BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString
,
277 OUT LPWSTR
* UnicodeString
);
281 Basep8BitStringToStaticUnicodeString(IN LPCSTR AnsiString
);
285 Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString
,
288 typedef NTSTATUS (NTAPI
*PRTL_CONVERT_STRING
)(IN PUNICODE_STRING UnicodeString
,
289 IN PANSI_STRING AnsiString
,
290 IN BOOLEAN AllocateMemory
);
292 typedef ULONG (NTAPI
*PRTL_COUNT_STRING
)(IN PUNICODE_STRING UnicodeString
);
294 typedef NTSTATUS (NTAPI
*PRTL_CONVERT_STRINGA
)(IN PANSI_STRING AnsiString
,
295 IN PCUNICODE_STRING UnicodeString
,
296 IN BOOLEAN AllocateMemory
);
298 typedef ULONG (NTAPI
*PRTL_COUNT_STRINGA
)(IN PANSI_STRING UnicodeString
);
302 BasepUnicodeStringToAnsiSize(IN PUNICODE_STRING String
);
306 BasepAnsiStringToUnicodeSize(IN PANSI_STRING String
);
308 extern PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
;
309 extern PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString
;
310 extern PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize
;
311 extern PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize
;
313 extern UNICODE_STRING BaseWindowsDirectory
, BaseWindowsSystemDirectory
;
314 extern HANDLE BaseNamedObjectDirectory
;
318 BaseGetNamedObjectDirectory(VOID
);
322 BasepMapFile(IN LPCWSTR lpApplicationName
,
323 OUT PHANDLE hSection
,
324 IN PUNICODE_STRING ApplicationName
);
326 PCODEPAGE_ENTRY FASTCALL
327 IntGetCodePageEntry(UINT CodePage
);
331 BaseComputeProcessDllPath(
338 BaseComputeProcessExePath(
344 BaseIsDosApplication(
345 IN PUNICODE_STRING PathName
,
352 IN HANDLE FileHandle
,
353 IN PWCHAR ApplicationName
,
354 IN PWCHAR Environment
,
356 IN PVOID
* SdbQueryAppCompatData
,
357 IN PULONG SdbQueryAppCompatDataSize
,
359 IN PULONG SxsDataSize
,
360 OUT PULONG FusionFlags
365 IsShimInfrastructureDisabled(
371 BaseDestroyVDMEnvironment(
372 IN PANSI_STRING AnsiEnv
,
373 IN PUNICODE_STRING UnicodeEnv
378 BaseGetVdmConfigInfo(
382 IN PUNICODE_STRING CmdLineString
,
388 BaseCreateVDMEnvironment(
389 IN PWCHAR lpEnvironment
,
390 IN PANSI_STRING AnsiEnv
,
391 IN PUNICODE_STRING UnicodeEnv
396 InitCommandLines(VOID
);
400 BaseSetLastNTError(IN NTSTATUS Status
);
403 WCHAR WINAPI
RtlAnsiCharToUnicodeChar(LPSTR
*);
407 BasepLocateExeLdrEntry(IN PLDR_DATA_TABLE_ENTRY Entry
,
409 OUT BOOLEAN
*StopEnumeration
);
412 (NTAPI
*PBASEP_APPCERT_PLUGIN_FUNC
)(
413 IN PCHAR ApplicationName
,
418 (NTAPI
*PBASEP_APPCERT_EMBEDDED_FUNC
)(
419 IN PCHAR ApplicationName
423 (NTAPI
*PSAFER_REPLACE_PROCESS_THREAD_TOKENS
)(
429 typedef struct _BASEP_APPCERT_ENTRY
433 PBASEP_APPCERT_PLUGIN_FUNC fPluginCertFunc
;
434 } BASEP_APPCERT_ENTRY
, *PBASEP_APPCERT_ENTRY
;
436 typedef struct _BASE_MSG_SXS_HANDLES
441 LARGE_INTEGER ViewBase
;
442 } BASE_MSG_SXS_HANDLES
, *PBASE_MSG_SXS_HANDLES
;
444 typedef struct _SXS_WIN32_NT_PATH_PAIR
446 PUNICODE_STRING Win32
;
448 } SXS_WIN32_NT_PATH_PAIR
, *PSXS_WIN32_NT_PATH_PAIR
;
450 typedef struct _SXS_OVERRIDE_MANIFEST
455 } SXS_OVERRIDE_MANIFEST
, *PSXS_OVERRIDE_MANIFEST
;
459 BasepConfigureAppCertDlls(
463 IN ULONG ValueLength
,
465 IN PVOID EntryContext
468 extern LIST_ENTRY BasepAppCertDllsList
;
469 extern RTL_CRITICAL_SECTION gcsAppCert
;
474 IN ULONG UpdateIndex
,
475 IN OUT PHANDLE WaitHandle
,
482 BaseMarkFileForDelete(
483 IN HANDLE FileHandle
,
484 IN ULONG FileAttributes
490 IN HANDLE ProcessHandle
,
494 /* FIXME: This is EXPORTED! It should go in an external kernel32.h header */
497 BasepFreeAppCompatData(
498 IN PVOID AppCompatData
,
499 IN PVOID AppCompatSxsData