- Remove unused ldr/userldr.c
[reactos.git] / reactos / ntoskrnl / include / internal / ex.h
1 #ifndef __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H
2 #define __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H
3
4 /* GLOBAL VARIABLES *********************************************************/
5
6 extern TIME_ZONE_INFORMATION ExpTimeZoneInfo;
7 extern LARGE_INTEGER ExpTimeZoneBias;
8 extern ULONG ExpTimeZoneId;
9 extern POBJECT_TYPE ExEventPairObjectType;
10
11 /* INITIALIZATION FUNCTIONS *************************************************/
12
13 VOID
14 STDCALL
15 ExpWin32kInit(VOID);
16
17 VOID
18 STDCALL
19 ExInit2(VOID);
20
21 VOID
22 STDCALL
23 ExpInitTimeZoneInfo(VOID);
24
25 VOID
26 STDCALL
27 ExpInitializeWorkerThreads(VOID);
28
29 VOID
30 STDCALL
31 ExpInitLookasideLists(VOID);
32
33 VOID
34 STDCALL
35 ExpInitializeCallbacks(VOID);
36
37 VOID
38 STDCALL
39 ExpInitUuids(VOID);
40
41 VOID
42 STDCALL
43 ExpInitializeExecutive(VOID);
44
45 VOID
46 STDCALL
47 ExpInitializeEventImplementation(VOID);
48
49 VOID
50 STDCALL
51 ExpInitializeEventImplementation(VOID);
52
53 VOID
54 STDCALL
55 ExpInitializeEventPairImplementation(VOID);
56
57 VOID
58 STDCALL
59 ExpInitializeSemaphoreImplementation(VOID);
60
61 VOID
62 STDCALL
63 ExpInitializeMutantImplementation(VOID);
64
65 VOID
66 STDCALL
67 ExpInitializeTimerImplementation(VOID);
68
69 VOID
70 STDCALL
71 ExpInitializeProfileImplementation(VOID);
72
73 /* HANDLE TABLE FUNCTIONS ***************************************************/
74
75 #define EX_HANDLE_ENTRY_LOCKED (1 << ((sizeof(PVOID) * 8) - 1))
76 #define EX_HANDLE_ENTRY_PROTECTFROMCLOSE (1 << 0)
77 #define EX_HANDLE_ENTRY_INHERITABLE (1 << 1)
78 #define EX_HANDLE_ENTRY_AUDITONCLOSE (1 << 2)
79
80 #define EX_HANDLE_TABLE_CLOSING 0x1
81
82 #define EX_INVALID_HANDLE (~0)
83
84 #define EX_HANDLE_ENTRY_FLAGSMASK (EX_HANDLE_ENTRY_LOCKED | \
85 EX_HANDLE_ENTRY_PROTECTFROMCLOSE | \
86 EX_HANDLE_ENTRY_INHERITABLE | \
87 EX_HANDLE_ENTRY_AUDITONCLOSE)
88
89 typedef VOID (STDCALL PEX_DESTROY_HANDLE_CALLBACK)(
90 PHANDLE_TABLE HandleTable,
91 PVOID Object,
92 ULONG GrantedAccess,
93 PVOID Context
94 );
95
96 typedef BOOLEAN (STDCALL PEX_DUPLICATE_HANDLE_CALLBACK)(
97 PHANDLE_TABLE HandleTable,
98 PHANDLE_TABLE_ENTRY HandleTableEntry,
99 PVOID Context
100 );
101
102 typedef BOOLEAN (STDCALL PEX_CHANGE_HANDLE_CALLBACK)(
103 PHANDLE_TABLE HandleTable,
104 PHANDLE_TABLE_ENTRY HandleTableEntry,
105 PVOID Context
106 );
107
108 VOID
109 ExpInitializeHandleTables(VOID);
110
111 PHANDLE_TABLE
112 ExCreateHandleTable(IN PEPROCESS QuotaProcess OPTIONAL);
113
114 VOID
115 ExDestroyHandleTable(
116 IN PHANDLE_TABLE HandleTable,
117 IN PEX_DESTROY_HANDLE_CALLBACK DestroyHandleCallback OPTIONAL,
118 IN PVOID Context OPTIONAL
119 );
120
121 PHANDLE_TABLE
122 ExDupHandleTable(
123 IN PEPROCESS QuotaProcess OPTIONAL,
124 IN PEX_DUPLICATE_HANDLE_CALLBACK DuplicateHandleCallback OPTIONAL,
125 IN PVOID Context OPTIONAL,
126 IN PHANDLE_TABLE SourceHandleTable
127 );
128
129 BOOLEAN
130 ExLockHandleTableEntry(
131 IN PHANDLE_TABLE HandleTable,
132 IN PHANDLE_TABLE_ENTRY Entry
133 );
134
135 VOID
136 ExUnlockHandleTableEntry(
137 IN PHANDLE_TABLE HandleTable,
138 IN PHANDLE_TABLE_ENTRY Entry
139 );
140
141 LONG
142 ExCreateHandle(
143 IN PHANDLE_TABLE HandleTable,
144 IN PHANDLE_TABLE_ENTRY Entry
145 );
146
147 BOOLEAN
148 ExDestroyHandle(
149 IN PHANDLE_TABLE HandleTable,
150 IN LONG Handle
151 );
152
153 VOID
154 ExDestroyHandleByEntry(
155 IN PHANDLE_TABLE HandleTable,
156 IN PHANDLE_TABLE_ENTRY Entry,
157 IN LONG Handle
158 );
159
160 PHANDLE_TABLE_ENTRY
161 ExMapHandleToPointer(
162 IN PHANDLE_TABLE HandleTable,
163 IN LONG Handle
164 );
165
166 BOOLEAN
167 ExChangeHandle(
168 IN PHANDLE_TABLE HandleTable,
169 IN LONG Handle,
170 IN PEX_CHANGE_HANDLE_CALLBACK ChangeHandleCallback,
171 IN PVOID Context
172 );
173
174 /* PSEH EXCEPTION HANDLING **************************************************/
175
176 LONG
177 STDCALL
178 ExSystemExceptionFilter(VOID);
179
180 static __inline _SEH_FILTER(_SEH_ExSystemExceptionFilter)
181 {
182 return ExSystemExceptionFilter();
183 }
184
185 /* OTHER FUNCTIONS **********************************************************/
186
187 LONGLONG
188 FASTCALL
189 ExfpInterlockedExchange64(
190 LONGLONG volatile * Destination,
191 PLONGLONG Exchange
192 );
193
194 NTSTATUS
195 ExpSetTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation);
196
197 NTSTATUS
198 ExpAllocateLocallyUniqueId(OUT LUID *LocallyUniqueId);
199
200 VOID
201 STDCALL
202 ExTimerRundown(VOID);
203
204 #define InterlockedDecrementUL(Addend) \
205 (ULONG)InterlockedDecrement((PLONG)(Addend))
206
207 #define InterlockedIncrementUL(Addend) \
208 (ULONG)InterlockedIncrement((PLONG)(Addend))
209
210 #define InterlockedExchangeUL(Target, Value) \
211 (ULONG)InterlockedExchange((PLONG)(Target), (LONG)(Value))
212
213 #define InterlockedExchangeAddUL(Addend, Value) \
214 (ULONG)InterlockedExchangeAdd((PLONG)(Addend), (LONG)(Value))
215
216 #define InterlockedCompareExchangeUL(Destination, Exchange, Comperand) \
217 (ULONG)InterlockedCompareExchange((PLONG)(Destination), (LONG)(Exchange), (LONG)(Comperand))
218
219 #define ExfInterlockedCompareExchange64UL(Destination, Exchange, Comperand) \
220 (ULONGLONG)ExfInterlockedCompareExchange64((PLONGLONG)(Destination), (PLONGLONG)(Exchange), (PLONGLONG)(Comperand))
221
222 #define ExfpInterlockedExchange64UL(Target, Value) \
223 (ULONGLONG)ExfpInterlockedExchange64((PLONGLONG)(Target), (PLONGLONG)(Value))
224
225 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H */