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
,
114 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
) (
116 IN OUT PVOID
*CommitAddress
,
117 IN OUT PSIZE_T CommitSize
121 /* TYPES *********************************************************************/
123 typedef unsigned short RTL_ATOM
;
124 typedef unsigned short *PRTL_ATOM
;
126 typedef ACL_REVISION_INFORMATION
*PACL_REVISION_INFORMATION
;
127 typedef ACL_SIZE_INFORMATION
*PACL_SIZE_INFORMATION
;
131 ACCESS_MASK AccessMask
;
134 /* FIXME: Review definitions and give these guys a better name */
135 typedef struct _DEBUG_BUFFER
137 HANDLE SectionHandle
;
139 PVOID RemoteSectionBase
;
140 ULONG SectionBaseDelta
;
141 HANDLE EventPairHandle
;
143 HANDLE RemoteThreadHandle
;
148 PVOID ModuleInformation
;
149 PVOID BackTraceInformation
;
150 PVOID HeapInformation
;
151 PVOID LockInformation
;
153 } DEBUG_BUFFER
, *PDEBUG_BUFFER
;
155 typedef struct _DEBUG_MODULE_INFORMATION
164 USHORT ModuleNameOffset
;
166 } DEBUG_MODULE_INFORMATION
, *PDEBUG_MODULE_INFORMATION
;
168 typedef struct _DEBUG_HEAP_INFORMATION
181 } DEBUG_HEAP_INFORMATION
, *PDEBUG_HEAP_INFORMATION
;
183 typedef struct _DEBUG_LOCK_INFORMATION
187 USHORT CreatorBackTraceIndex
;
190 ULONG ContentionCount
;
192 ULONG RecursionCount
;
193 ULONG NumberOfSharedWaiters
;
194 ULONG NumberOfExclusiveWaiters
;
195 } DEBUG_LOCK_INFORMATION
, *PDEBUG_LOCK_INFORMATION
;
197 typedef struct _RTL_HANDLE_TABLE_ENTRY
200 struct _RTL_HANDLE_TABLE_ENTRY
*NextFree
;
201 } RTL_HANDLE_TABLE_ENTRY
, *PRTL_HANDLE_TABLE_ENTRY
;
203 typedef struct _RTL_HANDLE_TABLE
205 ULONG MaximumNumberOfHandles
;
206 ULONG SizeOfHandleTableEntry
;
208 PRTL_HANDLE_TABLE_ENTRY FreeHandles
;
209 PRTL_HANDLE_TABLE_ENTRY CommittedHandles
;
210 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles
;
211 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles
;
212 } RTL_HANDLE_TABLE
, *PRTL_HANDLE_TABLE
;
214 typedef struct _LOCK_INFORMATION
217 DEBUG_LOCK_INFORMATION LockEntry
[1];
218 } LOCK_INFORMATION
, *PLOCK_INFORMATION
;
220 typedef struct _HEAP_INFORMATION
223 DEBUG_HEAP_INFORMATION HeapEntry
[1];
224 } HEAP_INFORMATION
, *PHEAP_INFORMATION
;
226 typedef struct _MODULE_INFORMATION
229 DEBUG_MODULE_INFORMATION ModuleEntry
[1];
230 } MODULE_INFORMATION
, *PMODULE_INFORMATION
;
231 /* END REVIEW AREA */
234 typedef struct _EXCEPTION_REGISTRATION
236 struct _EXCEPTION_REGISTRATION
*prev
;
237 PEXCEPTION_HANDLER handler
;
238 } EXCEPTION_REGISTRATION
, *PEXCEPTION_REGISTRATION
;
241 typedef EXCEPTION_REGISTRATION EXCEPTION_REGISTRATION_RECORD
;
242 typedef PEXCEPTION_REGISTRATION PEXCEPTION_REGISTRATION_RECORD
;
244 typedef struct _CURDIR
246 UNICODE_STRING DosPath
;
250 typedef struct RTL_DRIVE_LETTER_CURDIR
255 UNICODE_STRING DosPath
;
256 } RTL_DRIVE_LETTER_CURDIR
, *PRTL_DRIVE_LETTER_CURDIR
;
258 typedef struct _RTL_RANGE_LIST
261 ULONG Flags
; /* RTL_RANGE_LIST_... flags */
264 } RTL_RANGE_LIST
, *PRTL_RANGE_LIST
;
266 typedef struct _RTL_RANGE
273 UCHAR Flags
; /* RTL_RANGE_... flags */
274 } RTL_RANGE
, *PRTL_RANGE
;
277 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
) (
282 typedef struct _RTL_RESOURCE
284 RTL_CRITICAL_SECTION Lock
;
285 HANDLE SharedSemaphore
;
287 HANDLE ExclusiveSemaphore
;
288 ULONG ExclusiveWaiters
;
291 ULONG TimeoutBoost
; /* ?? */
292 PVOID DebugInfo
; /* ?? */
293 } RTL_RESOURCE
, *PRTL_RESOURCE
;
295 typedef struct _RANGE_LIST_ITERATOR
297 PLIST_ENTRY RangeListHead
;
298 PLIST_ENTRY MergedHead
;
301 } RTL_RANGE_LIST_ITERATOR
, *PRTL_RANGE_LIST_ITERATOR
;
303 typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
308 } RTL_MESSAGE_RESOURCE_ENTRY
, *PRTL_MESSAGE_RESOURCE_ENTRY
;
310 typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
314 ULONG OffsetToEntries
;
315 } RTL_MESSAGE_RESOURCE_BLOCK
, *PRTL_MESSAGE_RESOURCE_BLOCK
;
317 typedef struct _RTL_MESSAGE_RESOURCE_DATA
319 ULONG NumberOfBlocks
;
320 RTL_MESSAGE_RESOURCE_BLOCK Blocks
[1];
321 } RTL_MESSAGE_RESOURCE_DATA
, *PRTL_MESSAGE_RESOURCE_DATA
;
323 typedef struct _NLS_FILE_HEADER
327 USHORT MaximumCharacterSize
; /* SBCS = 1, DBCS = 2 */
329 USHORT UniDefaultChar
;
330 USHORT TransDefaultChar
;
331 USHORT TransUniDefaultChar
;
333 UCHAR LeadByte
[MAXIMUM_LEADBYTES
];
334 } NLS_FILE_HEADER
, *PNLS_FILE_HEADER
;
336 typedef struct _RTL_USER_PROCESS_PARAMETERS
342 HANDLE ConsoleHandle
;
344 HANDLE StandardInput
;
345 HANDLE StandardOutput
;
346 HANDLE StandardError
;
347 CURDIR CurrentDirectory
;
348 UNICODE_STRING DllPath
;
349 UNICODE_STRING ImagePathName
;
350 UNICODE_STRING CommandLine
;
360 ULONG ShowWindowFlags
;
361 UNICODE_STRING WindowTitle
;
362 UNICODE_STRING DesktopInfo
;
363 UNICODE_STRING ShellInfo
;
364 UNICODE_STRING RuntimeData
;
365 RTL_DRIVE_LETTER_CURDIR CurrentDirectories
[32];
366 } RTL_USER_PROCESS_PARAMETERS
, *PRTL_USER_PROCESS_PARAMETERS
;
368 typedef struct _RTL_USER_PROCESS_INFORMATION
371 HANDLE ProcessHandle
;
374 SECTION_IMAGE_INFORMATION ImageInformation
;
375 } RTL_USER_PROCESS_INFORMATION
, *PRTL_USER_PROCESS_INFORMATION
;
377 typedef struct _RTL_ATOM_TABLE_ENTRY
379 struct _RTL_ATOM_TABLE_ENTRY
*HashLink
;
382 USHORT ReferenceCount
;
386 } RTL_ATOM_TABLE_ENTRY
, *PRTL_ATOM_TABLE_ENTRY
;
388 typedef struct _RTL_ATOM_TABLE
393 RTL_CRITICAL_SECTION CriticalSection
;
394 FAST_MUTEX FastMutex
;
398 RTL_HANDLE_TABLE RtlHandleTable
;
399 PHANDLE_TABLE ExHandleTable
;
401 ULONG NumberOfBuckets
;
402 PRTL_ATOM_TABLE_ENTRY Buckets
[1];
403 } RTL_ATOM_TABLE
, *PRTL_ATOM_TABLE
;
406 typedef struct _RTL_HEAP_PARAMETERS
{
408 SIZE_T SegmentReserve
;
409 SIZE_T SegmentCommit
;
410 SIZE_T DeCommitFreeBlockThreshold
;
411 SIZE_T DeCommitTotalFreeThreshold
;
412 SIZE_T MaximumAllocationSize
;
413 SIZE_T VirtualMemoryThreshold
;
414 SIZE_T InitialCommit
;
415 SIZE_T InitialReserve
;
416 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
418 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
421 /* Let Kernel Drivers use this */
423 typedef struct _SYSTEMTIME
433 } SYSTEMTIME
, *PSYSTEMTIME
, *LPSYSTEMTIME
;
435 typedef struct _TIME_ZONE_INFORMATION
438 WCHAR StandardName
[32];
439 SYSTEMTIME StandardDate
;
441 WCHAR DaylightName
[32];
442 SYSTEMTIME DaylightDate
;
444 } TIME_ZONE_INFORMATION
, *PTIME_ZONE_INFORMATION
, *LPTIME_ZONE_INFORMATION
;
446 typedef enum _ACL_INFORMATION_CLASS
448 AclRevisionInformation
= 1,
450 } ACL_INFORMATION_CLASS
;
452 #define TIME_ZONE_ID_UNKNOWN 0
453 #define TIME_ZONE_ID_STANDARD 1
454 #define TIME_ZONE_ID_DAYLIGHT 2
455 #define TIME_ZONE_ID_INVALID 0xFFFFFFFF