Reactos
at master 287 lines 5.9 kB view raw
1/* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS System Libraries 4 * FILE: lib/rtl/rtlp.h 5 * PURPOSE: Run-Time Libary Internal Header 6 * PROGRAMMER: Alex Ionescu 7 */ 8 9/* INCLUDES ******************************************************************/ 10 11/* PAGED_CODE equivalent for user-mode RTL */ 12#if DBG 13extern VOID FASTCALL CHECK_PAGED_CODE_RTL(char *file, int line); 14#define PAGED_CODE_RTL() CHECK_PAGED_CODE_RTL(__FILE__, __LINE__) 15#else 16#define PAGED_CODE_RTL() 17#endif 18 19#ifdef _PPC_ 20#define SWAPD(x) ((((x)&0xff)<<24)|(((x)&0xff00)<<8)|(((x)>>8)&0xff00)|(((x)>>24)&0xff)) 21#define SWAPW(x) ((((x)&0xff)<<8)|(((x)>>8)&0xff)) 22#define SWAPQ(x) ((SWAPD((x)&0xffffffff) << 32) | (SWAPD((x)>>32))) 23#else 24#define SWAPD(x) (x) 25#define SWAPW(x) (x) 26#define SWAPQ(x) (x) 27#endif 28 29#define ROUND_DOWN(n, align) \ 30 (((ULONG_PTR)(n)) & ~((align) - 1l)) 31 32#define ROUND_UP(n, align) \ 33 ROUND_DOWN(((ULONG_PTR)(n)) + (align) - 1, (align)) 34 35#define RVA(m, b) ((PVOID)((ULONG_PTR)(b) + (ULONG_PTR)(m))) 36 37extern PVOID MmHighestUserAddress; 38 39NTSTATUS 40NTAPI 41RtlpSafeCopyMemory( 42 _Out_writes_bytes_all_(Length) VOID UNALIGNED *Destination, 43 _In_reads_bytes_(Length) CONST VOID UNALIGNED *Source, 44 _In_ SIZE_T Length); 45 46#ifndef _BLDR_ 47 48VOID 49NTAPI 50RtlpGetStackLimits(PULONG_PTR LowLimit, 51 PULONG_PTR HighLimit); 52 53#ifdef _M_IX86 54 55PEXCEPTION_REGISTRATION_RECORD 56NTAPI 57RtlpGetExceptionList(VOID); 58 59VOID 60NTAPI 61RtlpSetExceptionList(PEXCEPTION_REGISTRATION_RECORD NewExceptionList); 62 63#endif /* _M_IX86 */ 64 65/* For heap.c */ 66VOID 67NTAPI 68RtlpSetHeapParameters(IN PRTL_HEAP_PARAMETERS Parameters); 69 70/* For vectoreh.c */ 71BOOLEAN 72NTAPI 73RtlCallVectoredExceptionHandlers( 74 IN PEXCEPTION_RECORD ExceptionRecord, 75 IN PCONTEXT Context 76); 77 78VOID 79NTAPI 80RtlCallVectoredContinueHandlers( 81 IN PEXCEPTION_RECORD ExceptionRecord, 82 IN PCONTEXT Context 83); 84 85#ifdef _M_IX86 86typedef struct _DISPATCHER_CONTEXT 87{ 88 PEXCEPTION_REGISTRATION_RECORD RegistrationPointer; 89} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT; 90#endif 91 92#endif /* !_BLDR_ */ 93 94/* These provide support for sharing code between User and Kernel RTL */ 95PVOID 96NTAPI 97RtlpAllocateMemory( 98 SIZE_T Bytes, 99 ULONG Tag); 100 101VOID 102NTAPI 103RtlpFreeMemory( 104 PVOID Mem, 105 ULONG Tag); 106 107#ifndef _BLDR_ 108 109KPROCESSOR_MODE 110NTAPI 111RtlpGetMode(VOID); 112 113BOOLEAN 114NTAPI 115RtlpCaptureStackLimits( 116 IN ULONG_PTR Ebp, 117 IN ULONG_PTR *StackBegin, 118 IN ULONG_PTR *StackEnd 119); 120 121/* For heap.c and heappage.c */ 122NTSTATUS 123NTAPI 124RtlDeleteHeapLock(IN OUT PHEAP_LOCK Lock); 125 126NTSTATUS 127NTAPI 128RtlEnterHeapLock(IN OUT PHEAP_LOCK Lock, IN BOOLEAN Exclusive); 129 130BOOLEAN 131NTAPI 132RtlTryEnterHeapLock(IN OUT PHEAP_LOCK Lock, IN BOOLEAN Exclusive); 133 134NTSTATUS 135NTAPI 136RtlInitializeHeapLock(IN OUT PHEAP_LOCK *Lock); 137 138NTSTATUS 139NTAPI 140RtlLeaveHeapLock(IN OUT PHEAP_LOCK Lock); 141 142BOOLEAN 143NTAPI 144RtlpCheckForActiveDebugger(VOID); 145 146BOOLEAN 147NTAPI 148RtlpHandleDpcStackException(IN PEXCEPTION_REGISTRATION_RECORD RegistrationFrame, 149 IN ULONG_PTR RegistrationFrameEnd, 150 IN OUT PULONG_PTR StackLow, 151 IN OUT PULONG_PTR StackHigh); 152 153#endif /* !_BLDR_ */ 154 155#define RtlpAllocateStringMemory RtlpAllocateMemory 156#define RtlpFreeStringMemory RtlpFreeMemory 157 158#ifndef _BLDR_ 159 160ULONG 161NTAPI 162RtlGetTickCount(VOID); 163#define NtGetTickCount RtlGetTickCount 164 165BOOLEAN 166NTAPI 167RtlpSetInDbgPrint( 168 VOID 169); 170 171VOID 172NTAPI 173RtlpClearInDbgPrint( 174 VOID 175); 176 177/* i386/except.S */ 178 179#ifdef _M_IX86 180EXCEPTION_DISPOSITION 181NTAPI 182RtlpExecuteHandlerForException(PEXCEPTION_RECORD ExceptionRecord, 183 PEXCEPTION_REGISTRATION_RECORD RegistrationFrame, 184 PCONTEXT Context, 185 PVOID DispatcherContext, 186 PEXCEPTION_ROUTINE ExceptionHandler); 187 188EXCEPTION_DISPOSITION 189NTAPI 190RtlpExecuteHandlerForUnwind(PEXCEPTION_RECORD ExceptionRecord, 191 PEXCEPTION_REGISTRATION_RECORD RegistrationFrame, 192 PCONTEXT Context, 193 PVOID DispatcherContext, 194 PEXCEPTION_ROUTINE ExceptionHandler); 195#else 196EXCEPTION_DISPOSITION 197NTAPI 198RtlpExecuteHandlerForUnwind( 199 _Inout_ struct _EXCEPTION_RECORD *ExceptionRecord, 200 _In_ PVOID EstablisherFrame, 201 _Inout_ struct _CONTEXT *ContextRecord, 202 _In_ PVOID DispatcherContext); 203 204#endif 205 206VOID 207NTAPI 208RtlpCheckLogException(IN PEXCEPTION_RECORD ExceptionRecord, 209 IN PCONTEXT ContextRecord, 210 IN PVOID ContextData, 211 IN ULONG Size); 212 213VOID 214NTAPI 215RtlpCaptureContext(OUT PCONTEXT ContextRecord); 216 217// 218// Debug Service calls 219// 220ULONG 221NTAPI 222DebugService( 223 IN ULONG Service, 224 IN PVOID Argument1, 225 IN PVOID Argument2, 226 IN PVOID Argument3, 227 IN PVOID Argument4 228); 229 230VOID 231NTAPI 232DebugService2( 233 IN PVOID Argument1, 234 IN PVOID Argument2, 235 IN ULONG Service 236); 237 238/* Timer Queue */ 239extern HANDLE TimerThreadHandle; 240 241NTSTATUS 242RtlpInitializeTimerThread(VOID); 243 244#endif /* !_BLDR_ */ 245 246/* bitmap64.c */ 247typedef struct _RTL_BITMAP64 248{ 249 ULONG64 SizeOfBitMap; 250 PULONG64 Buffer; 251} RTL_BITMAP64, *PRTL_BITMAP64; 252 253typedef struct _RTL_BITMAP_RUN64 254{ 255 ULONG64 StartingIndex; 256 ULONG64 NumberOfBits; 257} RTL_BITMAP_RUN64, *PRTL_BITMAP_RUN64; 258 259/* Tags for the String Allocators */ 260#define TAG_USTR 'RTSU' 261#define TAG_ASTR 'RTSA' 262#define TAG_OSTR 'RTSO' 263 264/* nls.c */ 265WCHAR 266NTAPI 267RtlpUpcaseUnicodeChar(IN WCHAR Source); 268 269WCHAR 270NTAPI 271RtlpDowncaseUnicodeChar(IN WCHAR Source); 272 273#ifndef _BLDR_ 274 275/* ReactOS only */ 276VOID 277NTAPI 278LdrpInitializeProcessCompat(PVOID pProcessActctx, PVOID* pOldShimData); 279 280PVOID 281NTAPI 282RtlpDebugBufferCommit(_Inout_ PRTL_DEBUG_INFORMATION Buffer, 283 _In_ SIZE_T Size); 284 285#endif /* !_BLDR_ */ 286 287/* EOF */