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 MAGIC(c1,c2,c3,c4) ((c1) + ((c2)<<8) + ((c3)<<16) + ((c4)<<24))
42 #define MAGIC_HEAP MAGIC( 'H','E','A','P' )
44 #define ROUNDUP(a,b) ((((a)+(b)-1)/(b))*(b))
45 #define ROUNDDOWN(a,b) (((a)/(b))*(b))
47 #define ROUND_DOWN(n, align) \
48 (((ULONG)n) & ~((align) - 1l))
50 #define ROUND_UP(n, align) \
51 ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
53 #define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
55 #define __TRY _SEH2_TRY
56 #define __EXCEPT_PAGE_FAULT _SEH2_EXCEPT(_SEH2_GetExceptionCode() == STATUS_ACCESS_VIOLATION)
57 #define __ENDTRY _SEH2_END
59 /* Undocumented CreateProcess flag */
60 #define STARTF_SHELLPRIVATE 0x400
62 typedef struct _CODEPAGE_ENTRY
68 CPTABLEINFO CodePageTable
;
69 } CODEPAGE_ENTRY
, *PCODEPAGE_ENTRY
;
71 typedef struct tagLOADPARMS32
80 typedef enum _BASE_SEARCH_PATH_TYPE
82 BaseSearchPathInvalid
,
85 BaseSearchPathDefault
,
87 BaseSearchPathCurrent
,
89 } BASE_SEARCH_PATH_TYPE
, *PBASE_SEARCH_PATH_TYPE
;
91 typedef enum _BASE_CURRENT_DIR_PLACEMENT
93 BaseCurrentDirPlacementInvalid
= -1,
94 BaseCurrentDirPlacementDefault
,
95 BaseCurrentDirPlacementSafe
,
96 BaseCurrentDirPlacementMax
97 } BASE_CURRENT_DIR_PLACEMENT
;
99 typedef struct _BASEP_ACTCTX_BLOCK
102 PVOID ActivationContext
;
103 PVOID CompletionContext
;
104 LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
;
105 } BASEP_ACTCTX_BLOCK
, *PBASEP_ACTCTX_BLOCK
;
107 #define BASEP_GET_MODULE_HANDLE_EX_PARAMETER_VALIDATION_ERROR 1
108 #define BASEP_GET_MODULE_HANDLE_EX_PARAMETER_VALIDATION_SUCCESS 2
109 #define BASEP_GET_MODULE_HANDLE_EX_PARAMETER_VALIDATION_CONTINUE 3
111 extern PBASE_STATIC_SERVER_DATA BaseStaticServerData
;
115 (*WaitForInputIdleType
)(
117 DWORD dwMilliseconds
);
119 extern WaitForInputIdleType UserWaitForInputIdleRoutine
;
121 /* Flags for PrivCopyFileExW && BasepCopyFileExW */
122 #define BASEP_COPY_METADATA 0x10
123 #define BASEP_COPY_SACL 0x20
124 #define BASEP_COPY_OWNER_AND_GROUP 0x40
125 #define BASEP_COPY_DIRECTORY 0x80
126 #define BASEP_COPY_BACKUP_SEMANTICS 0x100
127 #define BASEP_COPY_REPLACE 0x200
128 #define BASEP_COPY_SKIP_DACL 0x400
129 #define BASEP_COPY_PUBLIC_MASK 0xF
130 #define BASEP_COPY_BASEP_MASK 0xFFFFFFF0
132 /* Flags for PrivMoveFileIdentityW */
133 #define PRIV_DELETE_ON_SUCCESS 0x1
134 #define PRIV_ALLOW_NON_TRACKABLE 0x2
136 /* GLOBAL VARIABLES **********************************************************/
138 extern BOOL bIsFileApiAnsi
;
139 extern HMODULE hCurrentModule
;
141 extern RTL_CRITICAL_SECTION BaseDllDirectoryLock
;
143 extern UNICODE_STRING BaseDllDirectory
;
144 extern UNICODE_STRING BaseDefaultPath
;
145 extern UNICODE_STRING BaseDefaultPathAppend
;
146 extern PLDR_DATA_TABLE_ENTRY BasepExeLdrEntry
;
148 extern LPTOP_LEVEL_EXCEPTION_FILTER GlobalTopLevelExceptionFilter
;
150 extern SYSTEM_BASIC_INFORMATION BaseCachedSysInfo
;
152 extern BOOLEAN BaseRunningInServerProcess
;
154 /* FUNCTION PROTOTYPES *******************************************************/
158 BaseDllInitializeMemoryManager(VOID
);
162 PWCHAR
FilenameA2W(LPCSTR NameA
, BOOL alloc
);
163 DWORD
FilenameW2A_N(LPSTR dest
, INT destlen
, LPCWSTR src
, INT srclen
);
165 DWORD
FilenameW2A_FitOrFail(LPSTR DestA
, INT destLen
, LPCWSTR SourceW
, INT sourceLen
);
166 DWORD
FilenameU2A_FitOrFail(LPSTR DestA
, INT destLen
, PUNICODE_STRING SourceU
);
168 #define HeapAlloc RtlAllocateHeap
169 #define HeapReAlloc RtlReAllocateHeap
170 #define HeapFree RtlFreeHeap
171 #define _lread(a, b, c) (long)(_hread(a, b, (long)c))
175 BaseFormatTimeOut(OUT PLARGE_INTEGER Timeout
,
176 IN DWORD dwMilliseconds
);
180 BaseFormatObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes
,
181 IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL
,
182 IN PUNICODE_STRING ObjectName
);
187 _In_ HANDLE hProcess
,
188 _In_opt_ SIZE_T StackCommit
,
189 _In_opt_ SIZE_T StackReserve
,
190 _Out_ PINITIAL_TEB InitialTeb
);
195 _In_ HANDLE hProcess
,
196 _In_ PINITIAL_TEB InitialTeb
);
200 BaseInitializeContext(IN PCONTEXT Context
,
202 IN PVOID StartAddress
,
203 IN PVOID StackAddress
,
204 IN ULONG ContextType
);
208 BaseThreadStartupThunk(VOID
);
212 BaseProcessStartThunk(VOID
);
216 BasepFreeActivationContextActivationBlock(
217 IN PBASEP_ACTCTX_BLOCK ActivationBlock
222 BasepAllocateActivationContextActivationBlock(
224 IN PVOID CompletionRoutine
,
225 IN PVOID CompletionContext
,
226 OUT PBASEP_ACTCTX_BLOCK
*ActivationBlock
231 BasepProbeForDllManifest(
233 IN PCWSTR FullDllName
,
240 BaseThreadStartup(LPTHREAD_START_ROUTINE lpStartAddress
,
246 BaseFiberStartup(VOID
);
248 typedef UINT (WINAPI
*PPROCESS_START_ROUTINE
)(VOID
);
252 BaseProcessStartup(PPROCESS_START_ROUTINE lpStartAddress
);
256 BasepIsRealtimeAllowed(IN BOOLEAN Keep
);
260 BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString
,
261 OUT LPWSTR
* UnicodeString
);
265 Basep8BitStringToStaticUnicodeString(IN LPCSTR AnsiString
);
269 Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString
,
272 typedef NTSTATUS (NTAPI
*PRTL_CONVERT_STRING
)(IN PUNICODE_STRING UnicodeString
,
273 IN PANSI_STRING AnsiString
,
274 IN BOOLEAN AllocateMemory
);
276 typedef ULONG (NTAPI
*PRTL_COUNT_STRING
)(IN PUNICODE_STRING UnicodeString
);
278 typedef NTSTATUS (NTAPI
*PRTL_CONVERT_STRINGA
)(IN PANSI_STRING AnsiString
,
279 IN PCUNICODE_STRING UnicodeString
,
280 IN BOOLEAN AllocateMemory
);
282 typedef ULONG (NTAPI
*PRTL_COUNT_STRINGA
)(IN PANSI_STRING UnicodeString
);
286 BasepUnicodeStringToAnsiSize(IN PUNICODE_STRING String
);
290 BasepAnsiStringToUnicodeSize(IN PANSI_STRING String
);
292 extern PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
;
293 extern PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString
;
294 extern PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize
;
295 extern PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize
;
297 extern UNICODE_STRING BaseWindowsDirectory
, BaseWindowsSystemDirectory
;
298 extern HANDLE BaseNamedObjectDirectory
;
302 BaseGetNamedObjectDirectory(VOID
);
306 BasepMapFile(IN LPCWSTR lpApplicationName
,
307 OUT PHANDLE hSection
,
308 IN PUNICODE_STRING ApplicationName
);
310 PCODEPAGE_ENTRY FASTCALL
311 IntGetCodePageEntry(UINT CodePage
);
315 BaseComputeProcessDllPath(
322 BaseComputeProcessExePath(
328 BaseIsDosApplication(
329 IN PUNICODE_STRING PathName
,
336 IN HANDLE FileHandle
,
337 IN PWCHAR ApplicationName
,
338 IN PWCHAR Environment
,
340 IN PVOID
* SdbQueryAppCompatData
,
341 IN PULONG SdbQueryAppCompatDataSize
,
343 IN PULONG SxsDataSize
,
344 OUT PULONG FusionFlags
349 IsShimInfrastructureDisabled(
355 InitCommandLines(VOID
);
359 BaseSetLastNTError(IN NTSTATUS Status
);
363 BasepLocateExeLdrEntry(IN PLDR_DATA_TABLE_ENTRY Entry
,
365 OUT BOOLEAN
*StopEnumeration
);
368 (NTAPI
*PBASEP_APPCERT_PLUGIN_FUNC
)(
369 IN LPWSTR ApplicationName
,
374 (NTAPI
*PBASEP_APPCERT_EMBEDDED_FUNC
)(
375 IN LPWSTR ApplicationName
379 (NTAPI
*PSAFER_REPLACE_PROCESS_THREAD_TOKENS
)(
385 typedef struct _BASEP_APPCERT_ENTRY
389 PBASEP_APPCERT_PLUGIN_FUNC fPluginCertFunc
;
390 } BASEP_APPCERT_ENTRY
, *PBASEP_APPCERT_ENTRY
;
392 typedef struct _BASE_MSG_SXS_HANDLES
397 LARGE_INTEGER ViewBase
;
398 } BASE_MSG_SXS_HANDLES
, *PBASE_MSG_SXS_HANDLES
;
400 typedef struct _SXS_WIN32_NT_PATH_PAIR
402 PUNICODE_STRING Win32
;
404 } SXS_WIN32_NT_PATH_PAIR
, *PSXS_WIN32_NT_PATH_PAIR
;
406 typedef struct _SXS_OVERRIDE_MANIFEST
411 } SXS_OVERRIDE_MANIFEST
, *PSXS_OVERRIDE_MANIFEST
;
415 BasepConfigureAppCertDlls(
419 IN ULONG ValueLength
,
421 IN PVOID EntryContext
424 extern LIST_ENTRY BasepAppCertDllsList
;
425 extern RTL_CRITICAL_SECTION gcsAppCert
;
429 BaseMarkFileForDelete(
430 IN HANDLE FileHandle
,
431 IN ULONG FileAttributes
436 IN LPCWSTR lpExistingFileName
,
437 IN LPCWSTR lpNewFileName
,
438 IN LPPROGRESS_ROUTINE lpProgressRoutine OPTIONAL
,
439 IN LPVOID lpData OPTIONAL
,
440 IN LPBOOL pbCancel OPTIONAL
,
441 IN DWORD dwCopyFlags
,
442 IN DWORD dwBasepFlags
,
443 OUT LPHANDLE lpExistingHandle
,
444 OUT LPHANDLE lpNewHandle
448 BasepGetVolumeNameForVolumeMountPoint(
449 IN LPCWSTR lpszMountPoint
,
450 OUT LPWSTR lpszVolumeName
,
451 IN DWORD cchBufferLength
,
452 OUT LPBOOL IsAMountPoint
456 BasepGetVolumeNameFromReparsePoint(
457 IN LPCWSTR lpszMountPoint
,
458 OUT LPWSTR lpszVolumeName
,
459 IN DWORD cchBufferLength
,
460 OUT LPBOOL IsAMountPoint
464 IsThisARootDirectory(
465 IN HANDLE VolumeHandle
,
466 IN PUNICODE_STRING NtPathName
469 /* FIXME: This is EXPORTED! It should go in an external kernel32.h header */
472 BasepFreeAppCompatData(
473 IN PVOID AppCompatData
,
474 IN PVOID AppCompatSxsData
479 BasepCheckWinSaferRestrictions(
481 IN LPWSTR ApplicationName
,
482 IN HANDLE FileHandle
,
484 OUT PHANDLE NewToken
,
485 OUT PHANDLE JobHandle