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 /* Flags for PrivCopyFileExW && BasepCopyFileExW */
135 #define BASEP_COPY_METADATA 0x10
136 #define BASEP_COPY_SACL 0x20
137 #define BASEP_COPY_OWNER_AND_GROUP 0x40
138 #define BASEP_COPY_DIRECTORY 0x80
139 #define BASEP_COPY_BACKUP_SEMANTICS 0x100
140 #define BASEP_COPY_REPLACE 0x200
141 #define BASEP_COPY_SKIP_DACL 0x400
142 #define BASEP_COPY_PUBLIC_MASK 0xF
143 #define BASEP_COPY_BASEP_MASK 0xFFFFFFF0
145 /* GLOBAL VARIABLES **********************************************************/
147 extern BOOL bIsFileApiAnsi
;
148 extern HMODULE hCurrentModule
;
150 extern RTL_CRITICAL_SECTION BaseDllDirectoryLock
;
152 extern UNICODE_STRING BaseDllDirectory
;
153 extern UNICODE_STRING BaseDefaultPath
;
154 extern UNICODE_STRING BaseDefaultPathAppend
;
155 extern PLDR_DATA_TABLE_ENTRY BasepExeLdrEntry
;
157 extern LPTOP_LEVEL_EXCEPTION_FILTER GlobalTopLevelExceptionFilter
;
159 extern SYSTEM_BASIC_INFORMATION BaseCachedSysInfo
;
161 extern BOOLEAN BaseRunningInServerProcess
;
163 /* FUNCTION PROTOTYPES *******************************************************/
167 BaseDllInitializeMemoryManager(VOID
);
171 PWCHAR
FilenameA2W(LPCSTR NameA
, BOOL alloc
);
172 DWORD
FilenameW2A_N(LPSTR dest
, INT destlen
, LPCWSTR src
, INT srclen
);
174 DWORD
FilenameW2A_FitOrFail(LPSTR DestA
, INT destLen
, LPCWSTR SourceW
, INT sourceLen
);
175 DWORD
FilenameU2A_FitOrFail(LPSTR DestA
, INT destLen
, PUNICODE_STRING SourceU
);
177 #define HeapAlloc RtlAllocateHeap
178 #define HeapReAlloc RtlReAllocateHeap
179 #define HeapFree RtlFreeHeap
180 #define _lread(a, b, c) (long)(_hread(a, b, (long)c))
184 BaseFormatTimeOut(OUT PLARGE_INTEGER Timeout
,
185 IN DWORD dwMilliseconds
);
189 BaseFormatObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes
,
190 IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL
,
191 IN PUNICODE_STRING ObjectName
);
195 BaseCreateStack(HANDLE hProcess
,
198 PINITIAL_TEB InitialTeb
);
202 BaseInitializeContext(IN PCONTEXT Context
,
204 IN PVOID StartAddress
,
205 IN PVOID StackAddress
,
206 IN ULONG ContextType
);
210 BaseThreadStartupThunk(VOID
);
214 BaseProcessStartThunk(VOID
);
218 BasepFreeActivationContextActivationBlock(
219 IN PBASEP_ACTCTX_BLOCK ActivationBlock
224 BasepAllocateActivationContextActivationBlock(
226 IN PVOID CompletionRoutine
,
227 IN PVOID CompletionContext
,
228 OUT PBASEP_ACTCTX_BLOCK
*ActivationBlock
234 BaseThreadStartup(LPTHREAD_START_ROUTINE lpStartAddress
,
239 BaseFreeThreadStack(IN HANDLE hProcess
,
240 IN PINITIAL_TEB InitialTeb
);
245 BaseFiberStartup(VOID
);
247 typedef UINT (WINAPI
*PPROCESS_START_ROUTINE
)(VOID
);
251 BaseProcessStartup(PPROCESS_START_ROUTINE lpStartAddress
);
255 BasepIsRealtimeAllowed(IN BOOLEAN Keep
);
259 BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString
,
260 OUT LPWSTR
* UnicodeString
);
264 Basep8BitStringToStaticUnicodeString(IN LPCSTR AnsiString
);
268 Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString
,
271 typedef NTSTATUS (NTAPI
*PRTL_CONVERT_STRING
)(IN PUNICODE_STRING UnicodeString
,
272 IN PANSI_STRING AnsiString
,
273 IN BOOLEAN AllocateMemory
);
275 typedef ULONG (NTAPI
*PRTL_COUNT_STRING
)(IN PUNICODE_STRING UnicodeString
);
277 typedef NTSTATUS (NTAPI
*PRTL_CONVERT_STRINGA
)(IN PANSI_STRING AnsiString
,
278 IN PCUNICODE_STRING UnicodeString
,
279 IN BOOLEAN AllocateMemory
);
281 typedef ULONG (NTAPI
*PRTL_COUNT_STRINGA
)(IN PANSI_STRING UnicodeString
);
285 BasepUnicodeStringToAnsiSize(IN PUNICODE_STRING String
);
289 BasepAnsiStringToUnicodeSize(IN PANSI_STRING String
);
291 extern PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
;
292 extern PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString
;
293 extern PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize
;
294 extern PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize
;
296 extern UNICODE_STRING BaseWindowsDirectory
, BaseWindowsSystemDirectory
;
297 extern HANDLE BaseNamedObjectDirectory
;
301 BaseGetNamedObjectDirectory(VOID
);
305 BasepMapFile(IN LPCWSTR lpApplicationName
,
306 OUT PHANDLE hSection
,
307 IN PUNICODE_STRING ApplicationName
);
309 PCODEPAGE_ENTRY FASTCALL
310 IntGetCodePageEntry(UINT CodePage
);
314 BaseComputeProcessDllPath(
321 BaseComputeProcessExePath(
327 BaseIsDosApplication(
328 IN PUNICODE_STRING PathName
,
335 IN HANDLE FileHandle
,
336 IN PWCHAR ApplicationName
,
337 IN PWCHAR Environment
,
339 IN PVOID
* SdbQueryAppCompatData
,
340 IN PULONG SdbQueryAppCompatDataSize
,
342 IN PULONG SxsDataSize
,
343 OUT PULONG FusionFlags
348 IsShimInfrastructureDisabled(
354 InitCommandLines(VOID
);
358 BaseSetLastNTError(IN NTSTATUS Status
);
361 WCHAR WINAPI
RtlAnsiCharToUnicodeChar(LPSTR
*);
365 BasepLocateExeLdrEntry(IN PLDR_DATA_TABLE_ENTRY Entry
,
367 OUT BOOLEAN
*StopEnumeration
);
370 (NTAPI
*PBASEP_APPCERT_PLUGIN_FUNC
)(
371 IN LPWSTR ApplicationName
,
376 (NTAPI
*PBASEP_APPCERT_EMBEDDED_FUNC
)(
377 IN LPWSTR ApplicationName
381 (NTAPI
*PSAFER_REPLACE_PROCESS_THREAD_TOKENS
)(
387 typedef struct _BASEP_APPCERT_ENTRY
391 PBASEP_APPCERT_PLUGIN_FUNC fPluginCertFunc
;
392 } BASEP_APPCERT_ENTRY
, *PBASEP_APPCERT_ENTRY
;
394 typedef struct _BASE_MSG_SXS_HANDLES
399 LARGE_INTEGER ViewBase
;
400 } BASE_MSG_SXS_HANDLES
, *PBASE_MSG_SXS_HANDLES
;
402 typedef struct _SXS_WIN32_NT_PATH_PAIR
404 PUNICODE_STRING Win32
;
406 } SXS_WIN32_NT_PATH_PAIR
, *PSXS_WIN32_NT_PATH_PAIR
;
408 typedef struct _SXS_OVERRIDE_MANIFEST
413 } SXS_OVERRIDE_MANIFEST
, *PSXS_OVERRIDE_MANIFEST
;
417 BasepConfigureAppCertDlls(
421 IN ULONG ValueLength
,
423 IN PVOID EntryContext
426 extern LIST_ENTRY BasepAppCertDllsList
;
427 extern RTL_CRITICAL_SECTION gcsAppCert
;
431 BaseMarkFileForDelete(
432 IN HANDLE FileHandle
,
433 IN ULONG FileAttributes
438 IN LPCWSTR lpExistingFileName
,
439 IN LPCWSTR lpNewFileName
,
440 IN LPPROGRESS_ROUTINE lpProgressRoutine OPTIONAL
,
441 IN LPVOID lpData OPTIONAL
,
442 IN LPBOOL pbCancel OPTIONAL
,
443 IN DWORD dwCopyFlags
,
444 IN DWORD dwBasepFlags
,
445 OUT LPHANDLE lpExistingHandle
,
446 OUT LPHANDLE lpNewHandle
449 /* FIXME: This is EXPORTED! It should go in an external kernel32.h header */
452 BasepFreeAppCompatData(
453 IN PVOID AppCompatData
,
454 IN PVOID AppCompatSxsData
459 BasepCheckWinSaferRestrictions(
461 IN LPWSTR ApplicationName
,
462 IN HANDLE FileHandle
,
464 OUT PHANDLE NewToken
,
465 OUT PHANDLE JobHandle