Reactos
at listview 486 lines 12 kB view raw
1#pragma once 2 3// 4// Kernel32 Filter IDs 5// 6#define kernel32file 200 7#define kernel32ver 201 8#define actctx 202 9#define resource 203 10#define kernel32session 204 11#define comm 205 12#define profile 206 13#define nls 207 14 15 16#if DBG 17#define DEBUG_CHANNEL(ch) static ULONG gDebugChannel = ch; 18#else 19#define DEBUG_CHANNEL(ch) 20#endif 21 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__) 26 27#define STUB \ 28 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); \ 29 DPRINT1("%s() is UNIMPLEMENTED!\n", __FUNCTION__) 30 31#define debugstr_a 32#define debugstr_w 33#define debugstr_wn 34#define wine_dbgstr_w 35#define debugstr_guid 36 37#include "wine/unicode.h" 38#include "baseheap.h" 39 40#define MAGIC(c1,c2,c3,c4) ((c1) + ((c2)<<8) + ((c3)<<16) + ((c4)<<24)) 41 42#define MAGIC_HEAP MAGIC( 'H','E','A','P' ) 43 44#define ROUNDUP(a,b) ((((a)+(b)-1)/(b))*(b)) 45#define ROUNDDOWN(a,b) (((a)/(b))*(b)) 46 47#define ROUND_DOWN(n, align) \ 48 (((ULONG)n) & ~((align) - 1l)) 49 50#define ROUND_UP(n, align) \ 51 ROUND_DOWN(((ULONG)n) + (align) - 1, (align)) 52 53#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0])) 54 55#define __TRY _SEH2_TRY 56#define __EXCEPT_PAGE_FAULT _SEH2_EXCEPT(_SEH2_GetExceptionCode() == STATUS_ACCESS_VIOLATION) 57#define __ENDTRY _SEH2_END 58 59typedef struct _CODEPAGE_ENTRY 60{ 61 LIST_ENTRY Entry; 62 UINT CodePage; 63 HANDLE SectionHandle; 64 PBYTE SectionMapping; 65 CPTABLEINFO CodePageTable; 66} CODEPAGE_ENTRY, *PCODEPAGE_ENTRY; 67 68typedef struct tagLOADPARMS32 69{ 70 LPSTR lpEnvAddress; 71 LPSTR lpCmdLine; 72 WORD wMagicValue; 73 WORD wCmdShow; 74 DWORD dwReserved; 75} LOADPARMS32; 76 77typedef enum _BASE_SEARCH_PATH_TYPE 78{ 79 BaseSearchPathInvalid, 80 BaseSearchPathDll, 81 BaseSearchPathApp, 82 BaseSearchPathDefault, 83 BaseSearchPathEnv, 84 BaseSearchPathCurrent, 85 BaseSearchPathMax 86} BASE_SEARCH_PATH_TYPE, *PBASE_SEARCH_PATH_TYPE; 87 88typedef enum _BASE_CURRENT_DIR_PLACEMENT 89{ 90 BaseCurrentDirPlacementInvalid = -1, 91 BaseCurrentDirPlacementDefault, 92 BaseCurrentDirPlacementSafe, 93 BaseCurrentDirPlacementMax 94} BASE_CURRENT_DIR_PLACEMENT; 95 96typedef struct _BASEP_ACTCTX_BLOCK 97{ 98 ULONG Flags; 99 PVOID ActivationContext; 100 PVOID CompletionContext; 101 LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine; 102} BASEP_ACTCTX_BLOCK, *PBASEP_ACTCTX_BLOCK; 103 104#define BASEP_GET_MODULE_HANDLE_EX_PARAMETER_VALIDATION_ERROR 1 105#define BASEP_GET_MODULE_HANDLE_EX_PARAMETER_VALIDATION_SUCCESS 2 106#define BASEP_GET_MODULE_HANDLE_EX_PARAMETER_VALIDATION_CONTINUE 3 107 108extern PBASE_STATIC_SERVER_DATA BaseStaticServerData; 109 110typedef 111DWORD 112(*WaitForInputIdleType)( 113 HANDLE hProcess, 114 DWORD dwMilliseconds); 115 116extern WaitForInputIdleType UserWaitForInputIdleRoutine; 117 118/* Flags for PrivCopyFileExW && BasepCopyFileExW */ 119#define BASEP_COPY_METADATA 0x10 120#define BASEP_COPY_SACL 0x20 121#define BASEP_COPY_OWNER_AND_GROUP 0x40 122#define BASEP_COPY_DIRECTORY 0x80 123#define BASEP_COPY_BACKUP_SEMANTICS 0x100 124#define BASEP_COPY_REPLACE 0x200 125#define BASEP_COPY_SKIP_DACL 0x400 126#define BASEP_COPY_PUBLIC_MASK 0xF 127#define BASEP_COPY_BASEP_MASK 0xFFFFFFF0 128 129/* Flags for PrivMoveFileIdentityW */ 130#define PRIV_DELETE_ON_SUCCESS 0x1 131#define PRIV_ALLOW_NON_TRACKABLE 0x2 132 133/* GLOBAL VARIABLES **********************************************************/ 134 135extern BOOL bIsFileApiAnsi; 136extern HMODULE hCurrentModule; 137 138extern RTL_CRITICAL_SECTION BaseDllDirectoryLock; 139 140extern UNICODE_STRING BaseDllDirectory; 141extern UNICODE_STRING BaseDefaultPath; 142extern UNICODE_STRING BaseDefaultPathAppend; 143extern PLDR_DATA_TABLE_ENTRY BasepExeLdrEntry; 144 145extern LPTOP_LEVEL_EXCEPTION_FILTER GlobalTopLevelExceptionFilter; 146 147extern SYSTEM_BASIC_INFORMATION BaseCachedSysInfo; 148 149extern BOOLEAN BaseRunningInServerProcess; 150 151/* FUNCTION PROTOTYPES *******************************************************/ 152 153VOID 154NTAPI 155BaseDllInitializeMemoryManager(VOID); 156 157PTEB GetTeb(VOID); 158 159PWCHAR FilenameA2W(LPCSTR NameA, BOOL alloc); 160DWORD FilenameW2A_N(LPSTR dest, INT destlen, LPCWSTR src, INT srclen); 161 162DWORD FilenameW2A_FitOrFail(LPSTR DestA, INT destLen, LPCWSTR SourceW, INT sourceLen); 163DWORD FilenameU2A_FitOrFail(LPSTR DestA, INT destLen, PUNICODE_STRING SourceU); 164 165#define HeapAlloc RtlAllocateHeap 166#define HeapReAlloc RtlReAllocateHeap 167#define HeapFree RtlFreeHeap 168#define _lread(a, b, c) (long)(_hread(a, b, (long)c)) 169 170PLARGE_INTEGER 171WINAPI 172BaseFormatTimeOut(OUT PLARGE_INTEGER Timeout, 173 IN DWORD dwMilliseconds); 174 175POBJECT_ATTRIBUTES 176WINAPI 177BaseFormatObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes, 178 IN PSECURITY_ATTRIBUTES SecurityAttributes OPTIONAL, 179 IN PUNICODE_STRING ObjectName); 180 181NTSTATUS 182WINAPI 183BaseCreateStack( 184 _In_ HANDLE hProcess, 185 _In_opt_ SIZE_T StackCommit, 186 _In_opt_ SIZE_T StackReserve, 187 _Out_ PINITIAL_TEB InitialTeb); 188 189VOID 190WINAPI 191BaseFreeThreadStack( 192 _In_ HANDLE hProcess, 193 _In_ PINITIAL_TEB InitialTeb); 194 195VOID 196WINAPI 197BaseInitializeContext(IN PCONTEXT Context, 198 IN PVOID Parameter, 199 IN PVOID StartAddress, 200 IN PVOID StackAddress, 201 IN ULONG ContextType); 202 203VOID 204WINAPI 205BaseThreadStartupThunk(VOID); 206 207VOID 208WINAPI 209BaseProcessStartThunk(VOID); 210 211VOID 212NTAPI 213BasepFreeActivationContextActivationBlock( 214 IN PBASEP_ACTCTX_BLOCK ActivationBlock 215); 216 217NTSTATUS 218NTAPI 219BasepAllocateActivationContextActivationBlock( 220 IN DWORD Flags, 221 IN PVOID CompletionRoutine, 222 IN PVOID CompletionContext, 223 OUT PBASEP_ACTCTX_BLOCK *ActivationBlock 224); 225 226NTSTATUS 227NTAPI 228BasepProbeForDllManifest( 229 IN PVOID DllHandle, 230 IN PCWSTR FullDllName, 231 OUT PVOID *ActCtx 232); 233 234DECLSPEC_NORETURN 235VOID 236WINAPI 237BaseThreadStartup( 238 _In_ LPTHREAD_START_ROUTINE lpStartAddress, 239 _In_ LPVOID lpParameter); 240 241DECLSPEC_NORETURN 242VOID 243WINAPI 244BaseFiberStartup(VOID); 245 246typedef DWORD (WINAPI *PPROCESS_START_ROUTINE)(VOID); 247 248DECLSPEC_NORETURN 249VOID 250WINAPI 251BaseProcessStartup( 252 _In_ PPROCESS_START_ROUTINE lpStartAddress); 253 254PVOID 255WINAPI 256BasepIsRealtimeAllowed(IN BOOLEAN Keep); 257 258VOID 259WINAPI 260BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString, 261 OUT LPWSTR* UnicodeString); 262 263PUNICODE_STRING 264WINAPI 265Basep8BitStringToStaticUnicodeString(IN LPCSTR AnsiString); 266 267BOOLEAN 268WINAPI 269Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString, 270 IN LPCSTR String); 271 272typedef NTSTATUS (NTAPI *PRTL_CONVERT_STRING)(IN PUNICODE_STRING UnicodeString, 273 IN PANSI_STRING AnsiString, 274 IN BOOLEAN AllocateMemory); 275 276typedef ULONG (NTAPI *PRTL_COUNT_STRING)(IN PUNICODE_STRING UnicodeString); 277 278typedef NTSTATUS (NTAPI *PRTL_CONVERT_STRINGA)(IN PANSI_STRING AnsiString, 279 IN PCUNICODE_STRING UnicodeString, 280 IN BOOLEAN AllocateMemory); 281 282typedef ULONG (NTAPI *PRTL_COUNT_STRINGA)(IN PANSI_STRING UnicodeString); 283 284ULONG 285NTAPI 286BasepUnicodeStringToAnsiSize(IN PUNICODE_STRING String); 287 288ULONG 289NTAPI 290BasepAnsiStringToUnicodeSize(IN PANSI_STRING String); 291 292extern PRTL_CONVERT_STRING Basep8BitStringToUnicodeString; 293extern PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString; 294extern PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize; 295extern PRTL_COUNT_STRINGA Basep8BitStringToUnicodeSize; 296 297extern UNICODE_STRING BaseWindowsDirectory, BaseWindowsSystemDirectory; 298extern HANDLE BaseNamedObjectDirectory; 299 300HANDLE 301WINAPI 302BaseGetNamedObjectDirectory(VOID); 303 304NTSTATUS 305WINAPI 306BasepMapFile(IN LPCWSTR lpApplicationName, 307 OUT PHANDLE hSection, 308 IN PUNICODE_STRING ApplicationName); 309 310PCODEPAGE_ENTRY FASTCALL 311IntGetCodePageEntry(UINT CodePage); 312 313LPWSTR 314WINAPI 315BaseComputeProcessDllPath( 316 IN LPWSTR FullPath, 317 IN PVOID Environment 318); 319 320LPWSTR 321WINAPI 322BaseComputeProcessExePath( 323 IN LPWSTR FullPath 324); 325 326ULONG 327WINAPI 328BaseIsDosApplication( 329 IN PUNICODE_STRING PathName, 330 IN NTSTATUS Status 331); 332 333NTSTATUS 334WINAPI 335BasepCheckBadapp( 336 IN HANDLE FileHandle, 337 IN PWCHAR ApplicationName, 338 IN PWCHAR Environment, 339 IN USHORT ExeType, 340 IN PVOID* SdbQueryAppCompatData, 341 IN PULONG SdbQueryAppCompatDataSize, 342 IN PVOID* SxsData, 343 IN PULONG SxsDataSize, 344 OUT PULONG FusionFlags 345); 346 347BOOLEAN 348WINAPI 349IsShimInfrastructureDisabled( 350 VOID 351); 352 353VOID 354WINAPI 355InitCommandLines(VOID); 356 357DWORD 358WINAPI 359BaseSetLastNTError(IN NTSTATUS Status); 360 361VOID 362NTAPI 363BasepLocateExeLdrEntry(IN PLDR_DATA_TABLE_ENTRY Entry, 364 IN PVOID Context, 365 OUT BOOLEAN *StopEnumeration); 366 367typedef NTSTATUS 368(NTAPI *PBASEP_APPCERT_PLUGIN_FUNC)( 369 IN LPWSTR ApplicationName, 370 IN ULONG CertFlag 371); 372 373typedef NTSTATUS 374(NTAPI *PBASEP_APPCERT_EMBEDDED_FUNC)( 375 IN LPWSTR ApplicationName 376); 377 378typedef NTSTATUS 379(NTAPI *PSAFER_REPLACE_PROCESS_THREAD_TOKENS)( 380 IN HANDLE Token, 381 IN HANDLE Process, 382 IN HANDLE Thread 383); 384 385typedef struct _BASEP_APPCERT_ENTRY 386{ 387 LIST_ENTRY Entry; 388 UNICODE_STRING Name; 389 PBASEP_APPCERT_PLUGIN_FUNC fPluginCertFunc; 390} BASEP_APPCERT_ENTRY, *PBASEP_APPCERT_ENTRY; 391 392typedef struct _BASE_MSG_SXS_HANDLES 393{ 394 HANDLE File; 395 HANDLE Process; 396 HANDLE Section; 397 LARGE_INTEGER ViewBase; 398} BASE_MSG_SXS_HANDLES, *PBASE_MSG_SXS_HANDLES; 399 400typedef struct _SXS_WIN32_NT_PATH_PAIR 401{ 402 PUNICODE_STRING Win32; 403 PUNICODE_STRING Nt; 404} SXS_WIN32_NT_PATH_PAIR, *PSXS_WIN32_NT_PATH_PAIR; 405 406typedef struct _SXS_OVERRIDE_MANIFEST 407{ 408 PCWCH Name; 409 PVOID Address; 410 ULONG Size; 411} SXS_OVERRIDE_MANIFEST, *PSXS_OVERRIDE_MANIFEST; 412 413NTSTATUS 414NTAPI 415BasepConfigureAppCertDlls( 416 IN PWSTR ValueName, 417 IN ULONG ValueType, 418 IN PVOID ValueData, 419 IN ULONG ValueLength, 420 IN PVOID Context, 421 IN PVOID EntryContext 422); 423 424extern LIST_ENTRY BasepAppCertDllsList; 425extern RTL_CRITICAL_SECTION gcsAppCert; 426 427VOID 428WINAPI 429BaseMarkFileForDelete( 430 IN HANDLE FileHandle, 431 IN ULONG FileAttributes 432); 433 434BOOL 435BasepCopyFileExW( 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 445); 446 447BOOL 448BasepGetVolumeNameForVolumeMountPoint( 449 IN LPCWSTR lpszMountPoint, 450 OUT LPWSTR lpszVolumeName, 451 IN DWORD cchBufferLength, 452 OUT LPBOOL IsAMountPoint 453); 454 455BOOL 456BasepGetVolumeNameFromReparsePoint( 457 IN LPCWSTR lpszMountPoint, 458 OUT LPWSTR lpszVolumeName, 459 IN DWORD cchBufferLength, 460 OUT LPBOOL IsAMountPoint 461); 462 463BOOL 464IsThisARootDirectory( 465 IN HANDLE VolumeHandle, 466 IN PUNICODE_STRING NtPathName 467); 468 469/* FIXME: This is EXPORTED! It should go in an external kernel32.h header */ 470VOID 471WINAPI 472BasepFreeAppCompatData( 473 IN PVOID AppCompatData, 474 IN PVOID AppCompatSxsData 475); 476 477NTSTATUS 478WINAPI 479BasepCheckWinSaferRestrictions( 480 IN HANDLE UserToken, 481 IN LPWSTR ApplicationName, 482 IN HANDLE FileHandle, 483 OUT PBOOLEAN InJob, 484 OUT PHANDLE NewToken, 485 OUT PHANDLE JobHandle 486);