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