-include/ndk/rtltypes.h: add MAX_ATOM_LEN define
[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
14 /* CONSTANTS *****************************************************************/
15 #define MAXIMUM_LEADBYTES 12
16
17 #define PPF_NORMALIZED 0x01
18 #define PPF_PROFILE_USER 0x02
19 #define PPF_PROFILE_SERVER 0x04
20 #define PPF_PROFILE_KERNEL 0x08
21
22 #define PPF_RESERVE_1MB 0x20
23 #define PPF_DISABLE_HEAP_CHECKS 0x100
24 #define PPF_PROCESS_OR_1 0x200
25 #define PPF_PROCESS_OR_2 0x400
26
27 #define PEB_BASE (0x7FFDF000)
28
29 #define EXCEPTION_CHAIN_END ((PEXCEPTION_REGISTRATION_RECORD)-1)
30 #define EXCEPTION_CONTINUE_SEARCH 0
31 #define EXCEPTION_EXECUTE_HANDLER 1
32
33 #define EXCEPTION_UNWINDING 0x02
34 #define EXCEPTION_EXIT_UNWIND 0x04
35 #define EXCEPTION_STACK_INVALID 0x8
36 #define EXCEPTION_NESTED_CALL 0x10
37 #define EXCEPTION_TARGET_UNWIND 0x20
38 #define EXCEPTION_COLLIDED_UNWIND 0x20
39
40 #define EH_NONCONTINUABLE 0x01
41 #define EH_UNWINDING 0x02
42 #define EH_EXIT_UNWIND 0x04
43 #define EH_STACK_INVALID 0x08
44 #define EH_NESTED_CALL 0x10
45
46 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
47 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
48
49 #define RTL_RANGE_SHARED 0x01
50 #define RTL_RANGE_CONFLICT 0x02
51
52 /* Run-Time Library (RTL) Registry Constants */
53 #define RTL_REGISTRY_ABSOLUTE 0
54 #define RTL_REGISTRY_SERVICES 1
55 #define RTL_REGISTRY_CONTROL 2
56 #define RTL_REGISTRY_WINDOWS_NT 3
57 #define RTL_REGISTRY_DEVICEMAP 4
58 #define RTL_REGISTRY_USER 5
59 #define RTL_REGISTRY_MAXIMUM 6
60 #define RTL_REGISTRY_HANDLE 0x40000000
61 #define RTL_REGISTRY_OPTIONAL 0x80000000
62 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
63 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
64 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
65 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
66 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
67 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
68 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
69
70 /* Version Constants */
71 #define VER_MINORVERSION 0x0000001
72 #define VER_MAJORVERSION 0x0000002
73 #define VER_BUILDNUMBER 0x0000004
74 #define VER_PLATFORMID 0x0000008
75 #define VER_SERVICEPACKMINOR 0x0000010
76 #define VER_SERVICEPACKMAJOR 0x0000020
77 #define VER_SUITENAME 0x0000040
78 #define VER_PRODUCT_TYPE 0x0000080
79 #define VER_PLATFORM_WIN32s 0
80 #define VER_PLATFORM_WIN32_WINDOWS 1
81 #define VER_PLATFORM_WIN32_NT 2
82 #define VER_EQUAL 1
83 #define VER_GREATER 2
84 #define VER_GREATER_EQUAL 3
85 #define VER_LESS 4
86 #define VER_LESS_EQUAL 5
87 #define VER_AND 6
88 #define VER_OR 7
89 #define VER_CONDITION_MASK 7
90 #define VER_NUM_BITS_PER_CONDITION_MASK 3
91
92 #define RTL_CRITSECT_TYPE 0
93 #define RTL_RESOURCE_TYPE 1
94
95 #ifdef NTOS_MODE_USER
96 /* RTL String Hash Algorithms */
97 #define HASH_STRING_ALGORITHM_DEFAULT 0
98 #define HASH_STRING_ALGORITHM_X65599 1
99 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
100
101 /* RtlDuplicateString settings */
102 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
103 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
104
105 /* For Size conversion macros */
106 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
107 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
108 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
109
110 #define MAX_ATOM_LEN 255 /* TCHARS not including nullterm */
111
112 /* List Macros */
113 static __inline
114 VOID
115 InitializeListHead(
116 IN PLIST_ENTRY ListHead)
117 {
118 ListHead->Flink = ListHead->Blink = ListHead;
119 }
120
121 static __inline
122 VOID
123 InsertHeadList(
124 IN PLIST_ENTRY ListHead,
125 IN PLIST_ENTRY Entry)
126 {
127 PLIST_ENTRY OldFlink;
128 OldFlink = ListHead->Flink;
129 Entry->Flink = OldFlink;
130 Entry->Blink = ListHead;
131 OldFlink->Blink = Entry;
132 ListHead->Flink = Entry;
133 }
134
135 static __inline
136 VOID
137 InsertTailList(
138 IN PLIST_ENTRY ListHead,
139 IN PLIST_ENTRY Entry)
140 {
141 PLIST_ENTRY OldBlink;
142 OldBlink = ListHead->Blink;
143 Entry->Flink = ListHead;
144 Entry->Blink = OldBlink;
145 OldBlink->Flink = Entry;
146 ListHead->Blink = Entry;
147 }
148
149 #define IsListEmpty(ListHead) \
150 ((ListHead)->Flink == (ListHead))
151
152 #define PopEntryList(ListHead) \
153 (ListHead)->Next; \
154 { \
155 PSINGLE_LIST_ENTRY _FirstEntry; \
156 _FirstEntry = (ListHead)->Next; \
157 if (_FirstEntry != NULL) \
158 (ListHead)->Next = _FirstEntry->Next; \
159 }
160
161 #define PushEntryList(_ListHead, _Entry) \
162 (_Entry)->Next = (_ListHead)->Next; \
163 (_ListHead)->Next = (_Entry); \
164
165 static __inline
166 BOOLEAN
167 RemoveEntryList(
168 IN PLIST_ENTRY Entry)
169 {
170 PLIST_ENTRY OldFlink;
171 PLIST_ENTRY OldBlink;
172
173 OldFlink = Entry->Flink;
174 OldBlink = Entry->Blink;
175 OldFlink->Blink = OldBlink;
176 OldBlink->Flink = OldFlink;
177 return (OldFlink == OldBlink);
178 }
179
180 static __inline
181 PLIST_ENTRY
182 RemoveHeadList(
183 IN PLIST_ENTRY ListHead)
184 {
185 PLIST_ENTRY Flink;
186 PLIST_ENTRY Entry;
187
188 Entry = ListHead->Flink;
189 Flink = Entry->Flink;
190 ListHead->Flink = Flink;
191 Flink->Blink = ListHead;
192 return Entry;
193 }
194
195 static __inline
196 PLIST_ENTRY
197 RemoveTailList(
198 IN PLIST_ENTRY ListHead)
199 {
200 PLIST_ENTRY Blink;
201 PLIST_ENTRY Entry;
202
203 Entry = ListHead->Blink;
204 Blink = Entry->Blink;
205 ListHead->Blink = Blink;
206 Blink->Flink = ListHead;
207 return Entry;
208 }
209
210 #define IsFirstEntry(ListHead, Entry) \
211 ((ListHead)->Flink == Entry)
212
213 #define IsLastEntry(ListHead, Entry) \
214 ((ListHead)->Blink == Entry)
215
216 /*
217 * Constant String Macro
218 */
219 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
220 { \
221 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
222 sizeof(__SOURCE_STRING__), \
223 (__SOURCE_STRING__) \
224 }
225
226 #define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \
227 ((L1)->LowPart == (L2)->LowPart))
228 #endif
229
230 /* FIXME: Rename these */
231 #define PDI_MODULES 0x01 /* The loaded modules of the process */
232 #define PDI_BACKTRACE 0x02 /* The heap stack back traces */
233 #define PDI_HEAPS 0x04 /* The heaps of the process */
234 #define PDI_HEAP_TAGS 0x08 /* The heap tags */
235 #define PDI_HEAP_BLOCKS 0x10 /* The heap blocks */
236 #define PDI_LOCKS 0x20 /* The locks created by the process */
237
238 /* RTL Handle Flags */
239 #define RTL_HANDLE_VALID 0x1
240
241 /* RTL Atom Flags */
242 #define RTL_ATOM_IS_PINNED 0x1
243
244 /* EXPORTED DATA *************************************************************/
245 #ifdef NTOS_MODE_USER
246 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG;
247 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
248 #endif
249
250 /* ENUMERATIONS **************************************************************/
251
252 #ifdef NTOS_MODE_USER
253 typedef enum _TABLE_SEARCH_RESULT
254 {
255 TableEmptyTree,
256 TableFoundNode,
257 TableInsertAsLeft,
258 TableInsertAsRight
259 } TABLE_SEARCH_RESULT;
260
261 typedef enum _RTL_GENERIC_COMPARE_RESULTS
262 {
263 GenericLessThan,
264 GenericGreaterThan,
265 GenericEqual
266 } RTL_GENERIC_COMPARE_RESULTS;
267 #endif
268
269 typedef enum
270 {
271 INVALID_PATH = 0,
272 UNC_PATH, /* "//foo" */
273 ABSOLUTE_DRIVE_PATH, /* "c:/foo" */
274 RELATIVE_DRIVE_PATH, /* "c:foo" */
275 ABSOLUTE_PATH, /* "/foo" */
276 RELATIVE_PATH, /* "foo" */
277 DEVICE_PATH, /* "//./foo" */
278 UNC_DOT_PATH /* "//." */
279 } DOS_PATHNAME_TYPE;
280
281 /* FUNCTION TYPES ************************************************************/
282 #ifndef NTOS_MODE_USER
283 typedef VOID (NTAPI *WAITORTIMERCALLBACKFUNC)(PVOID, BOOLEAN);
284 #endif
285
286 struct _RTL_AVL_TABLE;
287 struct _RTL_GENERIC_TABLE;
288 struct _RTL_RANGE;
289
290 typedef NTSTATUS
291 (*PHEAP_ENUMERATION_ROUTINE)(
292 IN PVOID HeapHandle,
293 IN PVOID UserParam
294 );
295
296 typedef EXCEPTION_DISPOSITION
297 (NTAPI *PEXCEPTION_ROUTINE)(
298 IN struct _EXCEPTION_RECORD *ExceptionRecord,
299 IN PVOID EstablisherFrame,
300 IN OUT struct _CONTEXT *ContextRecord,
301 IN OUT PVOID DispatcherContext
302 );
303
304 typedef LONG (NTAPI *PVECTORED_EXCEPTION_HANDLER)(
305 PEXCEPTION_POINTERS ExceptionPointers
306 );
307
308 typedef ULONG (NTAPI *PTHREAD_START_ROUTINE)(
309 PVOID Parameter
310 );
311
312 typedef VOID
313 (NTAPI *PRTL_BASE_PROCESS_START_ROUTINE)(
314 PTHREAD_START_ROUTINE StartAddress,
315 PVOID Parameter
316 );
317
318 typedef NTSTATUS
319 (NTAPI *PRTL_AVL_MATCH_FUNCTION)(
320 struct _RTL_AVL_TABLE *Table,
321 PVOID UserData,
322 PVOID MatchData
323 );
324
325 typedef RTL_GENERIC_COMPARE_RESULTS
326 (NTAPI *PRTL_AVL_COMPARE_ROUTINE) (
327 struct _RTL_AVL_TABLE *Table,
328 PVOID FirstStruct,
329 PVOID SecondStruct
330 );
331
332 typedef RTL_GENERIC_COMPARE_RESULTS
333 (NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
334 struct _RTL_GENERIC_TABLE *Table,
335 PVOID FirstStruct,
336 PVOID SecondStruct
337 );
338
339 typedef PVOID
340 (NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
341 struct _RTL_GENERIC_TABLE *Table,
342 CLONG ByteSize
343 );
344
345 typedef VOID
346 (NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
347 struct _RTL_GENERIC_TABLE *Table,
348 PVOID Buffer
349 );
350
351 typedef PVOID
352 (NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
353 struct _RTL_AVL_TABLE *Table,
354 CLONG ByteSize
355 );
356
357 typedef VOID
358 (NTAPI *PRTL_AVL_FREE_ROUTINE) (
359 struct _RTL_AVL_TABLE *Table,
360 PVOID Buffer
361 );
362
363 typedef NTSTATUS
364 (NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
365 IN PWSTR ValueName,
366 IN ULONG ValueType,
367 IN PVOID ValueData,
368 IN ULONG ValueLength,
369 IN PVOID Context,
370 IN PVOID EntryContext
371 );
372
373 typedef NTSTATUS
374 (NTAPI * PRTL_HEAP_COMMIT_ROUTINE)(
375 IN PVOID Base,
376 IN OUT PVOID *CommitAddress,
377 IN OUT PSIZE_T CommitSize
378 );
379
380 #ifdef NTOS_MODE_USER
381 typedef BOOLEAN
382 (NTAPI *PRTL_CONFLICT_RANGE_CALLBACK) (
383 PVOID Context,
384 struct _RTL_RANGE *Range
385 );
386 #endif
387
388 /* TYPES *********************************************************************/
389
390 #ifdef NTOS_MODE_USER
391 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW;
392 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW;
393 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW;
394 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW;
395
396 typedef struct _RTL_HEAP_PARAMETERS
397 {
398 ULONG Length;
399 SIZE_T SegmentReserve;
400 SIZE_T SegmentCommit;
401 SIZE_T DeCommitFreeBlockThreshold;
402 SIZE_T DeCommitTotalFreeThreshold;
403 SIZE_T MaximumAllocationSize;
404 SIZE_T VirtualMemoryThreshold;
405 SIZE_T InitialCommit;
406 SIZE_T InitialReserve;
407 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
408 SIZE_T Reserved[2];
409 } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
410
411 typedef struct _RTL_BITMAP
412 {
413 ULONG SizeOfBitMap;
414 PULONG Buffer;
415 } RTL_BITMAP, *PRTL_BITMAP;
416
417 typedef struct _RTL_BITMAP_RUN
418 {
419 ULONG StartingIndex;
420 ULONG NumberOfBits;
421 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
422
423 typedef struct _COMPRESSED_DATA_INFO
424 {
425 USHORT CompressionFormatAndEngine;
426 UCHAR CompressionUnitShift;
427 UCHAR ChunkShift;
428 UCHAR ClusterShift;
429 UCHAR Reserved;
430 USHORT NumberOfChunks;
431 ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
432 } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
433
434 typedef struct _GENERATE_NAME_CONTEXT
435 {
436 USHORT Checksum;
437 BOOLEAN CheckSumInserted;
438 UCHAR NameLength;
439 WCHAR NameBuffer[8];
440 ULONG ExtensionLength;
441 WCHAR ExtensionBuffer[4];
442 ULONG LastIndexValue;
443 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
444
445 typedef struct _RTL_SPLAY_LINKS
446 {
447 struct _RTL_SPLAY_LINKS *Parent;
448 struct _RTL_SPLAY_LINKS *LeftChild;
449 struct _RTL_SPLAY_LINKS *RightChild;
450 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
451
452 typedef ACL_REVISION_INFORMATION *PACL_REVISION_INFORMATION;
453 typedef ACL_SIZE_INFORMATION *PACL_SIZE_INFORMATION;
454
455 typedef struct _RTL_GENERIC_TABLE
456 {
457 PRTL_SPLAY_LINKS TableRoot;
458 LIST_ENTRY InsertOrderList;
459 PLIST_ENTRY OrderedPointer;
460 ULONG WhichOrderedElement;
461 ULONG NumberGenericTableElements;
462 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
463 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
464 PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
465 PVOID TableContext;
466 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
467
468 typedef struct _RTL_BALANCED_LINKS
469 {
470 struct _RTL_BALANCED_LINKS *Parent;
471 struct _RTL_BALANCED_LINKS *LeftChild;
472 struct _RTL_BALANCED_LINKS *RightChild;
473 CHAR Balance;
474 UCHAR Reserved[3];
475 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
476
477 typedef struct _RTL_AVL_TABLE
478 {
479 RTL_BALANCED_LINKS BalancedRoot;
480 PVOID OrderedPointer;
481 ULONG WhichOrderedElement;
482 ULONG NumberGenericTableElements;
483 ULONG DepthOfTree;
484 PRTL_BALANCED_LINKS RestartKey;
485 ULONG DeleteCount;
486 PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
487 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
488 PRTL_AVL_FREE_ROUTINE FreeRoutine;
489 PVOID TableContext;
490 } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
491
492 typedef struct _RTL_QUERY_REGISTRY_TABLE
493 {
494 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
495 ULONG Flags;
496 PWSTR Name;
497 PVOID EntryContext;
498 ULONG DefaultType;
499 PVOID DefaultData;
500 ULONG DefaultLength;
501 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
502
503 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
504 {
505 CSHORT NodeTypeCode;
506 CSHORT NameLength;
507 struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
508 struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
509 RTL_SPLAY_LINKS Links;
510 PUNICODE_STRING Prefix;
511 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
512
513 typedef struct _UNICODE_PREFIX_TABLE
514 {
515 CSHORT NodeTypeCode;
516 CSHORT NameLength;
517 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
518 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
519 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
520
521 typedef struct _TIME_FIELDS
522 {
523 CSHORT Year;
524 CSHORT Month;
525 CSHORT Day;
526 CSHORT Hour;
527 CSHORT Minute;
528 CSHORT Second;
529 CSHORT Milliseconds;
530 CSHORT Weekday;
531 } TIME_FIELDS, *PTIME_FIELDS;
532 #endif
533
534 typedef struct _ACE
535 {
536 ACE_HEADER Header;
537 ACCESS_MASK AccessMask;
538 } ACE, *PACE;
539
540 /* FIXME: Review definitions and give these guys a better name */
541 typedef struct _DEBUG_BUFFER
542 {
543 HANDLE SectionHandle;
544 PVOID SectionBase;
545 PVOID RemoteSectionBase;
546 ULONG SectionBaseDelta;
547 HANDLE EventPairHandle;
548 ULONG Unknown[2];
549 HANDLE RemoteThreadHandle;
550 ULONG InfoClassMask;
551 ULONG SizeOfInfo;
552 ULONG AllocatedSize;
553 ULONG SectionSize;
554 PVOID ModuleInformation;
555 PVOID BackTraceInformation;
556 PVOID HeapInformation;
557 PVOID LockInformation;
558 PVOID Reserved[8];
559 } DEBUG_BUFFER, *PDEBUG_BUFFER;
560
561 typedef struct _DEBUG_MODULE_INFORMATION
562 {
563 ULONG Reserved[2];
564 PVOID Base;
565 ULONG Size;
566 ULONG Flags;
567 USHORT Index;
568 USHORT Unknown;
569 USHORT LoadCount;
570 USHORT ModuleNameOffset;
571 CHAR ImageName[256];
572 } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
573
574 typedef struct _DEBUG_HEAP_INFORMATION
575 {
576 PVOID Base;
577 ULONG Flags;
578 USHORT Granularity;
579 USHORT Unknown;
580 ULONG Allocated;
581 ULONG Committed;
582 ULONG TagCount;
583 ULONG BlockCount;
584 ULONG Reserved[7];
585 PVOID Tags;
586 PVOID Blocks;
587 } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
588
589 typedef struct _DEBUG_LOCK_INFORMATION
590 {
591 PVOID Address;
592 USHORT Type;
593 USHORT CreatorBackTraceIndex;
594 ULONG OwnerThreadId;
595 ULONG ActiveCount;
596 ULONG ContentionCount;
597 ULONG EntryCount;
598 ULONG RecursionCount;
599 ULONG NumberOfSharedWaiters;
600 ULONG NumberOfExclusiveWaiters;
601 } DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
602
603 typedef struct _RTL_HANDLE_TABLE_ENTRY
604 {
605 ULONG Flags;
606 struct _RTL_HANDLE_TABLE_ENTRY *NextFree;
607 } RTL_HANDLE_TABLE_ENTRY, *PRTL_HANDLE_TABLE_ENTRY;
608
609 typedef struct _RTL_HANDLE_TABLE
610 {
611 ULONG MaximumNumberOfHandles;
612 ULONG SizeOfHandleTableEntry;
613 ULONG Reserved[2];
614 PRTL_HANDLE_TABLE_ENTRY FreeHandles;
615 PRTL_HANDLE_TABLE_ENTRY CommittedHandles;
616 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles;
617 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles;
618 } RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
619
620 typedef struct _LOCK_INFORMATION
621 {
622 ULONG LockCount;
623 DEBUG_LOCK_INFORMATION LockEntry[1];
624 } LOCK_INFORMATION, *PLOCK_INFORMATION;
625
626 typedef struct _HEAP_INFORMATION
627 {
628 ULONG HeapCount;
629 DEBUG_HEAP_INFORMATION HeapEntry[1];
630 } HEAP_INFORMATION, *PHEAP_INFORMATION;
631
632 typedef struct _MODULE_INFORMATION
633 {
634 ULONG ModuleCount;
635 DEBUG_MODULE_INFORMATION ModuleEntry[1];
636 } MODULE_INFORMATION, *PMODULE_INFORMATION;
637 /* END REVIEW AREA */
638
639 typedef struct _EXCEPTION_REGISTRATION_RECORD
640 {
641 struct _EXCEPTION_REGISTRATION_RECORD *Next;
642 PEXCEPTION_HANDLER Handler;
643 } EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
644
645 typedef struct _CURDIR
646 {
647 UNICODE_STRING DosPath;
648 HANDLE Handle;
649 } CURDIR, *PCURDIR;
650
651 typedef struct RTL_DRIVE_LETTER_CURDIR
652 {
653 USHORT Flags;
654 USHORT Length;
655 ULONG TimeStamp;
656 UNICODE_STRING DosPath;
657 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
658
659 #ifndef NTOS_MODE_USER
660 typedef struct _RTL_CRITICAL_SECTION_DEBUG
661 {
662 USHORT Type;
663 USHORT CreatorBackTraceIndex;
664 struct _RTL_CRITICAL_SECTION *CriticalSection;
665 LIST_ENTRY ProcessLocksList;
666 ULONG EntryCount;
667 ULONG ContentionCount;
668 ULONG Spare[2];
669 } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
670
671 typedef struct _RTL_CRITICAL_SECTION
672 {
673 PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
674 LONG LockCount;
675 LONG RecursionCount;
676 HANDLE OwningThread;
677 HANDLE LockSemaphore;
678 ULONG_PTR SpinCount;
679 } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
680 #endif
681
682 #ifdef NTOS_MODE_USER
683 typedef struct _RTL_RANGE_LIST
684 {
685 LIST_ENTRY ListHead;
686 ULONG Flags; /* RTL_RANGE_LIST_... flags */
687 ULONG Count;
688 ULONG Stamp;
689 } RTL_RANGE_LIST, *PRTL_RANGE_LIST;
690
691 typedef struct _RTL_RANGE
692 {
693 ULONGLONG Start;
694 ULONGLONG End;
695 PVOID UserData;
696 PVOID Owner;
697 UCHAR Attributes;
698 UCHAR Flags; /* RTL_RANGE_... flags */
699 } RTL_RANGE, *PRTL_RANGE;
700
701 typedef struct _RANGE_LIST_ITERATOR
702 {
703 PLIST_ENTRY RangeListHead;
704 PLIST_ENTRY MergedHead;
705 PVOID Current;
706 ULONG Stamp;
707 } RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
708
709 #endif
710
711 typedef struct _RTL_RESOURCE
712 {
713 RTL_CRITICAL_SECTION Lock;
714 HANDLE SharedSemaphore;
715 ULONG SharedWaiters;
716 HANDLE ExclusiveSemaphore;
717 ULONG ExclusiveWaiters;
718 LONG NumberActive;
719 HANDLE OwningThread;
720 ULONG TimeoutBoost; /* ?? */
721 PVOID DebugInfo; /* ?? */
722 } RTL_RESOURCE, *PRTL_RESOURCE;
723
724 typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
725 {
726 USHORT Length;
727 USHORT Flags;
728 CHAR Text[1];
729 } RTL_MESSAGE_RESOURCE_ENTRY, *PRTL_MESSAGE_RESOURCE_ENTRY;
730
731 typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
732 {
733 ULONG LowId;
734 ULONG HighId;
735 ULONG OffsetToEntries;
736 } RTL_MESSAGE_RESOURCE_BLOCK, *PRTL_MESSAGE_RESOURCE_BLOCK;
737
738 typedef struct _RTL_MESSAGE_RESOURCE_DATA
739 {
740 ULONG NumberOfBlocks;
741 RTL_MESSAGE_RESOURCE_BLOCK Blocks[1];
742 } RTL_MESSAGE_RESOURCE_DATA, *PRTL_MESSAGE_RESOURCE_DATA;
743
744 typedef struct _NLS_FILE_HEADER
745 {
746 USHORT HeaderSize;
747 USHORT CodePage;
748 USHORT MaximumCharacterSize; /* SBCS = 1, DBCS = 2 */
749 USHORT DefaultChar;
750 USHORT UniDefaultChar;
751 USHORT TransDefaultChar;
752 USHORT TransUniDefaultChar;
753 USHORT DBCSCodePage;
754 UCHAR LeadByte[MAXIMUM_LEADBYTES];
755 } NLS_FILE_HEADER, *PNLS_FILE_HEADER;
756
757 typedef struct _RTL_USER_PROCESS_PARAMETERS
758 {
759 ULONG MaximumLength;
760 ULONG Length;
761 ULONG Flags;
762 ULONG DebugFlags;
763 HANDLE ConsoleHandle;
764 ULONG ConsoleFlags;
765 HANDLE StandardInput;
766 HANDLE StandardOutput;
767 HANDLE StandardError;
768 CURDIR CurrentDirectory;
769 UNICODE_STRING DllPath;
770 UNICODE_STRING ImagePathName;
771 UNICODE_STRING CommandLine;
772 PWSTR Environment;
773 ULONG StartingX;
774 ULONG StartingY;
775 ULONG CountX;
776 ULONG CountY;
777 ULONG CountCharsX;
778 ULONG CountCharsY;
779 ULONG FillAttribute;
780 ULONG WindowFlags;
781 ULONG ShowWindowFlags;
782 UNICODE_STRING WindowTitle;
783 UNICODE_STRING DesktopInfo;
784 UNICODE_STRING ShellInfo;
785 UNICODE_STRING RuntimeData;
786 RTL_DRIVE_LETTER_CURDIR CurrentDirectories[32];
787 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
788
789 typedef struct _RTL_USER_PROCESS_INFORMATION
790 {
791 ULONG Size;
792 HANDLE ProcessHandle;
793 HANDLE ThreadHandle;
794 CLIENT_ID ClientId;
795 SECTION_IMAGE_INFORMATION ImageInformation;
796 } RTL_USER_PROCESS_INFORMATION, *PRTL_USER_PROCESS_INFORMATION;
797
798 typedef struct _RTL_ATOM_TABLE_ENTRY
799 {
800 struct _RTL_ATOM_TABLE_ENTRY *HashLink;
801 USHORT HandleIndex;
802 USHORT Atom;
803 USHORT ReferenceCount;
804 UCHAR Flags;
805 UCHAR NameLength;
806 WCHAR Name[1];
807 } RTL_ATOM_TABLE_ENTRY, *PRTL_ATOM_TABLE_ENTRY;
808
809 #ifdef NTOS_MODE_USER
810 typedef RTL_CRITICAL_SECTION FAST_MUTEX;
811 typedef RTL_HANDLE_TABLE HANDLE_TABLE, *PHANDLE_TABLE;
812 #endif
813 typedef struct _RTL_ATOM_TABLE
814 {
815 ULONG Signature;
816 union
817 {
818 RTL_CRITICAL_SECTION CriticalSection;
819 FAST_MUTEX FastMutex;
820 };
821 union
822 {
823 RTL_HANDLE_TABLE RtlHandleTable;
824 PHANDLE_TABLE ExHandleTable;
825 };
826 ULONG NumberOfBuckets;
827 PRTL_ATOM_TABLE_ENTRY Buckets[1];
828 } RTL_ATOM_TABLE, *PRTL_ATOM_TABLE;
829
830 #ifndef NTOS_MODE_USER
831
832 typedef struct _SYSTEMTIME
833 {
834 USHORT wYear;
835 USHORT wMonth;
836 USHORT wDayOfWeek;
837 USHORT wDay;
838 USHORT wHour;
839 USHORT wMinute;
840 USHORT wSecond;
841 USHORT wMilliseconds;
842 } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
843
844 typedef struct _TIME_ZONE_INFORMATION
845 {
846 LONG Bias;
847 WCHAR StandardName[32];
848 SYSTEMTIME StandardDate;
849 LONG StandardBias;
850 WCHAR DaylightName[32];
851 SYSTEMTIME DaylightDate;
852 LONG DaylightBias;
853 } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
854
855 typedef enum _ACL_INFORMATION_CLASS
856 {
857 AclRevisionInformation = 1,
858 AclSizeInformation
859 } ACL_INFORMATION_CLASS;
860
861 #define TIME_ZONE_ID_UNKNOWN 0
862 #define TIME_ZONE_ID_STANDARD 1
863 #define TIME_ZONE_ID_DAYLIGHT 2
864 #define TIME_ZONE_ID_INVALID 0xFFFFFFFF
865 #endif
866
867 #endif