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