2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS System Libraries
5 * PURPOSE: Run-Time Libary Internal Header
6 * PROGRAMMER: Alex Ionescu
9 /* INCLUDES ******************************************************************/
11 /* PAGED_CODE equivalent for user-mode RTL */
13 extern VOID FASTCALL
CHECK_PAGED_CODE_RTL(char *file
, int line
);
14 #define PAGED_CODE_RTL() CHECK_PAGED_CODE_RTL(__FILE__, __LINE__)
16 #define PAGED_CODE_RTL()
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)))
29 #define ROUND_DOWN(n, align) \
30 (((ULONG_PTR)(n)) & ~((align) - 1l))
32 #define ROUND_UP(n, align) \
33 ROUND_DOWN(((ULONG_PTR)(n)) + (align) - 1, (align))
35 #define RVA(m, b) ((PVOID)((ULONG_PTR)(b) + (ULONG_PTR)(m)))
37 extern PVOID MmHighestUserAddress
;
42 _Out_writes_bytes_all_(Length
) VOID UNALIGNED
*Destination
,
43 _In_reads_bytes_(Length
) CONST VOID UNALIGNED
*Source
,
48 RtlpGetStackLimits(PULONG_PTR LowLimit
,
49 PULONG_PTR HighLimit
);
51 PEXCEPTION_REGISTRATION_RECORD
53 RtlpGetExceptionList(VOID
);
57 RtlpSetHeapParameters(IN PRTL_HEAP_PARAMETERS Parameters
);
61 RtlpSetExceptionList(PEXCEPTION_REGISTRATION_RECORD NewExceptionList
);
65 RtlCallVectoredExceptionHandlers(
66 IN PEXCEPTION_RECORD ExceptionRecord
,
72 RtlCallVectoredContinueHandlers(
73 IN PEXCEPTION_RECORD ExceptionRecord
,
78 typedef struct _DISPATCHER_CONTEXT
80 PEXCEPTION_REGISTRATION_RECORD RegistrationPointer
;
81 } DISPATCHER_CONTEXT
, *PDISPATCHER_CONTEXT
;
84 /* These provide support for sharing code between User and Kernel RTL */
103 RtlpCaptureStackLimits(
105 IN ULONG_PTR
*StackBegin
,
106 IN ULONG_PTR
*StackEnd
111 RtlDeleteHeapLock(IN OUT PHEAP_LOCK Lock
);
115 RtlEnterHeapLock(IN OUT PHEAP_LOCK Lock
, IN BOOLEAN Exclusive
);
119 RtlTryEnterHeapLock(IN OUT PHEAP_LOCK Lock
, IN BOOLEAN Exclusive
);
123 RtlInitializeHeapLock(IN OUT PHEAP_LOCK
*Lock
);
127 RtlLeaveHeapLock(IN OUT PHEAP_LOCK Lock
);
131 RtlpCheckForActiveDebugger(VOID
);
135 RtlpHandleDpcStackException(IN PEXCEPTION_REGISTRATION_RECORD RegistrationFrame
,
136 IN ULONG_PTR RegistrationFrameEnd
,
137 IN OUT PULONG_PTR StackLow
,
138 IN OUT PULONG_PTR StackHigh
);
140 #define RtlpAllocateStringMemory RtlpAllocateMemory
141 #define RtlpFreeStringMemory RtlpFreeMemory
145 RtlGetTickCount(VOID
);
146 #define NtGetTickCount RtlGetTickCount
163 EXCEPTION_DISPOSITION
165 RtlpExecuteHandlerForException(PEXCEPTION_RECORD ExceptionRecord
,
166 PEXCEPTION_REGISTRATION_RECORD RegistrationFrame
,
168 PVOID DispatcherContext
,
169 PEXCEPTION_ROUTINE ExceptionHandler
);
172 EXCEPTION_DISPOSITION
174 RtlpExecuteHandlerForUnwind(PEXCEPTION_RECORD ExceptionRecord
,
175 PEXCEPTION_REGISTRATION_RECORD RegistrationFrame
,
177 PVOID DispatcherContext
,
178 PEXCEPTION_ROUTINE ExceptionHandler
);
182 RtlpCheckLogException(IN PEXCEPTION_RECORD ExceptionRecord
,
183 IN PCONTEXT ContextRecord
,
184 IN PVOID ContextData
,
189 RtlpCaptureContext(OUT PCONTEXT ContextRecord
);
192 // Debug Service calls
212 /* Tags for the String Allocators */
213 #define TAG_USTR 'RTSU'
214 #define TAG_ASTR 'RTSA'
215 #define TAG_OSTR 'RTSO'
219 extern HANDLE TimerThreadHandle
;
222 RtlpInitializeTimerThread(VOID
);
225 typedef struct _RTL_BITMAP64
227 ULONG64 SizeOfBitMap
;
229 } RTL_BITMAP64
, *PRTL_BITMAP64
;
231 typedef struct _RTL_BITMAP_RUN64
233 ULONG64 StartingIndex
;
234 ULONG64 NumberOfBits
;
235 } RTL_BITMAP_RUN64
, *PRTL_BITMAP_RUN64
;
240 RtlpUpcaseUnicodeChar(IN WCHAR Source
);
244 RtlpDowncaseUnicodeChar(IN WCHAR Source
);
249 LdrpInitializeProcessCompat(PVOID pProcessActctx
, PVOID
* pOldShimData
);