- New ERESOURCE implementation: fixes the return value of some functions (VOID vs...
[reactos.git] / reactos / include / ndk / rtltypes.h
1 /*++ NDK Version: 0095
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 rtltypes.h
8
9 Abstract:
10
11 Type definitions for the Run-Time Library
12
13 Author:
14
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
16
17 --*/
18
19 #ifndef _RTLTYPES_H
20 #define _RTLTYPES_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26 #include <pstypes.h>
27
28 //
29 // Maximum Atom Length
30 //
31 #define RTL_MAXIMUM_ATOM_LENGTH 255
32
33 //
34 // Process Parameters Flags
35 //
36 #define RTL_USER_PROCESS_PARAMETERS_NORMALIZED 0x01
37 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_USER 0x02
38 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_SERVER 0x04
39 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_KERNEL 0x08
40 #define RTL_USER_PROCESS_PARAMETERS_UNKNOWN 0x10
41 #define RTL_USER_PROCESS_PARAMETERS_RESERVE_1MB 0x20
42 #define RTL_USER_PROCESS_PARAMETERS_DISABLE_HEAP_CHECKS 0x100
43 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_1 0x200
44 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_2 0x400
45
46 //
47 // Exception Flags
48 //
49 #define EXCEPTION_CHAIN_END ((PEXCEPTION_REGISTRATION_RECORD)-1)
50 #define EXCEPTION_UNWINDING 0x02
51 #define EXCEPTION_EXIT_UNWIND 0x04
52 #define EXCEPTION_STACK_INVALID 0x08
53 #define EXCEPTION_NESTED_CALL 0x10
54 #define EXCEPTION_TARGET_UNWIND 0x20
55 #define EXCEPTION_COLLIDED_UNWIND 0x20
56
57 //
58 // Range and Range List Flags
59 //
60 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
61 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
62
63 #define RTL_RANGE_SHARED 0x01
64 #define RTL_RANGE_CONFLICT 0x02
65
66 //
67 // Registry Keys
68 //
69 #define RTL_REGISTRY_ABSOLUTE 0
70 #define RTL_REGISTRY_SERVICES 1
71 #define RTL_REGISTRY_CONTROL 2
72 #define RTL_REGISTRY_WINDOWS_NT 3
73 #define RTL_REGISTRY_DEVICEMAP 4
74 #define RTL_REGISTRY_USER 5
75 #define RTL_REGISTRY_MAXIMUM 6
76 #define RTL_REGISTRY_HANDLE 0x40000000
77 #define RTL_REGISTRY_OPTIONAL 0x80000000
78 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
79 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
80 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
81 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
82 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
83 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
84 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
85
86 //
87 // Versioning
88 //
89 #define VER_MINORVERSION 0x0000001
90 #define VER_MAJORVERSION 0x0000002
91 #define VER_BUILDNUMBER 0x0000004
92 #define VER_PLATFORMID 0x0000008
93 #define VER_SERVICEPACKMINOR 0x0000010
94 #define VER_SERVICEPACKMAJOR 0x0000020
95 #define VER_SUITENAME 0x0000040
96 #define VER_PRODUCT_TYPE 0x0000080
97 #define VER_PLATFORM_WIN32s 0
98 #define VER_PLATFORM_WIN32_WINDOWS 1
99 #define VER_PLATFORM_WIN32_NT 2
100 #define VER_EQUAL 1
101 #define VER_GREATER 2
102 #define VER_GREATER_EQUAL 3
103 #define VER_LESS 4
104 #define VER_LESS_EQUAL 5
105 #define VER_AND 6
106 #define VER_OR 7
107 #define VER_CONDITION_MASK 7
108 #define VER_NUM_BITS_PER_CONDITION_MASK 3
109
110 //
111 // Timezone IDs
112 //
113 #define TIME_ZONE_ID_UNKNOWN 0
114 #define TIME_ZONE_ID_STANDARD 1
115 #define TIME_ZONE_ID_DAYLIGHT 2
116
117 //
118 // RTL Lock Type (Critical Section or Resource)
119 //
120 #define RTL_CRITSECT_TYPE 0
121 #define RTL_RESOURCE_TYPE 1
122
123 #ifdef NTOS_MODE_USER
124
125 //
126 // String Hash Algorithms
127 //
128 #define HASH_STRING_ALGORITHM_DEFAULT 0
129 #define HASH_STRING_ALGORITHM_X65599 1
130 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
131
132 //
133 // RtlDuplicateString Flags
134 //
135 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
136 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
137
138 //
139 // Codepages
140 //
141 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
142 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
143 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
144 #endif
145 #define MAXIMUM_LEADBYTES 12
146
147 //
148 // RTL Debug Queries
149 //
150 #define RTL_DEBUG_QUERY_MODULES 0x01
151 #define RTL_DEBUG_QUERY_BACKTRACES 0x02
152 #define RTL_DEBUG_QUERY_HEAPS 0x04
153 #define RTL_DEBUG_QUERY_HEAP_TAGS 0x08
154 #define RTL_DEBUG_QUERY_HEAP_BLOCKS 0x10
155 #define RTL_DEBUG_QUERY_LOCKS 0x20
156
157 //
158 // RTL Handle Flags
159 //
160 #define RTL_HANDLE_VALID 0x1
161
162 //
163 // RTL Atom Flags
164 //
165 #define RTL_ATOM_IS_PINNED 0x1
166
167 //
168 // Codepage Tags
169 //
170 #ifdef NTOS_MODE_USER
171 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG;
172 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
173
174 //
175 // Constant String Macro
176 //
177 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
178 { \
179 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
180 sizeof(__SOURCE_STRING__), \
181 (__SOURCE_STRING__) \
182 }
183
184 #endif
185
186 #ifdef NTOS_MODE_USER
187
188 //
189 // Table and Compare result types
190 //
191 typedef enum _TABLE_SEARCH_RESULT
192 {
193 TableEmptyTree,
194 TableFoundNode,
195 TableInsertAsLeft,
196 TableInsertAsRight
197 } TABLE_SEARCH_RESULT;
198
199 typedef enum _RTL_GENERIC_COMPARE_RESULTS
200 {
201 GenericLessThan,
202 GenericGreaterThan,
203 GenericEqual
204 } RTL_GENERIC_COMPARE_RESULTS;
205
206 #else
207
208 //
209 // ACL Query Information Classes
210 //
211 typedef enum _ACL_INFORMATION_CLASS
212 {
213 AclRevisionInformation = 1,
214 AclSizeInformation
215 } ACL_INFORMATION_CLASS;
216
217 #endif
218
219 //
220 // RTL Path Types
221 //
222 typedef enum _RTL_PATH_TYPE
223 {
224 INVALID_PATH = 0,
225 UNC_PATH, // "//foo"
226 ABSOLUTE_DRIVE_PATH, // "c:/foo"
227 RELATIVE_DRIVE_PATH, // "c:foo"
228 ABSOLUTE_PATH, // "/foo"
229 RELATIVE_PATH, // "foo"
230 DEVICE_PATH, // "//./foo"
231 UNC_DOT_PATH // "//."
232 } RTL_PATH_TYPE;
233
234 #ifndef NTOS_MODE_USER
235
236 //
237 // Callback function for RTL Timers or Registered Waits
238 //
239 typedef VOID
240 (NTAPI *WAITORTIMERCALLBACKFUNC)(
241 PVOID pvContext,
242 BOOLEAN fTimerOrWaitFired
243 );
244
245 //
246 // Handler during Vectored RTL Exceptions
247 //
248 typedef LONG
249 (NTAPI *PVECTORED_EXCEPTION_HANDLER)(
250 PEXCEPTION_POINTERS ExceptionPointers
251 );
252
253 #else
254
255 //
256 // Handler during regular RTL Exceptions
257 //
258 typedef EXCEPTION_DISPOSITION
259 (NTAPI *PEXCEPTION_ROUTINE)(
260 IN struct _EXCEPTION_RECORD *ExceptionRecord,
261 IN PVOID EstablisherFrame,
262 IN OUT struct _CONTEXT *ContextRecord,
263 IN OUT PVOID DispatcherContext
264 );
265
266 #endif
267
268 //
269 // Callback for RTL Heap Enumeration
270 //
271 typedef NTSTATUS
272 (*PHEAP_ENUMERATION_ROUTINE)(
273 IN PVOID HeapHandle,
274 IN PVOID UserParam
275 );
276
277 //
278 // Thread and Process Start Routines for RtlCreateUserThread/Process
279 //
280 typedef ULONG (NTAPI *PTHREAD_START_ROUTINE)(
281 PVOID Parameter
282 );
283
284 typedef VOID
285 (NTAPI *PRTL_BASE_PROCESS_START_ROUTINE)(
286 PTHREAD_START_ROUTINE StartAddress,
287 PVOID Parameter
288 );
289
290 //
291 // Declare empty structure definitions so that they may be referenced by
292 // routines before they are defined
293 //
294 struct _RTL_AVL_TABLE;
295 struct _RTL_GENERIC_TABLE;
296 struct _RTL_RANGE;
297 typedef struct _COMPRESSED_DATA_INFO COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
298
299 //
300 // Routines and callbacks for the RTL AVL/Generic Table package
301 //
302 typedef NTSTATUS
303 (NTAPI *PRTL_AVL_MATCH_FUNCTION)(
304 struct _RTL_AVL_TABLE *Table,
305 PVOID UserData,
306 PVOID MatchData
307 );
308
309 typedef RTL_GENERIC_COMPARE_RESULTS
310 (NTAPI *PRTL_AVL_COMPARE_ROUTINE) (
311 struct _RTL_AVL_TABLE *Table,
312 PVOID FirstStruct,
313 PVOID SecondStruct
314 );
315
316 typedef RTL_GENERIC_COMPARE_RESULTS
317 (NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
318 struct _RTL_GENERIC_TABLE *Table,
319 PVOID FirstStruct,
320 PVOID SecondStruct
321 );
322
323 typedef PVOID
324 (NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
325 struct _RTL_GENERIC_TABLE *Table,
326 CLONG ByteSize
327 );
328
329 typedef VOID
330 (NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
331 struct _RTL_GENERIC_TABLE *Table,
332 PVOID Buffer
333 );
334
335 typedef PVOID
336 (NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
337 struct _RTL_AVL_TABLE *Table,
338 CLONG ByteSize
339 );
340
341 typedef VOID
342 (NTAPI *PRTL_AVL_FREE_ROUTINE) (
343 struct _RTL_AVL_TABLE *Table,
344 PVOID Buffer
345 );
346
347 //
348 // RTL Query Registry callback
349 //
350 typedef NTSTATUS
351 (NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
352 IN PWSTR ValueName,
353 IN ULONG ValueType,
354 IN PVOID ValueData,
355 IN ULONG ValueLength,
356 IN PVOID Context,
357 IN PVOID EntryContext
358 );
359
360 //
361 // RTL Range List callbacks
362 //
363 #ifdef NTOS_MODE_USER
364 typedef BOOLEAN
365 (NTAPI *PRTL_CONFLICT_RANGE_CALLBACK)(
366 PVOID Context,
367 struct _RTL_RANGE *Range
368 );
369
370 //
371 // Custom Heap Commit Routine for RtlCreateHeap
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 //
381 // Version Info redefinitions
382 //
383 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW;
384 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW;
385 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW;
386 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW;
387
388 //
389 // Simple pointer definitions
390 //
391 typedef ACL_REVISION_INFORMATION *PACL_REVISION_INFORMATION;
392 typedef ACL_SIZE_INFORMATION *PACL_SIZE_INFORMATION;
393
394 //
395 // Parameters for RtlCreateHeap
396 //
397 typedef struct _RTL_HEAP_PARAMETERS
398 {
399 ULONG Length;
400 SIZE_T SegmentReserve;
401 SIZE_T SegmentCommit;
402 SIZE_T DeCommitFreeBlockThreshold;
403 SIZE_T DeCommitTotalFreeThreshold;
404 SIZE_T MaximumAllocationSize;
405 SIZE_T VirtualMemoryThreshold;
406 SIZE_T InitialCommit;
407 SIZE_T InitialReserve;
408 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
409 SIZE_T Reserved[2];
410 } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
411
412 //
413 // RTL Bitmap structures
414 //
415 typedef struct _RTL_BITMAP
416 {
417 ULONG SizeOfBitMap;
418 PULONG Buffer;
419 } RTL_BITMAP, *PRTL_BITMAP;
420
421 typedef struct _RTL_BITMAP_RUN
422 {
423 ULONG StartingIndex;
424 ULONG NumberOfBits;
425 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
426
427 //
428 // RtlGenerateXxxName context
429 //
430 typedef struct _GENERATE_NAME_CONTEXT
431 {
432 USHORT Checksum;
433 BOOLEAN CheckSumInserted;
434 UCHAR NameLength;
435 WCHAR NameBuffer[8];
436 ULONG ExtensionLength;
437 WCHAR ExtensionBuffer[4];
438 ULONG LastIndexValue;
439 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
440
441 //
442 // RTL Splay and Balanced Links structures
443 //
444 typedef struct _RTL_SPLAY_LINKS
445 {
446 struct _RTL_SPLAY_LINKS *Parent;
447 struct _RTL_SPLAY_LINKS *LeftChild;
448 struct _RTL_SPLAY_LINKS *RightChild;
449 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
450
451 typedef struct _RTL_BALANCED_LINKS
452 {
453 struct _RTL_BALANCED_LINKS *Parent;
454 struct _RTL_BALANCED_LINKS *LeftChild;
455 struct _RTL_BALANCED_LINKS *RightChild;
456 CHAR Balance;
457 UCHAR Reserved[3];
458 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
459
460 //
461 // RTL Avl/Generic Tables
462 //
463 typedef struct _RTL_GENERIC_TABLE
464 {
465 PRTL_SPLAY_LINKS TableRoot;
466 LIST_ENTRY InsertOrderList;
467 PLIST_ENTRY OrderedPointer;
468 ULONG WhichOrderedElement;
469 ULONG NumberGenericTableElements;
470 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
471 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
472 PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
473 PVOID TableContext;
474 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
475
476 typedef struct _RTL_AVL_TABLE
477 {
478 RTL_BALANCED_LINKS BalancedRoot;
479 PVOID OrderedPointer;
480 ULONG WhichOrderedElement;
481 ULONG NumberGenericTableElements;
482 ULONG DepthOfTree;
483 PRTL_BALANCED_LINKS RestartKey;
484 ULONG DeleteCount;
485 PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
486 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
487 PRTL_AVL_FREE_ROUTINE FreeRoutine;
488 PVOID TableContext;
489 } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
490
491 //
492 // RtlQueryRegistry Data
493 //
494 typedef struct _RTL_QUERY_REGISTRY_TABLE
495 {
496 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
497 ULONG Flags;
498 PWSTR Name;
499 PVOID EntryContext;
500 ULONG DefaultType;
501 PVOID DefaultData;
502 ULONG DefaultLength;
503 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
504
505 //
506 // RTL Unicode Table Structures
507 //
508 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
509 {
510 CSHORT NodeTypeCode;
511 CSHORT NameLength;
512 struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
513 struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
514 RTL_SPLAY_LINKS Links;
515 PUNICODE_STRING Prefix;
516 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
517
518 typedef struct _UNICODE_PREFIX_TABLE
519 {
520 CSHORT NodeTypeCode;
521 CSHORT NameLength;
522 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
523 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
524 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
525
526 //
527 // Time Structure for RTL Time calls
528 //
529 typedef struct _TIME_FIELDS
530 {
531 CSHORT Year;
532 CSHORT Month;
533 CSHORT Day;
534 CSHORT Hour;
535 CSHORT Minute;
536 CSHORT Second;
537 CSHORT Milliseconds;
538 CSHORT Weekday;
539 } TIME_FIELDS, *PTIME_FIELDS;
540
541 #endif
542 typedef struct _ACE
543 {
544 ACE_HEADER Header;
545 ACCESS_MASK AccessMask;
546 } ACE, *PACE;
547
548 //
549 // Information Structures for RTL Debug Functions
550 //
551 typedef struct _RTL_PROCESS_MODULE_INFORMATION
552 {
553 ULONG Reserved[2];
554 PVOID Base;
555 ULONG Size;
556 ULONG Flags;
557 USHORT Index;
558 USHORT Unknown;
559 USHORT LoadCount;
560 USHORT ModuleNameOffset;
561 CHAR ImageName[256];
562 } RTL_PROCESS_MODULE_INFORMATION, *PRTL_PROCESS_MODULE_INFORMATION;
563
564 typedef struct _RTL_PROCESS_MODULES
565 {
566 ULONG ModuleCount;
567 RTL_PROCESS_MODULE_INFORMATION ModuleEntry[1];
568 } RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES;
569
570 typedef struct _RTL_PROCESS_HEAP_INFORMATION
571 {
572 PVOID Base;
573 ULONG Flags;
574 USHORT Granularity;
575 USHORT Unknown;
576 ULONG Allocated;
577 ULONG Committed;
578 ULONG TagCount;
579 ULONG BlockCount;
580 ULONG Reserved[7];
581 PVOID Tags;
582 PVOID Blocks;
583 } RTL_PROCESS_HEAP_INFORMATION, *PRTL_PROCESS_HEAP_INFORMATION;
584
585 typedef struct _RTL_PROCESS_HEAPS
586 {
587 ULONG HeapCount;
588 RTL_PROCESS_HEAP_INFORMATION HeapEntry[1];
589 } RTL_PROCESS_HEAPS, *PRTL_PROCESS_HEAPS;
590
591 typedef struct _RTL_PROCESS_LOCK_INFORMATION
592 {
593 PVOID Address;
594 USHORT Type;
595 USHORT CreatorBackTraceIndex;
596 ULONG OwnerThreadId;
597 ULONG ActiveCount;
598 ULONG ContentionCount;
599 ULONG EntryCount;
600 ULONG RecursionCount;
601 ULONG NumberOfSharedWaiters;
602 ULONG NumberOfExclusiveWaiters;
603 } RTL_PROCESS_LOCK_INFORMATION, *PRTL_PROCESS_LOCK_INFORMATION;
604
605 typedef struct _RTL_PROCESS_LOCKS
606 {
607 ULONG LockCount;
608 RTL_PROCESS_LOCK_INFORMATION LockEntry[1];
609 } RTL_PROCESS_LOCKS, *PRTL_PROCESS_LOCKS;
610
611 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
612 {
613 PVOID SymbolicBackTrace;
614 ULONG TraceCount;
615 USHORT Index;
616 USHORT Depth;
617 PVOID BackTrace[16];
618 } RTL_PROCESS_BACKTRACE_INFORMATION, *PRTL_PROCESS_BACKTRACE_INFORMATION;
619
620 typedef struct _RTL_PROCESS_BACKTRACES
621 {
622 ULONG CommittedMemory;
623 ULONG ReservedMemory;
624 ULONG NumberOfBackTraceLookups;
625 ULONG NumberOfBackTraces;
626 RTL_PROCESS_BACKTRACE_INFORMATION BackTraces[1];
627 } RTL_PROCESS_BACKTRACES, *PRTL_PROCESS_BACKTRACES;
628
629 typedef struct _RTL_DEBUG_BUFFER
630 {
631 HANDLE SectionHandle;
632 PVOID SectionBase;
633 PVOID RemoteSectionBase;
634 ULONG SectionBaseDelta;
635 HANDLE EventPairHandle;
636 ULONG Unknown[2];
637 HANDLE RemoteThreadHandle;
638 ULONG InfoClassMask;
639 ULONG SizeOfInfo;
640 ULONG AllocatedSize;
641 ULONG SectionSize;
642 PRTL_PROCESS_MODULES ModuleInformation;
643 PRTL_PROCESS_BACKTRACES BackTraceInformation;
644 PRTL_PROCESS_HEAPS HeapInformation;
645 PRTL_PROCESS_LOCKS LockInformation;
646 PVOID Reserved[8];
647 } RTL_DEBUG_BUFFER, *PRTL_DEBUG_BUFFER;
648
649 //
650 // RTL Handle Structures
651 //
652 typedef struct _RTL_HANDLE_TABLE_ENTRY
653 {
654 ULONG Flags;
655 struct _RTL_HANDLE_TABLE_ENTRY *NextFree;
656 } RTL_HANDLE_TABLE_ENTRY, *PRTL_HANDLE_TABLE_ENTRY;
657
658 typedef struct _RTL_HANDLE_TABLE
659 {
660 ULONG MaximumNumberOfHandles;
661 ULONG SizeOfHandleTableEntry;
662 ULONG Reserved[2];
663 PRTL_HANDLE_TABLE_ENTRY FreeHandles;
664 PRTL_HANDLE_TABLE_ENTRY CommittedHandles;
665 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles;
666 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles;
667 } RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
668
669 //
670 // Exception Record
671 //
672 typedef struct _EXCEPTION_REGISTRATION_RECORD
673 {
674 struct _EXCEPTION_REGISTRATION_RECORD *Next;
675 PEXCEPTION_ROUTINE Handler;
676 } EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
677
678 //
679 // Current Directory Structures
680 //
681 typedef struct _CURDIR
682 {
683 UNICODE_STRING DosPath;
684 HANDLE Handle;
685 } CURDIR, *PCURDIR;
686
687 typedef struct RTL_DRIVE_LETTER_CURDIR
688 {
689 USHORT Flags;
690 USHORT Length;
691 ULONG TimeStamp;
692 UNICODE_STRING DosPath;
693 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
694
695 #ifndef NTOS_MODE_USER
696
697 //
698 // RTL Critical Section Structures
699 //
700 typedef struct _RTL_CRITICAL_SECTION_DEBUG
701 {
702 USHORT Type;
703 USHORT CreatorBackTraceIndex;
704 struct _RTL_CRITICAL_SECTION *CriticalSection;
705 LIST_ENTRY ProcessLocksList;
706 ULONG EntryCount;
707 ULONG ContentionCount;
708 ULONG Spare[2];
709 } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
710
711 typedef struct _RTL_CRITICAL_SECTION
712 {
713 PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
714 LONG LockCount;
715 LONG RecursionCount;
716 HANDLE OwningThread;
717 HANDLE LockSemaphore;
718 ULONG_PTR SpinCount;
719 } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
720
721 #else
722
723 //
724 // RTL Range List Structures
725 //
726 typedef struct _RTL_RANGE_LIST
727 {
728 LIST_ENTRY ListHead;
729 ULONG Flags;
730 ULONG Count;
731 ULONG Stamp;
732 } RTL_RANGE_LIST, *PRTL_RANGE_LIST;
733
734 typedef struct _RTL_RANGE
735 {
736 ULONGLONG Start;
737 ULONGLONG End;
738 PVOID UserData;
739 PVOID Owner;
740 UCHAR Attributes;
741 UCHAR Flags;
742 } RTL_RANGE, *PRTL_RANGE;
743
744 typedef struct _RANGE_LIST_ITERATOR
745 {
746 PLIST_ENTRY RangeListHead;
747 PLIST_ENTRY MergedHead;
748 PVOID Current;
749 ULONG Stamp;
750 } RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
751
752 #endif
753
754 //
755 // RTL Resource
756 //
757 typedef struct _RTL_RESOURCE
758 {
759 RTL_CRITICAL_SECTION Lock;
760 HANDLE SharedSemaphore;
761 ULONG SharedWaiters;
762 HANDLE ExclusiveSemaphore;
763 ULONG ExclusiveWaiters;
764 LONG NumberActive;
765 HANDLE OwningThread;
766 ULONG TimeoutBoost;
767 PVOID DebugInfo;
768 } RTL_RESOURCE, *PRTL_RESOURCE;
769
770 //
771 // RTL Message Structures for PE Resources
772 //
773 typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
774 {
775 USHORT Length;
776 USHORT Flags;
777 CHAR Text[1];
778 } RTL_MESSAGE_RESOURCE_ENTRY, *PRTL_MESSAGE_RESOURCE_ENTRY;
779
780 typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
781 {
782 ULONG LowId;
783 ULONG HighId;
784 ULONG OffsetToEntries;
785 } RTL_MESSAGE_RESOURCE_BLOCK, *PRTL_MESSAGE_RESOURCE_BLOCK;
786
787 typedef struct _RTL_MESSAGE_RESOURCE_DATA
788 {
789 ULONG NumberOfBlocks;
790 RTL_MESSAGE_RESOURCE_BLOCK Blocks[1];
791 } RTL_MESSAGE_RESOURCE_DATA, *PRTL_MESSAGE_RESOURCE_DATA;
792
793 //
794 // Structures for RtlCreateUserProcess
795 //
796 typedef struct _RTL_USER_PROCESS_PARAMETERS
797 {
798 ULONG MaximumLength;
799 ULONG Length;
800 ULONG Flags;
801 ULONG DebugFlags;
802 HANDLE ConsoleHandle;
803 ULONG ConsoleFlags;
804 HANDLE StandardInput;
805 HANDLE StandardOutput;
806 HANDLE StandardError;
807 CURDIR CurrentDirectory;
808 UNICODE_STRING DllPath;
809 UNICODE_STRING ImagePathName;
810 UNICODE_STRING CommandLine;
811 PWSTR Environment;
812 ULONG StartingX;
813 ULONG StartingY;
814 ULONG CountX;
815 ULONG CountY;
816 ULONG CountCharsX;
817 ULONG CountCharsY;
818 ULONG FillAttribute;
819 ULONG WindowFlags;
820 ULONG ShowWindowFlags;
821 UNICODE_STRING WindowTitle;
822 UNICODE_STRING DesktopInfo;
823 UNICODE_STRING ShellInfo;
824 UNICODE_STRING RuntimeData;
825 RTL_DRIVE_LETTER_CURDIR CurrentDirectories[32];
826 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
827
828 typedef struct _RTL_USER_PROCESS_INFORMATION
829 {
830 ULONG Size;
831 HANDLE ProcessHandle;
832 HANDLE ThreadHandle;
833 CLIENT_ID ClientId;
834 SECTION_IMAGE_INFORMATION ImageInformation;
835 } RTL_USER_PROCESS_INFORMATION, *PRTL_USER_PROCESS_INFORMATION;
836
837 //
838 // RTL Atom Table Structures
839 //
840 typedef struct _RTL_ATOM_TABLE_ENTRY
841 {
842 struct _RTL_ATOM_TABLE_ENTRY *HashLink;
843 USHORT HandleIndex;
844 USHORT Atom;
845 USHORT ReferenceCount;
846 UCHAR Flags;
847 UCHAR NameLength;
848 WCHAR Name[1];
849 } RTL_ATOM_TABLE_ENTRY, *PRTL_ATOM_TABLE_ENTRY;
850
851 typedef struct _RTL_ATOM_TABLE
852 {
853 ULONG Signature;
854 union
855 {
856 #ifdef NTOS_MODE_USER
857 RTL_CRITICAL_SECTION CriticalSection;
858 #else
859 FAST_MUTEX FastMutex;
860 #endif
861 };
862 union
863 {
864 #ifdef NTOS_MODE_USER
865 RTL_HANDLE_TABLE RtlHandleTable;
866 #else
867 PHANDLE_TABLE ExHandleTable;
868 #endif
869 };
870 ULONG NumberOfBuckets;
871 PRTL_ATOM_TABLE_ENTRY Buckets[1];
872 } RTL_ATOM_TABLE, *PRTL_ATOM_TABLE;
873
874 #ifndef NTOS_MODE_USER
875
876 //
877 // System Time and Timezone Structures
878 //
879 typedef struct _SYSTEMTIME
880 {
881 USHORT wYear;
882 USHORT wMonth;
883 USHORT wDayOfWeek;
884 USHORT wDay;
885 USHORT wHour;
886 USHORT wMinute;
887 USHORT wSecond;
888 USHORT wMilliseconds;
889 } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
890
891 typedef struct _TIME_ZONE_INFORMATION
892 {
893 LONG Bias;
894 WCHAR StandardName[32];
895 SYSTEMTIME StandardDate;
896 LONG StandardBias;
897 WCHAR DaylightName[32];
898 SYSTEMTIME DaylightDate;
899 LONG DaylightBias;
900 } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
901
902 #endif
903
904 //
905 // Header for NLS Files
906 //
907 typedef struct _NLS_FILE_HEADER
908 {
909 USHORT HeaderSize;
910 USHORT CodePage;
911 USHORT MaximumCharacterSize;
912 USHORT DefaultChar;
913 USHORT UniDefaultChar;
914 USHORT TransDefaultChar;
915 USHORT TransUniDefaultChar;
916 USHORT DBCSCodePage;
917 UCHAR LeadByte[MAXIMUM_LEADBYTES];
918 } NLS_FILE_HEADER, *PNLS_FILE_HEADER;
919
920 #endif