[RTL/NTDLL]
[reactos.git] / reactos / lib / rtl / rtlp.h
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
13 extern 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)(n)) & ~((align) - 1l))
31
32 #define ROUND_UP(n, align) \
33 ROUND_DOWN(((ULONG)(n)) + (align) - 1, (align))
34
35 #define RVA(m, b) ((PVOID)((ULONG_PTR)(b) + (ULONG_PTR)(m)))
36
37 NTSTATUS
38 NTAPI
39 RtlpSafeCopyMemory(
40 _Out_writes_bytes_all_(Length) VOID UNALIGNED *Destination,
41 _In_reads_bytes_(Length) CONST VOID UNALIGNED *Source,
42 _In_ SIZE_T Length);
43
44 VOID
45 NTAPI
46 RtlpGetStackLimits(PULONG_PTR LowLimit,
47 PULONG_PTR HighLimit);
48
49 PEXCEPTION_REGISTRATION_RECORD
50 NTAPI
51 RtlpGetExceptionList(VOID);
52
53 VOID
54 NTAPI
55 RtlpSetHeapParameters(IN PRTL_HEAP_PARAMETERS Parameters);
56
57 VOID
58 NTAPI
59 RtlpSetExceptionList(PEXCEPTION_REGISTRATION_RECORD NewExceptionList);
60
61 BOOLEAN
62 NTAPI
63 RtlCallVectoredExceptionHandlers(
64 IN PEXCEPTION_RECORD ExceptionRecord,
65 IN PCONTEXT Context
66 );
67
68 typedef struct _DISPATCHER_CONTEXT
69 {
70 PEXCEPTION_REGISTRATION_RECORD RegistrationPointer;
71 } DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
72
73 /* These provide support for sharing code between User and Kernel RTL */
74 PVOID
75 NTAPI
76 RtlpAllocateMemory(
77 SIZE_T Bytes,
78 ULONG Tag);
79
80 VOID
81 NTAPI
82 RtlpFreeMemory(
83 PVOID Mem,
84 ULONG Tag);
85
86 KPROCESSOR_MODE
87 NTAPI
88 RtlpGetMode(VOID);
89
90 BOOLEAN
91 NTAPI
92 RtlpCaptureStackLimits(
93 IN ULONG_PTR Ebp,
94 IN ULONG_PTR *StackBegin,
95 IN ULONG_PTR *StackEnd
96 );
97
98 NTSTATUS
99 NTAPI
100 RtlDeleteHeapLock(IN OUT PHEAP_LOCK Lock);
101
102 NTSTATUS
103 NTAPI
104 RtlEnterHeapLock(IN OUT PHEAP_LOCK Lock, IN BOOLEAN Exclusive);
105
106 NTSTATUS
107 NTAPI
108 RtlInitializeHeapLock(IN OUT PHEAP_LOCK *Lock);
109
110 NTSTATUS
111 NTAPI
112 RtlLeaveHeapLock(IN OUT PHEAP_LOCK Lock);
113
114 BOOLEAN
115 NTAPI
116 RtlpCheckForActiveDebugger(VOID);
117
118 BOOLEAN
119 NTAPI
120 RtlpHandleDpcStackException(IN PEXCEPTION_REGISTRATION_RECORD RegistrationFrame,
121 IN ULONG_PTR RegistrationFrameEnd,
122 IN OUT PULONG_PTR StackLow,
123 IN OUT PULONG_PTR StackHigh);
124
125 #define RtlpAllocateStringMemory RtlpAllocateMemory
126 #define RtlpFreeStringMemory RtlpFreeMemory
127
128 BOOLEAN
129 NTAPI
130 RtlpSetInDbgPrint(
131 VOID
132 );
133
134 VOID
135 NTAPI
136 RtlpClearInDbgPrint(
137 VOID
138 );
139
140 /* i386/except.S */
141
142 EXCEPTION_DISPOSITION
143 NTAPI
144 RtlpExecuteHandlerForException(PEXCEPTION_RECORD ExceptionRecord,
145 PEXCEPTION_REGISTRATION_RECORD RegistrationFrame,
146 PCONTEXT Context,
147 PVOID DispatcherContext,
148 PEXCEPTION_ROUTINE ExceptionHandler);
149
150 EXCEPTION_DISPOSITION
151 NTAPI
152 RtlpExecuteHandlerForUnwind(PEXCEPTION_RECORD ExceptionRecord,
153 PEXCEPTION_REGISTRATION_RECORD RegistrationFrame,
154 PCONTEXT Context,
155 PVOID DispatcherContext,
156 PEXCEPTION_ROUTINE ExceptionHandler);
157
158 VOID
159 NTAPI
160 RtlpCheckLogException(IN PEXCEPTION_RECORD ExceptionRecord,
161 IN PCONTEXT ContextRecord,
162 IN PVOID ContextData,
163 IN ULONG Size);
164
165 VOID
166 NTAPI
167 RtlpCaptureContext(OUT PCONTEXT ContextRecord);
168
169 //
170 // Debug Service calls
171 //
172 ULONG
173 NTAPI
174 DebugService(
175 IN ULONG Service,
176 IN PVOID Argument1,
177 IN PVOID Argument2,
178 IN PVOID Argument3,
179 IN PVOID Argument4
180 );
181
182 VOID
183 NTAPI
184 DebugService2(
185 IN PVOID Argument1,
186 IN PVOID Argument2,
187 IN ULONG Service
188 );
189
190 /* Tags for the String Allocators */
191 #define TAG_USTR 'RTSU'
192 #define TAG_ASTR 'RTSA'
193 #define TAG_OSTR 'RTSO'
194
195 /* Timer Queue */
196
197 extern HANDLE TimerThreadHandle;
198
199 NTSTATUS
200 RtlpInitializeTimerThread(VOID);
201
202 /* bitmap64.c */
203 typedef struct _RTL_BITMAP64
204 {
205 ULONG64 SizeOfBitMap;
206 PULONG64 Buffer;
207 } RTL_BITMAP64, *PRTL_BITMAP64;
208
209 typedef struct _RTL_BITMAP_RUN64
210 {
211 ULONG64 StartingIndex;
212 ULONG64 NumberOfBits;
213 } RTL_BITMAP_RUN64, *PRTL_BITMAP_RUN64;
214
215 /* EOF */