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)
12 /* DEPENDENCIES **************************************************************/
15 /* EXPORTED DATA *************************************************************/
17 /* CONSTANTS *****************************************************************/
18 #define MAXIMUM_LEADBYTES 12
20 #define PPF_NORMALIZED 0x01
21 #define PPF_PROFILE_USER 0x02
22 #define PPF_PROFILE_SERVER 0x04
23 #define PPF_PROFILE_KERNEL 0x08
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
30 #define PEB_BASE (0x7FFDF000)
32 #define EXCEPTION_CONTINUE_SEARCH 0
33 #define EXCEPTION_EXECUTE_HANDLER 1
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
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
48 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
49 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
51 #define RTL_RANGE_SHARED 0x01
52 #define RTL_RANGE_CONFLICT 0x02
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 */
62 /* RTL Handle Flags */
63 #define RTL_HANDLE_VALID 0x1
66 #define RTL_ATOM_IS_PINNED 0x1
68 /* ENUMERATIONS **************************************************************/
72 ExceptionContinueExecution
,
73 ExceptionContinueSearch
,
74 ExceptionNestedException
,
75 ExceptionCollidedUnwind
76 } EXCEPTION_DISPOSITION
;
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
/* "//." */
90 /* FUNCTION TYPES ************************************************************/
92 (*PHEAP_ENUMERATION_ROUTINE
)(
97 typedef EXCEPTION_DISPOSITION
98 (*PEXCEPTION_HANDLER
)(
99 struct _EXCEPTION_RECORD
*,
105 typedef LONG (STDCALL
*PVECTORED_EXCEPTION_HANDLER
)(
106 PEXCEPTION_POINTERS ExceptionPointers
109 typedef DWORD (STDCALL
*PTHREAD_START_ROUTINE
)(
114 (STDCALL
*PRTL_BASE_PROCESS_START_ROUTINE
)(
115 PTHREAD_START_ROUTINE StartAddress
,
119 /* TYPES *********************************************************************/
121 typedef unsigned short RTL_ATOM
;
122 typedef unsigned short *PRTL_ATOM
;
124 typedef ACL_REVISION_INFORMATION
*PACL_REVISION_INFORMATION
;
125 typedef ACL_SIZE_INFORMATION
*PACL_SIZE_INFORMATION
;
129 ACCESS_MASK AccessMask
;
132 /* FIXME: Review definitions and give these guys a better name */
133 typedef struct _DEBUG_BUFFER
135 HANDLE SectionHandle
;
137 PVOID RemoteSectionBase
;
138 ULONG SectionBaseDelta
;
139 HANDLE EventPairHandle
;
141 HANDLE RemoteThreadHandle
;
146 PVOID ModuleInformation
;
147 PVOID BackTraceInformation
;
148 PVOID HeapInformation
;
149 PVOID LockInformation
;
151 } DEBUG_BUFFER
, *PDEBUG_BUFFER
;
153 typedef struct _DEBUG_MODULE_INFORMATION
162 USHORT ModuleNameOffset
;
164 } DEBUG_MODULE_INFORMATION
, *PDEBUG_MODULE_INFORMATION
;
166 typedef struct _DEBUG_HEAP_INFORMATION
179 } DEBUG_HEAP_INFORMATION
, *PDEBUG_HEAP_INFORMATION
;
181 typedef struct _DEBUG_LOCK_INFORMATION
185 USHORT CreatorBackTraceIndex
;
188 ULONG ContentionCount
;
190 ULONG RecursionCount
;
191 ULONG NumberOfSharedWaiters
;
192 ULONG NumberOfExclusiveWaiters
;
193 } DEBUG_LOCK_INFORMATION
, *PDEBUG_LOCK_INFORMATION
;
195 typedef struct _RTL_HANDLE_TABLE_ENTRY
198 struct _RTL_HANDLE_TABLE_ENTRY
*NextFree
;
199 } RTL_HANDLE_TABLE_ENTRY
, *PRTL_HANDLE_TABLE_ENTRY
;
201 typedef struct _RTL_HANDLE_TABLE
203 ULONG MaximumNumberOfHandles
;
204 ULONG SizeOfHandleTableEntry
;
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
;
212 typedef struct _LOCK_INFORMATION
215 DEBUG_LOCK_INFORMATION LockEntry
[1];
216 } LOCK_INFORMATION
, *PLOCK_INFORMATION
;
218 typedef struct _HEAP_INFORMATION
221 DEBUG_HEAP_INFORMATION HeapEntry
[1];
222 } HEAP_INFORMATION
, *PHEAP_INFORMATION
;
224 typedef struct _MODULE_INFORMATION
227 DEBUG_MODULE_INFORMATION ModuleEntry
[1];
228 } MODULE_INFORMATION
, *PMODULE_INFORMATION
;
230 typedef struct _RTL_HEAP_DEFINITION
234 } RTL_HEAP_DEFINITION
, *PRTL_HEAP_DEFINITION
;
235 /* END REVIEW AREA */
237 typedef struct _EXCEPTION_REGISTRATION
239 struct _EXCEPTION_REGISTRATION
* prev
;
240 PEXCEPTION_HANDLER handler
;
241 } EXCEPTION_REGISTRATION
, *PEXCEPTION_REGISTRATION
;
243 typedef EXCEPTION_REGISTRATION EXCEPTION_REGISTRATION_RECORD
;
244 typedef PEXCEPTION_REGISTRATION PEXCEPTION_REGISTRATION_RECORD
;
246 typedef struct _CURDIR
248 UNICODE_STRING DosPath
;
252 typedef struct RTL_DRIVE_LETTER_CURDIR
257 UNICODE_STRING DosPath
;
258 } RTL_DRIVE_LETTER_CURDIR
, *PRTL_DRIVE_LETTER_CURDIR
;
260 typedef struct _RTL_RANGE_LIST
263 ULONG Flags
; /* RTL_RANGE_LIST_... flags */
266 } RTL_RANGE_LIST
, *PRTL_RANGE_LIST
;
268 typedef struct _RTL_RANGE
275 UCHAR Flags
; /* RTL_RANGE_... flags */
276 } RTL_RANGE
, *PRTL_RANGE
;
279 (STDCALL
*PRTL_CONFLICT_RANGE_CALLBACK
) (
284 typedef struct _RTL_RESOURCE
286 RTL_CRITICAL_SECTION Lock
;
287 HANDLE SharedSemaphore
;
289 HANDLE ExclusiveSemaphore
;
290 ULONG ExclusiveWaiters
;
293 ULONG TimeoutBoost
; /* ?? */
294 PVOID DebugInfo
; /* ?? */
295 } RTL_RESOURCE
, *PRTL_RESOURCE
;
297 typedef struct _RANGE_LIST_ITERATOR
299 PLIST_ENTRY RangeListHead
;
300 PLIST_ENTRY MergedHead
;
303 } RTL_RANGE_LIST_ITERATOR
, *PRTL_RANGE_LIST_ITERATOR
;
305 typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
310 } RTL_MESSAGE_RESOURCE_ENTRY
, *PRTL_MESSAGE_RESOURCE_ENTRY
;
312 typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
316 ULONG OffsetToEntries
;
317 } RTL_MESSAGE_RESOURCE_BLOCK
, *PRTL_MESSAGE_RESOURCE_BLOCK
;
319 typedef struct _RTL_MESSAGE_RESOURCE_DATA
321 ULONG NumberOfBlocks
;
322 RTL_MESSAGE_RESOURCE_BLOCK Blocks
[1];
323 } RTL_MESSAGE_RESOURCE_DATA
, *PRTL_MESSAGE_RESOURCE_DATA
;
325 typedef struct _NLS_FILE_HEADER
329 USHORT MaximumCharacterSize
; /* SBCS = 1, DBCS = 2 */
331 USHORT UniDefaultChar
;
332 USHORT TransDefaultChar
;
333 USHORT TransUniDefaultChar
;
335 UCHAR LeadByte
[MAXIMUM_LEADBYTES
];
336 } NLS_FILE_HEADER
, *PNLS_FILE_HEADER
;
338 typedef struct _RTL_USER_PROCESS_PARAMETERS
344 HANDLE ConsoleHandle
;
346 HANDLE StandardInput
;
347 HANDLE StandardOutput
;
348 HANDLE StandardError
;
349 CURDIR CurrentDirectory
;
350 UNICODE_STRING DllPath
;
351 UNICODE_STRING ImagePathName
;
352 UNICODE_STRING CommandLine
;
360 ULONG FillAttribute
;;
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
;
370 typedef struct _RTL_USER_PROCESS_INFORMATION
373 HANDLE ProcessHandle
;
376 SECTION_IMAGE_INFORMATION ImageInformation
;
377 } RTL_USER_PROCESS_INFORMATION
, *PRTL_USER_PROCESS_INFORMATION
;
379 typedef struct _RTL_ATOM_TABLE_ENTRY
381 struct _RTL_ATOM_TABLE_ENTRY
*HashLink
;
384 USHORT ReferenceCount
;
388 } RTL_ATOM_TABLE_ENTRY
, *PRTL_ATOM_TABLE_ENTRY
;
390 typedef struct _RTL_ATOM_TABLE
395 RTL_CRITICAL_SECTION CriticalSection
;
396 FAST_MUTEX FastMutex
;
400 RTL_HANDLE_TABLE RtlHandleTable
;
401 PHANDLE_TABLE ExHandleTable
;
403 ULONG NumberOfBuckets
;
404 PRTL_ATOM_TABLE_ENTRY Buckets
[1];
405 } RTL_ATOM_TABLE
, *PRTL_ATOM_TABLE
;
407 /* Let Kernel Drivers use this */
409 typedef struct _SYSTEMTIME
419 } SYSTEMTIME
, *PSYSTEMTIME
, *LPSYSTEMTIME
;
421 typedef struct _TIME_ZONE_INFORMATION
424 WCHAR StandardName
[32];
425 SYSTEMTIME StandardDate
;
427 WCHAR DaylightName
[32];
428 SYSTEMTIME DaylightDate
;
430 } TIME_ZONE_INFORMATION
, *PTIME_ZONE_INFORMATION
, *LPTIME_ZONE_INFORMATION
;
432 typedef enum _ACL_INFORMATION_CLASS
434 AclRevisionInformation
= 1,
436 } ACL_INFORMATION_CLASS
;
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