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 **************************************************************/
16 /* EXPORTED DATA *************************************************************/
18 /* CONSTANTS *****************************************************************/
19 #define MAXIMUM_LEADBYTES 12
21 #define PPF_NORMALIZED 0x01
22 #define PPF_PROFILE_USER 0x02
23 #define PPF_PROFILE_SERVER 0x04
24 #define PPF_PROFILE_KERNEL 0x08
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
31 #define PEB_BASE (0x7FFDF000)
33 #define EXCEPTION_CONTINUE_SEARCH 0
34 #define EXCEPTION_EXECUTE_HANDLER 1
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
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
49 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
50 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
52 #define RTL_RANGE_SHARED 0x01
53 #define RTL_RANGE_CONFLICT 0x02
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 */
63 /* RTL Handle Flags */
64 #define RTL_HANDLE_VALID 0x1
67 #define RTL_ATOM_IS_PINNED 0x1
69 /* ENUMERATIONS **************************************************************/
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
/* "//." */
83 /* FUNCTION TYPES ************************************************************/
85 (*PHEAP_ENUMERATION_ROUTINE
)(
90 typedef EXCEPTION_DISPOSITION
91 (*PEXCEPTION_HANDLER
)(
92 struct _EXCEPTION_RECORD
*,
98 typedef LONG (NTAPI
*PVECTORED_EXCEPTION_HANDLER
)(
99 PEXCEPTION_POINTERS ExceptionPointers
102 typedef DWORD (NTAPI
*PTHREAD_START_ROUTINE
)(
107 (NTAPI
*PRTL_BASE_PROCESS_START_ROUTINE
)(
108 PTHREAD_START_ROUTINE StartAddress
,
112 /* TYPES *********************************************************************/
114 typedef unsigned short RTL_ATOM
;
115 typedef unsigned short *PRTL_ATOM
;
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
;
122 typedef ACL_REVISION_INFORMATION
*PACL_REVISION_INFORMATION
;
123 typedef ACL_SIZE_INFORMATION
*PACL_SIZE_INFORMATION
;
127 ACCESS_MASK AccessMask
;
130 /* FIXME: Review definitions and give these guys a better name */
131 typedef struct _DEBUG_BUFFER
133 HANDLE SectionHandle
;
135 PVOID RemoteSectionBase
;
136 ULONG SectionBaseDelta
;
137 HANDLE EventPairHandle
;
139 HANDLE RemoteThreadHandle
;
144 PVOID ModuleInformation
;
145 PVOID BackTraceInformation
;
146 PVOID HeapInformation
;
147 PVOID LockInformation
;
149 } DEBUG_BUFFER
, *PDEBUG_BUFFER
;
151 typedef struct _DEBUG_MODULE_INFORMATION
160 USHORT ModuleNameOffset
;
162 } DEBUG_MODULE_INFORMATION
, *PDEBUG_MODULE_INFORMATION
;
164 typedef struct _DEBUG_HEAP_INFORMATION
177 } DEBUG_HEAP_INFORMATION
, *PDEBUG_HEAP_INFORMATION
;
179 typedef struct _DEBUG_LOCK_INFORMATION
183 USHORT CreatorBackTraceIndex
;
186 ULONG ContentionCount
;
188 ULONG RecursionCount
;
189 ULONG NumberOfSharedWaiters
;
190 ULONG NumberOfExclusiveWaiters
;
191 } DEBUG_LOCK_INFORMATION
, *PDEBUG_LOCK_INFORMATION
;
193 typedef struct _RTL_HANDLE_TABLE_ENTRY
196 struct _RTL_HANDLE_TABLE_ENTRY
*NextFree
;
197 } RTL_HANDLE_TABLE_ENTRY
, *PRTL_HANDLE_TABLE_ENTRY
;
199 typedef struct _RTL_HANDLE_TABLE
201 ULONG MaximumNumberOfHandles
;
202 ULONG SizeOfHandleTableEntry
;
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
;
210 typedef struct _LOCK_INFORMATION
213 DEBUG_LOCK_INFORMATION LockEntry
[1];
214 } LOCK_INFORMATION
, *PLOCK_INFORMATION
;
216 typedef struct _HEAP_INFORMATION
219 DEBUG_HEAP_INFORMATION HeapEntry
[1];
220 } HEAP_INFORMATION
, *PHEAP_INFORMATION
;
222 typedef struct _MODULE_INFORMATION
225 DEBUG_MODULE_INFORMATION ModuleEntry
[1];
226 } MODULE_INFORMATION
, *PMODULE_INFORMATION
;
227 /* END REVIEW AREA */
230 typedef struct _EXCEPTION_REGISTRATION
232 struct _EXCEPTION_REGISTRATION
*prev
;
233 PEXCEPTION_HANDLER handler
;
234 } EXCEPTION_REGISTRATION
, *PEXCEPTION_REGISTRATION
;
237 typedef EXCEPTION_REGISTRATION EXCEPTION_REGISTRATION_RECORD
;
238 typedef PEXCEPTION_REGISTRATION PEXCEPTION_REGISTRATION_RECORD
;
240 typedef struct _CURDIR
242 UNICODE_STRING DosPath
;
246 typedef struct RTL_DRIVE_LETTER_CURDIR
251 UNICODE_STRING DosPath
;
252 } RTL_DRIVE_LETTER_CURDIR
, *PRTL_DRIVE_LETTER_CURDIR
;
254 typedef struct _RTL_RANGE_LIST
257 ULONG Flags
; /* RTL_RANGE_LIST_... flags */
260 } RTL_RANGE_LIST
, *PRTL_RANGE_LIST
;
262 typedef struct _RTL_RANGE
269 UCHAR Flags
; /* RTL_RANGE_... flags */
270 } RTL_RANGE
, *PRTL_RANGE
;
273 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
278 typedef struct _RTL_RESOURCE
280 RTL_CRITICAL_SECTION Lock
;
281 HANDLE SharedSemaphore
;
283 HANDLE ExclusiveSemaphore
;
284 ULONG ExclusiveWaiters
;
287 ULONG TimeoutBoost
; /* ?? */
288 PVOID DebugInfo
; /* ?? */
289 } RTL_RESOURCE
, *PRTL_RESOURCE
;
291 typedef struct _RANGE_LIST_ITERATOR
293 PLIST_ENTRY RangeListHead
;
294 PLIST_ENTRY MergedHead
;
297 } RTL_RANGE_LIST_ITERATOR
, *PRTL_RANGE_LIST_ITERATOR
;
299 typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
304 } RTL_MESSAGE_RESOURCE_ENTRY
, *PRTL_MESSAGE_RESOURCE_ENTRY
;
306 typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
310 ULONG OffsetToEntries
;
311 } RTL_MESSAGE_RESOURCE_BLOCK
, *PRTL_MESSAGE_RESOURCE_BLOCK
;
313 typedef struct _RTL_MESSAGE_RESOURCE_DATA
315 ULONG NumberOfBlocks
;
316 RTL_MESSAGE_RESOURCE_BLOCK Blocks
[1];
317 } RTL_MESSAGE_RESOURCE_DATA
, *PRTL_MESSAGE_RESOURCE_DATA
;
319 typedef struct _NLS_FILE_HEADER
323 USHORT MaximumCharacterSize
; /* SBCS = 1, DBCS = 2 */
325 USHORT UniDefaultChar
;
326 USHORT TransDefaultChar
;
327 USHORT TransUniDefaultChar
;
329 UCHAR LeadByte
[MAXIMUM_LEADBYTES
];
330 } NLS_FILE_HEADER
, *PNLS_FILE_HEADER
;
332 typedef struct _RTL_USER_PROCESS_PARAMETERS
338 HANDLE ConsoleHandle
;
340 HANDLE StandardInput
;
341 HANDLE StandardOutput
;
342 HANDLE StandardError
;
343 CURDIR CurrentDirectory
;
344 UNICODE_STRING DllPath
;
345 UNICODE_STRING ImagePathName
;
346 UNICODE_STRING CommandLine
;
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
;
364 typedef struct _RTL_USER_PROCESS_INFORMATION
367 HANDLE ProcessHandle
;
370 SECTION_IMAGE_INFORMATION ImageInformation
;
371 } RTL_USER_PROCESS_INFORMATION
, *PRTL_USER_PROCESS_INFORMATION
;
373 typedef struct _RTL_ATOM_TABLE_ENTRY
375 struct _RTL_ATOM_TABLE_ENTRY
*HashLink
;
378 USHORT ReferenceCount
;
382 } RTL_ATOM_TABLE_ENTRY
, *PRTL_ATOM_TABLE_ENTRY
;
384 typedef struct _RTL_ATOM_TABLE
389 RTL_CRITICAL_SECTION CriticalSection
;
390 FAST_MUTEX FastMutex
;
394 RTL_HANDLE_TABLE RtlHandleTable
;
395 PHANDLE_TABLE ExHandleTable
;
397 ULONG NumberOfBuckets
;
398 PRTL_ATOM_TABLE_ENTRY Buckets
[1];
399 } RTL_ATOM_TABLE
, *PRTL_ATOM_TABLE
;
401 /* Let Kernel Drivers use this */
403 typedef struct _SYSTEMTIME
413 } SYSTEMTIME
, *PSYSTEMTIME
, *LPSYSTEMTIME
;
415 typedef struct _TIME_ZONE_INFORMATION
418 WCHAR StandardName
[32];
419 SYSTEMTIME StandardDate
;
421 WCHAR DaylightName
[32];
422 SYSTEMTIME DaylightDate
;
424 } TIME_ZONE_INFORMATION
, *PTIME_ZONE_INFORMATION
, *LPTIME_ZONE_INFORMATION
;
426 typedef enum _ACL_INFORMATION_CLASS
428 AclRevisionInformation
= 1,
430 } ACL_INFORMATION_CLASS
;
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