[CMAKE]
[reactos.git] / 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 VOID
38 NTAPI
39 RtlpGetStackLimits(PULONG_PTR LowLimit,
40 PULONG_PTR HighLimit);
41
42 PEXCEPTION_REGISTRATION_RECORD
43 NTAPI
44 RtlpGetExceptionList(VOID);
45
46 VOID
47 NTAPI
48 RtlpSetExceptionList(PEXCEPTION_REGISTRATION_RECORD NewExceptionList);
49
50 BOOLEAN
51 NTAPI
52 RtlCallVectoredExceptionHandlers(
53 IN PEXCEPTION_RECORD ExceptionRecord,
54 IN PCONTEXT Context
55 );
56
57 typedef struct _DISPATCHER_CONTEXT
58 {
59 PEXCEPTION_REGISTRATION_RECORD RegistrationPointer;
60 } DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
61
62 /* These provide support for sharing code between User and Kernel RTL */
63 PVOID
64 NTAPI
65 RtlpAllocateMemory(
66 ULONG Bytes,
67 ULONG Tag);
68
69 VOID
70 NTAPI
71 RtlpFreeMemory(
72 PVOID Mem,
73 ULONG Tag);
74
75 KPROCESSOR_MODE
76 NTAPI
77 RtlpGetMode(VOID);
78
79 BOOLEAN
80 NTAPI
81 RtlpCaptureStackLimits(
82 IN ULONG_PTR Ebp,
83 IN ULONG_PTR *StackBegin,
84 IN ULONG_PTR *StackEnd
85 );
86
87 NTSTATUS
88 NTAPI
89 RtlDeleteHeapLock(PHEAP_LOCK Lock);
90
91 NTSTATUS
92 NTAPI
93 RtlEnterHeapLock(PHEAP_LOCK Lock);
94
95 NTSTATUS
96 NTAPI
97 RtlInitializeHeapLock(PHEAP_LOCK Lock);
98
99 NTSTATUS
100 NTAPI
101 RtlLeaveHeapLock(PHEAP_LOCK Lock);
102
103 BOOLEAN
104 NTAPI
105 RtlpCheckForActiveDebugger(VOID);
106
107 BOOLEAN
108 NTAPI
109 RtlpHandleDpcStackException(IN PEXCEPTION_REGISTRATION_RECORD RegistrationFrame,
110 IN ULONG_PTR RegistrationFrameEnd,
111 IN OUT PULONG_PTR StackLow,
112 IN OUT PULONG_PTR StackHigh);
113
114 #define RtlpAllocateStringMemory RtlpAllocateMemory
115 #define RtlpFreeStringMemory RtlpFreeMemory
116
117 BOOLEAN
118 NTAPI
119 RtlpSetInDbgPrint(
120 VOID
121 );
122
123 VOID
124 NTAPI
125 RtlpClearInDbgPrint(
126 VOID
127 );
128
129 /* i386/except.S */
130
131 EXCEPTION_DISPOSITION
132 NTAPI
133 RtlpExecuteHandlerForException(PEXCEPTION_RECORD ExceptionRecord,
134 PEXCEPTION_REGISTRATION_RECORD RegistrationFrame,
135 PCONTEXT Context,
136 PVOID DispatcherContext,
137 PEXCEPTION_ROUTINE ExceptionHandler);
138
139 EXCEPTION_DISPOSITION
140 NTAPI
141 RtlpExecuteHandlerForUnwind(PEXCEPTION_RECORD ExceptionRecord,
142 PEXCEPTION_REGISTRATION_RECORD RegistrationFrame,
143 PCONTEXT Context,
144 PVOID DispatcherContext,
145 PEXCEPTION_ROUTINE ExceptionHandler);
146
147 VOID
148 NTAPI
149 RtlpCheckLogException(IN PEXCEPTION_RECORD ExceptionRecord,
150 IN PCONTEXT ContextRecord,
151 IN PVOID ContextData,
152 IN ULONG Size);
153
154 VOID
155 NTAPI
156 RtlpCaptureContext(OUT PCONTEXT ContextRecord);
157
158 //
159 // Debug Service calls
160 //
161 ULONG
162 NTAPI
163 DebugService(
164 IN ULONG Service,
165 IN PVOID Argument1,
166 IN PVOID Argument2,
167 IN PVOID Argument3,
168 IN PVOID Argument4
169 );
170
171 VOID
172 NTAPI
173 DebugService2(
174 IN PVOID Argument1,
175 IN PVOID Argument2,
176 IN ULONG Service
177 );
178
179 /* Tags for the String Allocators */
180 #define TAG_USTR 'RTSU'
181 #define TAG_ASTR 'RTSA'
182 #define TAG_OSTR 'RTSO'
183
184 /* Timer Queue */
185
186 extern HANDLE TimerThreadHandle;
187
188 NTSTATUS
189 RtlpInitializeTimerThread(VOID);
190
191 /* EOF */