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