c57f7c8764ebb2162d148d77873605e2f1fd8006
[reactos.git] / reactos / include / ndk / rtltypes.h
1 /*
2 * PROJECT: ReactOS Native Headers
3 * FILE: include/ndk/rtltypes.h
4 * PURPOSE: Defintions for Runtime Library Types not defined in DDK/IFS
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
6 * UPDATE HISTORY:
7 * Created 06/10/04
8 */
9 #ifndef _RTLTYPES_H
10 #define _RTLTYPES_H
11
12 /* DEPENDENCIES **************************************************************/
13 #include "zwtypes.h"
14
15 /* EXPORTED DATA *************************************************************/
16
17 /* CONSTANTS *****************************************************************/
18 #define MAXIMUM_LEADBYTES 12
19
20 #define PPF_NORMALIZED 0x01
21 #define PPF_PROFILE_USER 0x02
22 #define PPF_PROFILE_SERVER 0x04
23 #define PPF_PROFILE_KERNEL 0x08
24
25 #define PPF_RESERVE_1MB 0x20
26 #define PPF_DISABLE_HEAP_CHECKS 0x100
27 #define PPF_PROCESS_OR_1 0x200
28 #define PPF_PROCESS_OR_2 0x400
29
30 #define PEB_BASE (0x7FFDF000)
31
32 #define EXCEPTION_CONTINUE_SEARCH 0
33 #define EXCEPTION_EXECUTE_HANDLER 1
34
35 #define EXCEPTION_UNWINDING 0x02
36 #define EXCEPTION_EXIT_UNWIND 0x04
37 #define EXCEPTION_STACK_INVALID 0x8
38 #define EXCEPTION_NESTED_CALL 0x10
39 #define EXCEPTION_TARGET_UNWIND 0x20
40 #define EXCEPTION_COLLIDED_UNWIND 0x20
41
42 #define EH_NONCONTINUABLE 0x01
43 #define EH_UNWINDING 0x02
44 #define EH_EXIT_UNWIND 0x04
45 #define EH_STACK_INVALID 0x08
46 #define EH_NESTED_CALL 0x10
47
48 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
49 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
50
51 #define RTL_RANGE_SHARED 0x01
52 #define RTL_RANGE_CONFLICT 0x02
53
54 /* FIXME: Rename these */
55 #define PDI_MODULES 0x01 /* The loaded modules of the process */
56 #define PDI_BACKTRACE 0x02 /* The heap stack back traces */
57 #define PDI_HEAPS 0x04 /* The heaps of the process */
58 #define PDI_HEAP_TAGS 0x08 /* The heap tags */
59 #define PDI_HEAP_BLOCKS 0x10 /* The heap blocks */
60 #define PDI_LOCKS 0x20 /* The locks created by the process */
61
62 /* RTL Handle Flags */
63 #define RTL_HANDLE_VALID 0x1
64
65 /* RTL Atom Flags */
66 #define RTL_ATOM_IS_PINNED 0x1
67
68 /* ENUMERATIONS **************************************************************/
69
70 typedef enum
71 {
72 ExceptionContinueExecution,
73 ExceptionContinueSearch,
74 ExceptionNestedException,
75 ExceptionCollidedUnwind
76 } EXCEPTION_DISPOSITION;
77
78 typedef enum
79 {
80 INVALID_PATH = 0,
81 UNC_PATH, /* "//foo" */
82 ABSOLUTE_DRIVE_PATH, /* "c:/foo" */
83 RELATIVE_DRIVE_PATH, /* "c:foo" */
84 ABSOLUTE_PATH, /* "/foo" */
85 RELATIVE_PATH, /* "foo" */
86 DEVICE_PATH, /* "//./foo" */
87 UNC_DOT_PATH /* "//." */
88 } DOS_PATHNAME_TYPE;
89
90 /* FUNCTION TYPES ************************************************************/
91 typedef NTSTATUS
92 (*PHEAP_ENUMERATION_ROUTINE)(
93 IN PVOID HeapHandle,
94 IN PVOID UserParam
95 );
96
97 typedef EXCEPTION_DISPOSITION
98 (*PEXCEPTION_HANDLER)(
99 struct _EXCEPTION_RECORD*,
100 PVOID,
101 struct _CONTEXT*,
102 PVOID
103 );
104
105 typedef LONG (STDCALL *PVECTORED_EXCEPTION_HANDLER)(
106 PEXCEPTION_POINTERS ExceptionPointers
107 );
108
109 typedef DWORD (STDCALL *PTHREAD_START_ROUTINE)(
110 LPVOID Parameter
111 );
112
113 typedef VOID
114 (STDCALL *PRTL_BASE_PROCESS_START_ROUTINE)(
115 PTHREAD_START_ROUTINE StartAddress,
116 PVOID Parameter
117 );
118
119 /* TYPES *********************************************************************/
120
121 typedef unsigned short RTL_ATOM;
122 typedef unsigned short *PRTL_ATOM;
123
124 typedef ACL_REVISION_INFORMATION *PACL_REVISION_INFORMATION;
125 typedef ACL_SIZE_INFORMATION *PACL_SIZE_INFORMATION;
126 typedef struct _ACE
127 {
128 ACE_HEADER Header;
129 ACCESS_MASK AccessMask;
130 } ACE, *PACE;
131
132 /* FIXME: Review definitions and give these guys a better name */
133 typedef struct _DEBUG_BUFFER
134 {
135 HANDLE SectionHandle;
136 PVOID SectionBase;
137 PVOID RemoteSectionBase;
138 ULONG SectionBaseDelta;
139 HANDLE EventPairHandle;
140 ULONG Unknown[2];
141 HANDLE RemoteThreadHandle;
142 ULONG InfoClassMask;
143 ULONG SizeOfInfo;
144 ULONG AllocatedSize;
145 ULONG SectionSize;
146 PVOID ModuleInformation;
147 PVOID BackTraceInformation;
148 PVOID HeapInformation;
149 PVOID LockInformation;
150 PVOID Reserved[8];
151 } DEBUG_BUFFER, *PDEBUG_BUFFER;
152
153 typedef struct _DEBUG_MODULE_INFORMATION
154 {
155 ULONG Reserved[2];
156 PVOID Base;
157 ULONG Size;
158 ULONG Flags;
159 USHORT Index;
160 USHORT Unknown;
161 USHORT LoadCount;
162 USHORT ModuleNameOffset;
163 CHAR ImageName[256];
164 } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
165
166 typedef struct _DEBUG_HEAP_INFORMATION
167 {
168 PVOID Base;
169 ULONG Flags;
170 USHORT Granularity;
171 USHORT Unknown;
172 ULONG Allocated;
173 ULONG Committed;
174 ULONG TagCount;
175 ULONG BlockCount;
176 ULONG Reserved[7];
177 PVOID Tags;
178 PVOID Blocks;
179 } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
180
181 typedef struct _DEBUG_LOCK_INFORMATION
182 {
183 PVOID Address;
184 USHORT Type;
185 USHORT CreatorBackTraceIndex;
186 ULONG OwnerThreadId;
187 ULONG ActiveCount;
188 ULONG ContentionCount;
189 ULONG EntryCount;
190 ULONG RecursionCount;
191 ULONG NumberOfSharedWaiters;
192 ULONG NumberOfExclusiveWaiters;
193 } DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
194
195 typedef struct _RTL_HANDLE_TABLE_ENTRY
196 {
197 ULONG Flags;
198 struct _RTL_HANDLE_TABLE_ENTRY *NextFree;
199 } RTL_HANDLE_TABLE_ENTRY, *PRTL_HANDLE_TABLE_ENTRY;
200
201 typedef struct _RTL_HANDLE_TABLE
202 {
203 ULONG MaximumNumberOfHandles;
204 ULONG SizeOfHandleTableEntry;
205 ULONG Reserved[2];
206 PRTL_HANDLE_TABLE_ENTRY FreeHandles;
207 PRTL_HANDLE_TABLE_ENTRY CommittedHandles;
208 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles;
209 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles;
210 } RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
211
212 typedef struct _LOCK_INFORMATION
213 {
214 ULONG LockCount;
215 DEBUG_LOCK_INFORMATION LockEntry[1];
216 } LOCK_INFORMATION, *PLOCK_INFORMATION;
217
218 typedef struct _HEAP_INFORMATION
219 {
220 ULONG HeapCount;
221 DEBUG_HEAP_INFORMATION HeapEntry[1];
222 } HEAP_INFORMATION, *PHEAP_INFORMATION;
223
224 typedef struct _MODULE_INFORMATION
225 {
226 ULONG ModuleCount;
227 DEBUG_MODULE_INFORMATION ModuleEntry[1];
228 } MODULE_INFORMATION, *PMODULE_INFORMATION;
229
230 typedef struct _RTL_HEAP_DEFINITION
231 {
232 ULONG Length;
233 ULONG Unknown[11];
234 } RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
235 /* END REVIEW AREA */
236
237 typedef struct _EXCEPTION_REGISTRATION
238 {
239 struct _EXCEPTION_REGISTRATION* prev;
240 PEXCEPTION_HANDLER handler;
241 } EXCEPTION_REGISTRATION, *PEXCEPTION_REGISTRATION;
242
243 typedef EXCEPTION_REGISTRATION EXCEPTION_REGISTRATION_RECORD;
244 typedef PEXCEPTION_REGISTRATION PEXCEPTION_REGISTRATION_RECORD;
245
246 typedef struct _CURDIR
247 {
248 UNICODE_STRING DosPath;
249 HANDLE Handle;
250 } CURDIR, *PCURDIR;
251
252 typedef struct RTL_DRIVE_LETTER_CURDIR
253 {
254 USHORT Flags;
255 USHORT Length;
256 ULONG TimeStamp;
257 UNICODE_STRING DosPath;
258 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
259
260 typedef struct _RTL_RANGE_LIST
261 {
262 LIST_ENTRY ListHead;
263 ULONG Flags; /* RTL_RANGE_LIST_... flags */
264 ULONG Count;
265 ULONG Stamp;
266 } RTL_RANGE_LIST, *PRTL_RANGE_LIST;
267
268 typedef struct _RTL_RANGE
269 {
270 ULONGLONG Start;
271 ULONGLONG End;
272 PVOID UserData;
273 PVOID Owner;
274 UCHAR Attributes;
275 UCHAR Flags; /* RTL_RANGE_... flags */
276 } RTL_RANGE, *PRTL_RANGE;
277
278 typedef BOOLEAN
279 (STDCALL *PRTL_CONFLICT_RANGE_CALLBACK) (
280 PVOID Context,
281 PRTL_RANGE Range
282 );
283
284 typedef struct _RTL_RESOURCE
285 {
286 RTL_CRITICAL_SECTION Lock;
287 HANDLE SharedSemaphore;
288 ULONG SharedWaiters;
289 HANDLE ExclusiveSemaphore;
290 ULONG ExclusiveWaiters;
291 LONG NumberActive;
292 HANDLE OwningThread;
293 ULONG TimeoutBoost; /* ?? */
294 PVOID DebugInfo; /* ?? */
295 } RTL_RESOURCE, *PRTL_RESOURCE;
296
297 typedef struct _RANGE_LIST_ITERATOR
298 {
299 PLIST_ENTRY RangeListHead;
300 PLIST_ENTRY MergedHead;
301 PVOID Current;
302 ULONG Stamp;
303 } RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
304
305 typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
306 {
307 USHORT Length;
308 USHORT Flags;
309 CHAR Text[1];
310 } RTL_MESSAGE_RESOURCE_ENTRY, *PRTL_MESSAGE_RESOURCE_ENTRY;
311
312 typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
313 {
314 ULONG LowId;
315 ULONG HighId;
316 ULONG OffsetToEntries;
317 } RTL_MESSAGE_RESOURCE_BLOCK, *PRTL_MESSAGE_RESOURCE_BLOCK;
318
319 typedef struct _RTL_MESSAGE_RESOURCE_DATA
320 {
321 ULONG NumberOfBlocks;
322 RTL_MESSAGE_RESOURCE_BLOCK Blocks[1];
323 } RTL_MESSAGE_RESOURCE_DATA, *PRTL_MESSAGE_RESOURCE_DATA;
324
325 typedef struct _NLS_FILE_HEADER
326 {
327 USHORT HeaderSize;
328 USHORT CodePage;
329 USHORT MaximumCharacterSize; /* SBCS = 1, DBCS = 2 */
330 USHORT DefaultChar;
331 USHORT UniDefaultChar;
332 USHORT TransDefaultChar;
333 USHORT TransUniDefaultChar;
334 USHORT DBCSCodePage;
335 UCHAR LeadByte[MAXIMUM_LEADBYTES];
336 } NLS_FILE_HEADER, *PNLS_FILE_HEADER;
337
338 typedef struct _RTL_USER_PROCESS_PARAMETERS
339 {
340 ULONG MaximumLength;
341 ULONG Length;
342 ULONG Flags;
343 ULONG DebugFlags;
344 HANDLE ConsoleHandle;
345 ULONG ConsoleFlags;
346 HANDLE StandardInput;
347 HANDLE StandardOutput;
348 HANDLE StandardError;
349 CURDIR CurrentDirectory;
350 UNICODE_STRING DllPath;
351 UNICODE_STRING ImagePathName;
352 UNICODE_STRING CommandLine;
353 PWSTR Environment;
354 ULONG StartingX;
355 ULONG StartingY;
356 ULONG CountX;
357 ULONG CountY;
358 ULONG CountCharsX;
359 ULONG CountCharsY;
360 ULONG FillAttribute;;
361 ULONG WindowFlags;
362 ULONG ShowWindowFlags;
363 UNICODE_STRING WindowTitle;
364 UNICODE_STRING DesktopInfo;
365 UNICODE_STRING ShellInfo;
366 UNICODE_STRING RuntimeData;
367 RTL_DRIVE_LETTER_CURDIR CurrentDirectories[32];
368 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
369
370 typedef struct _RTL_USER_PROCESS_INFORMATION
371 {
372 ULONG Size;
373 HANDLE ProcessHandle;
374 HANDLE ThreadHandle;
375 CLIENT_ID ClientId;
376 SECTION_IMAGE_INFORMATION ImageInformation;
377 } RTL_USER_PROCESS_INFORMATION, *PRTL_USER_PROCESS_INFORMATION;
378
379 typedef struct _RTL_ATOM_TABLE_ENTRY
380 {
381 struct _RTL_ATOM_TABLE_ENTRY *HashLink;
382 USHORT HandleIndex;
383 USHORT Atom;
384 USHORT ReferenceCount;
385 UCHAR Flags;
386 UCHAR NameLength;
387 WCHAR Name[1];
388 } RTL_ATOM_TABLE_ENTRY, *PRTL_ATOM_TABLE_ENTRY;
389
390 typedef struct _RTL_ATOM_TABLE
391 {
392 ULONG Signature;
393 union
394 {
395 RTL_CRITICAL_SECTION CriticalSection;
396 FAST_MUTEX FastMutex;
397 };
398 union
399 {
400 RTL_HANDLE_TABLE RtlHandleTable;
401 PHANDLE_TABLE ExHandleTable;
402 };
403 ULONG NumberOfBuckets;
404 PRTL_ATOM_TABLE_ENTRY Buckets[1];
405 } RTL_ATOM_TABLE, *PRTL_ATOM_TABLE;
406
407 /* Let Kernel Drivers use this */
408 #ifndef _WINBASE_H
409 typedef struct _SYSTEMTIME
410 {
411 WORD wYear;
412 WORD wMonth;
413 WORD wDayOfWeek;
414 WORD wDay;
415 WORD wHour;
416 WORD wMinute;
417 WORD wSecond;
418 WORD wMilliseconds;
419 } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
420
421 typedef struct _TIME_ZONE_INFORMATION
422 {
423 LONG Bias;
424 WCHAR StandardName[32];
425 SYSTEMTIME StandardDate;
426 LONG StandardBias;
427 WCHAR DaylightName[32];
428 SYSTEMTIME DaylightDate;
429 LONG DaylightBias;
430 } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
431
432 typedef enum _ACL_INFORMATION_CLASS
433 {
434 AclRevisionInformation = 1,
435 AclSizeInformation
436 } ACL_INFORMATION_CLASS;
437
438 #define TIME_ZONE_ID_UNKNOWN 0
439 #define TIME_ZONE_ID_STANDARD 1
440 #define TIME_ZONE_ID_DAYLIGHT 2
441 #define TIME_ZONE_ID_INVALID 0xFFFFFFFF
442 #endif
443
444 #endif