6 #define kernel32file 200
7 #define kernel32ver 201
10 #define kernel32session 204
17 #define DEBUG_CHANNEL(ch) static ULONG gDebugChannel = ch;
19 #define DEBUG_CHANNEL(ch)
22 #define TRACE(fmt, ...) TRACE__(gDebugChannel, fmt, ##__VA_ARGS__)
23 #define WARN(fmt, ...) WARN__(gDebugChannel, fmt, ##__VA_ARGS__)
24 #define FIXME(fmt, ...) WARN__(gDebugChannel, fmt,## __VA_ARGS__)
25 #define ERR(fmt, ...) ERR__(gDebugChannel, fmt, ##__VA_ARGS__)
28 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); \
29 DPRINT1("%s() is UNIMPLEMENTED!\n", __FUNCTION__)
37 #include "wine/unicode.h"
40 #define BINARY_UNKNOWN (0)
41 #define BINARY_PE_EXE32 (1)
42 #define BINARY_PE_DLL32 (2)
43 #define BINARY_PE_EXE64 (3)
44 #define BINARY_PE_DLL64 (4)
45 #define BINARY_WIN16 (5)
46 #define BINARY_OS216 (6)
47 #define BINARY_DOS (7)
48 #define BINARY_UNIX_EXE (8)
49 #define BINARY_UNIX_LIB (9)
51 #define MAGIC(c1,c2,c3,c4) ((c1) + ((c2)<<8) + ((c3)<<16) + ((c4)<<24))
53 #define MAGIC_HEAP MAGIC( 'H','E','A','P' )
55 #define ROUNDUP(a,b) ((((a)+(b)-1)/(b))*(b))
56 #define ROUNDDOWN(a,b) (((a)/(b))*(b))
58 #define ROUND_DOWN(n, align) \
59 (((ULONG)n) & ~((align) - 1l))
61 #define ROUND_UP(n, align) \
62 ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
65 #define FIELD_OFFSET(type,fld) ((LONG)&(((type *)0)->fld))
68 #define __TRY _SEH2_TRY
69 #define __EXCEPT_PAGE_FAULT _SEH2_EXCEPT(_SEH2_GetExceptionCode() == STATUS_ACCESS_VIOLATION)
70 #define __ENDTRY _SEH2_END
72 /* Undocumented CreateProcess flag */
73 #define STARTF_SHELLPRIVATE 0x400
75 typedef struct _CODEPAGE_ENTRY
81 CPTABLEINFO CodePageTable
;
82 } CODEPAGE_ENTRY
, *PCODEPAGE_ENTRY
;
84 typedef struct tagLOADPARMS32
93 typedef enum _BASE_SEARCH_PATH_TYPE
95 BaseSearchPathInvalid
,
98 BaseSearchPathDefault
,
100 BaseSearchPathCurrent
,
102 } BASE_SEARCH_PATH_TYPE
, *PBASE_SEARCH_PATH_TYPE
;
104 typedef enum _BASE_CURRENT_DIR_PLACEMENT
106 BaseCurrentDirPlacementInvalid
= -1,
107 BaseCurrentDirPlacementDefault
,
108 BaseCurrentDirPlacementSafe
,
109 BaseCurrentDirPlacementMax
110 } BASE_CURRENT_DIR_PLACEMENT
;
112 typedef struct _BASEP_ACTCTX_BLOCK
115 PVOID ActivationContext
;
116 PVOID CompletionContext
;
117 LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
;
118 } BASEP_ACTCTX_BLOCK
, *PBASEP_ACTCTX_BLOCK
;
120 #define BASEP_GET_MODULE_HANDLE_EX_PARAMETER_VALIDATION_ERROR 1
121 #define BASEP_GET_MODULE_HANDLE_EX_PARAMETER_VALIDATION_SUCCESS 2
122 #define BASEP_GET_MODULE_HANDLE_EX_PARAMETER_VALIDATION_CONTINUE 3
124 extern PBASE_STATIC_SERVER_DATA BaseStaticServerData
;
128 (*WaitForInputIdleType
)(
130 DWORD dwMilliseconds
);
132 extern WaitForInputIdleType UserWaitForInputIdleRoutine
;
134 /* GLOBAL VARIABLES **********************************************************/
136 extern BOOL bIsFileApiAnsi
;
137 extern HMODULE hCurrentModule
;
139 extern RTL_CRITICAL_SECTION BaseDllDirectoryLock
;
141 extern UNICODE_STRING BaseDllDirectory
;
142 extern UNICODE_STRING BaseDefaultPath
;
143 extern UNICODE_STRING BaseDefaultPathAppend
;
144 extern PLDR_DATA_TABLE_ENTRY BasepExeLdrEntry
;
146 extern LPTOP_LEVEL_EXCEPTION_FILTER GlobalTopLevelExceptionFilter
;
148 extern SYSTEM_BASIC_INFORMATION BaseCachedSysInfo
;
150 extern BOOLEAN BaseRunningInServerProcess
;
152 /* FUNCTION PROTOTYPES *******************************************************/
156 BaseDllInitializeMemoryManager(VOID
);
160 PWCHAR
FilenameA2W(LPCSTR NameA
, BOOL alloc
);
161 DWORD
FilenameW2A_N(LPSTR dest
, INT destlen
, LPCWSTR src
, INT srclen
);
163 DWORD
FilenameW2A_FitOrFail(LPSTR DestA
, INT destLen
, LPCWSTR SourceW
, INT sourceLen
);
164 DWORD
FilenameU2A_FitOrFail(LPSTR DestA
, INT destLen
, PUNICODE_STRING SourceU
);
166 #define HeapAlloc RtlAllocateHeap
167 #define HeapReAlloc RtlReAllocateHeap
168 #define HeapFree RtlFreeHeap
169 #define _lread(a, b, c) (long)(_hread(a, b, (long)c))
173 BaseFormatTimeOut(OUT PLARGE_INTEGER Timeout
,
174 IN DWORD dwMilliseconds
);
178 BaseFormatObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes
,
179 IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL
,
180 IN PUNICODE_STRING ObjectName
);
184 BaseCreateStack(HANDLE hProcess
,
187 PINITIAL_TEB InitialTeb
);
191 BaseInitializeContext(IN PCONTEXT Context
,
193 IN PVOID StartAddress
,
194 IN PVOID StackAddress
,
195 IN ULONG ContextType
);
199 BaseThreadStartupThunk(VOID
);
203 BaseProcessStartThunk(VOID
);
207 BasepFreeActivationContextActivationBlock(
208 IN PBASEP_ACTCTX_BLOCK ActivationBlock
213 BasepAllocateActivationContextActivationBlock(
215 IN PVOID CompletionRoutine
,
216 IN PVOID CompletionContext
,
217 OUT PBASEP_ACTCTX_BLOCK
*ActivationBlock
223 BaseThreadStartup(LPTHREAD_START_ROUTINE lpStartAddress
,
228 BaseFreeThreadStack(IN HANDLE hProcess
,
229 IN PINITIAL_TEB InitialTeb
);
234 BaseFiberStartup(VOID
);
236 typedef UINT (WINAPI
*PPROCESS_START_ROUTINE
)(VOID
);
240 BaseProcessStartup(PPROCESS_START_ROUTINE lpStartAddress
);
244 BasepIsRealtimeAllowed(IN BOOLEAN Keep
);
248 BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString
,
249 OUT LPWSTR
* UnicodeString
);
253 Basep8BitStringToStaticUnicodeString(IN LPCSTR AnsiString
);
257 Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString
,
260 typedef NTSTATUS (NTAPI
*PRTL_CONVERT_STRING
)(IN PUNICODE_STRING UnicodeString
,
261 IN PANSI_STRING AnsiString
,
262 IN BOOLEAN AllocateMemory
);
264 typedef ULONG (NTAPI
*PRTL_COUNT_STRING
)(IN PUNICODE_STRING UnicodeString
);
266 typedef NTSTATUS (NTAPI
*PRTL_CONVERT_STRINGA
)(IN PANSI_STRING AnsiString
,
267 IN PCUNICODE_STRING UnicodeString
,
268 IN BOOLEAN AllocateMemory
);
270 typedef ULONG (NTAPI
*PRTL_COUNT_STRINGA
)(IN PANSI_STRING UnicodeString
);
274 BasepUnicodeStringToAnsiSize(IN PUNICODE_STRING String
);
278 BasepAnsiStringToUnicodeSize(IN PANSI_STRING String
);
280 extern PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
;
281 extern PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString
;
282 extern PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize
;
283 extern PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize
;
285 extern UNICODE_STRING BaseWindowsDirectory
, BaseWindowsSystemDirectory
;
286 extern HANDLE BaseNamedObjectDirectory
;
290 BaseGetNamedObjectDirectory(VOID
);
294 BasepMapFile(IN LPCWSTR lpApplicationName
,
295 OUT PHANDLE hSection
,
296 IN PUNICODE_STRING ApplicationName
);
298 PCODEPAGE_ENTRY FASTCALL
299 IntGetCodePageEntry(UINT CodePage
);
303 BaseComputeProcessDllPath(
310 BaseComputeProcessExePath(
316 BaseIsDosApplication(
317 IN PUNICODE_STRING PathName
,
324 IN HANDLE FileHandle
,
325 IN PWCHAR ApplicationName
,
326 IN PWCHAR Environment
,
328 IN PVOID
* SdbQueryAppCompatData
,
329 IN PULONG SdbQueryAppCompatDataSize
,
331 IN PULONG SxsDataSize
,
332 OUT PULONG FusionFlags
337 IsShimInfrastructureDisabled(
343 InitCommandLines(VOID
);
347 BaseSetLastNTError(IN NTSTATUS Status
);
350 WCHAR WINAPI
RtlAnsiCharToUnicodeChar(LPSTR
*);
354 BasepLocateExeLdrEntry(IN PLDR_DATA_TABLE_ENTRY Entry
,
356 OUT BOOLEAN
*StopEnumeration
);
359 (NTAPI
*PBASEP_APPCERT_PLUGIN_FUNC
)(
360 IN LPWSTR ApplicationName
,
365 (NTAPI
*PBASEP_APPCERT_EMBEDDED_FUNC
)(
366 IN LPWSTR ApplicationName
370 (NTAPI
*PSAFER_REPLACE_PROCESS_THREAD_TOKENS
)(
376 typedef struct _BASEP_APPCERT_ENTRY
380 PBASEP_APPCERT_PLUGIN_FUNC fPluginCertFunc
;
381 } BASEP_APPCERT_ENTRY
, *PBASEP_APPCERT_ENTRY
;
383 typedef struct _BASE_MSG_SXS_HANDLES
388 LARGE_INTEGER ViewBase
;
389 } BASE_MSG_SXS_HANDLES
, *PBASE_MSG_SXS_HANDLES
;
391 typedef struct _SXS_WIN32_NT_PATH_PAIR
393 PUNICODE_STRING Win32
;
395 } SXS_WIN32_NT_PATH_PAIR
, *PSXS_WIN32_NT_PATH_PAIR
;
397 typedef struct _SXS_OVERRIDE_MANIFEST
402 } SXS_OVERRIDE_MANIFEST
, *PSXS_OVERRIDE_MANIFEST
;
406 BasepConfigureAppCertDlls(
410 IN ULONG ValueLength
,
412 IN PVOID EntryContext
415 extern LIST_ENTRY BasepAppCertDllsList
;
416 extern RTL_CRITICAL_SECTION gcsAppCert
;
420 BaseMarkFileForDelete(
421 IN HANDLE FileHandle
,
422 IN ULONG FileAttributes
426 /* FIXME: This is EXPORTED! It should go in an external kernel32.h header */
429 BasepFreeAppCompatData(
430 IN PVOID AppCompatData
,
431 IN PVOID AppCompatSxsData
436 BasepCheckWinSaferRestrictions(
438 IN LPWSTR ApplicationName
,
439 IN HANDLE FileHandle
,
441 OUT PHANDLE NewToken
,
442 OUT PHANDLE JobHandle