Reactos
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 */