Merge trunk head (r43756)
[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 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(PRTL_CRITICAL_SECTION CriticalSection);
90
91 NTSTATUS
92 NTAPI
93 RtlEnterHeapLock(PRTL_CRITICAL_SECTION CriticalSection);
94
95 NTSTATUS
96 NTAPI
97 RtlInitializeHeapLock(PRTL_CRITICAL_SECTION CriticalSection);
98
99 NTSTATUS
100 NTAPI
101 RtlLeaveHeapLock(PRTL_CRITICAL_SECTION CriticalSection);
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(IN BOOLEAN NewValue);
120
121 /* i386/except.S */
122
123 EXCEPTION_DISPOSITION
124 NTAPI
125 RtlpExecuteHandlerForException(PEXCEPTION_RECORD ExceptionRecord,
126 PEXCEPTION_REGISTRATION_RECORD RegistrationFrame,
127 PCONTEXT Context,
128 PVOID DispatcherContext,
129 PEXCEPTION_ROUTINE ExceptionHandler);
130
131 EXCEPTION_DISPOSITION
132 NTAPI
133 RtlpExecuteHandlerForUnwind(PEXCEPTION_RECORD ExceptionRecord,
134 PEXCEPTION_REGISTRATION_RECORD RegistrationFrame,
135 PCONTEXT Context,
136 PVOID DispatcherContext,
137 PEXCEPTION_ROUTINE ExceptionHandler);
138
139 VOID
140 NTAPI
141 RtlpCheckLogException(IN PEXCEPTION_RECORD ExceptionRecord,
142 IN PCONTEXT ContextRecord,
143 IN PVOID ContextData,
144 IN ULONG Size);
145
146 VOID
147 NTAPI
148 RtlpCaptureContext(OUT PCONTEXT ContextRecord);
149
150 //
151 // Debug Service calls
152 //
153 ULONG
154 NTAPI
155 DebugService(
156 IN ULONG Service,
157 IN PVOID Argument1,
158 IN PVOID Argument2,
159 IN PVOID Argument3,
160 IN PVOID Argument4
161 );
162
163 VOID
164 NTAPI
165 DebugService2(
166 IN PVOID Argument1,
167 IN PVOID Argument2,
168 IN ULONG Service
169 );
170
171 /* Tags for the String Allocators */
172 #define TAG_USTR 'RTSU'
173 #define TAG_ASTR 'RTSA'
174 #define TAG_OSTR 'RTSO'
175
176 /* Timer Queue */
177
178 extern HANDLE TimerThreadHandle;
179
180 NTSTATUS
181 RtlpInitializeTimerThread(VOID);
182
183 /* EOF */