- NDK 0.98, now with versionned headers. Too many changes to list, see the TinyKRNL...
[reactos.git] / reactos / include / ndk / rtltypes.h
1 /*++ NDK Version: 0098
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 (alexi@tinykrnl.org) - Updated - 27-Feb-2006
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 #define RTL_USER_PROCESS_PARAMETERS_PRIVATE_DLL_PATH 0x1000
46 #define RTL_USER_PROCESS_PARAMETERS_LOCAL_DLL_PATH 0x2000
47 #define RTL_USER_PROCESS_PARAMETERS_NX 0x20000
48
49 //
50 // Exception Flags
51 //
52 #define EXCEPTION_CHAIN_END ((PEXCEPTION_REGISTRATION_RECORD)-1)
53 #define EXCEPTION_UNWINDING 0x02
54 #define EXCEPTION_EXIT_UNWIND 0x04
55 #define EXCEPTION_STACK_INVALID 0x08
56 #define EXCEPTION_UNWIND (EXCEPTION_UNWINDING + EXCEPTION_EXIT_UNWIND)
57 #define EXCEPTION_NESTED_CALL 0x10
58 #define EXCEPTION_TARGET_UNWIND 0x20
59 #define EXCEPTION_COLLIDED_UNWIND 0x20
60
61 //
62 // Range and Range List Flags
63 //
64 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
65 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
66
67 #define RTL_RANGE_SHARED 0x01
68 #define RTL_RANGE_CONFLICT 0x02
69
70 //
71 // Activation Context Frame Flags
72 //
73 #define RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_FORMAT_WHISTLER \
74 0x1
75
76 //
77 // Heap Flags
78 //
79 #define HEAP_CLASS_0 0x00000000
80 #define HEAP_CLASS_1 0x00001000
81 #define HEAP_CLASS_2 0x00002000
82 #define HEAP_CLASS_3 0x00003000
83 #define HEAP_CLASS_4 0x00004000
84 #define HEAP_CLASS_5 0x00005000
85 #define HEAP_CLASS_6 0x00006000
86 #define HEAP_CLASS_7 0x00007000
87 #define HEAP_CLASS_8 0x00008000
88 #define HEAP_CLASS_MASK 0x0000F000
89
90 //
91 // Registry Keys
92 //
93 #define RTL_REGISTRY_ABSOLUTE 0
94 #define RTL_REGISTRY_SERVICES 1
95 #define RTL_REGISTRY_CONTROL 2
96 #define RTL_REGISTRY_WINDOWS_NT 3
97 #define RTL_REGISTRY_DEVICEMAP 4
98 #define RTL_REGISTRY_USER 5
99 #define RTL_REGISTRY_MAXIMUM 6
100 #define RTL_REGISTRY_HANDLE 0x40000000
101 #define RTL_REGISTRY_OPTIONAL 0x80000000
102 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
103 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
104 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
105 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
106 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
107 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
108 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
109
110 //
111 // Versioning
112 //
113 #define VER_MINORVERSION 0x0000001
114 #define VER_MAJORVERSION 0x0000002
115 #define VER_BUILDNUMBER 0x0000004
116 #define VER_PLATFORMID 0x0000008
117 #define VER_SERVICEPACKMINOR 0x0000010
118 #define VER_SERVICEPACKMAJOR 0x0000020
119 #define VER_SUITENAME 0x0000040
120 #define VER_PRODUCT_TYPE 0x0000080
121 #define VER_PLATFORM_WIN32s 0
122 #define VER_PLATFORM_WIN32_WINDOWS 1
123 #define VER_PLATFORM_WIN32_NT 2
124 #define VER_EQUAL 1
125 #define VER_GREATER 2
126 #define VER_GREATER_EQUAL 3
127 #define VER_LESS 4
128 #define VER_LESS_EQUAL 5
129 #define VER_AND 6
130 #define VER_OR 7
131 #define VER_CONDITION_MASK 7
132 #define VER_NUM_BITS_PER_CONDITION_MASK 3
133
134 //
135 // Timezone IDs
136 //
137 #define TIME_ZONE_ID_UNKNOWN 0
138 #define TIME_ZONE_ID_STANDARD 1
139 #define TIME_ZONE_ID_DAYLIGHT 2
140
141 //
142 // RTL Lock Type (Critical Section or Resource)
143 //
144 #define RTL_CRITSECT_TYPE 0
145 #define RTL_RESOURCE_TYPE 1
146
147 //
148 // RtlAcquirePrivileges Flags
149 //
150 #define RTL_ACQUIRE_PRIVILEGE_IMPERSONATE 1
151 #define RTL_ACQUIRE_PRIVILEGE_PROCESS 2
152
153 #ifdef NTOS_MODE_USER
154
155 //
156 // String Hash Algorithms
157 //
158 #define HASH_STRING_ALGORITHM_DEFAULT 0
159 #define HASH_STRING_ALGORITHM_X65599 1
160 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
161
162 //
163 // RtlDuplicateString Flags
164 //
165 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
166 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
167
168 //
169 // Codepages
170 //
171 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
172 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
173 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
174 #else
175 //
176 // Message Resource Flag
177 //
178 #define MESSAGE_RESOURCE_UNICODE 0x0001
179
180 #endif
181 #define MAXIMUM_LEADBYTES 12
182
183 //
184 // RTL Debug Queries
185 //
186 #define RTL_DEBUG_QUERY_MODULES 0x01
187 #define RTL_DEBUG_QUERY_BACKTRACES 0x02
188 #define RTL_DEBUG_QUERY_HEAPS 0x04
189 #define RTL_DEBUG_QUERY_HEAP_TAGS 0x08
190 #define RTL_DEBUG_QUERY_HEAP_BLOCKS 0x10
191 #define RTL_DEBUG_QUERY_LOCKS 0x20
192
193 //
194 // RTL Handle Flags
195 //
196 #define RTL_HANDLE_VALID 0x1
197
198 //
199 // RTL Atom Flags
200 //
201 #define RTL_ATOM_IS_PINNED 0x1
202
203 //
204 // Critical section lock bits
205 //
206 #define CS_LOCK_BIT 0x1
207 #define CS_LOCK_BIT_V 0x0
208 #define CS_LOCK_WAITER_WOKEN 0x2
209 #define CS_LOCK_WAITER_INC 0x4
210
211 //
212 // Codepage Tags
213 //
214 #ifdef NTOS_MODE_USER
215 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG;
216 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
217
218 //
219 // Constant String Macro
220 //
221 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
222 { \
223 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
224 sizeof(__SOURCE_STRING__), \
225 (__SOURCE_STRING__) \
226 }
227
228 #endif
229
230 #ifdef NTOS_MODE_USER
231
232 //
233 // Table and Compare result types
234 //
235 typedef enum _TABLE_SEARCH_RESULT
236 {
237 TableEmptyTree,
238 TableFoundNode,
239 TableInsertAsLeft,
240 TableInsertAsRight
241 } TABLE_SEARCH_RESULT;
242
243 typedef enum _RTL_GENERIC_COMPARE_RESULTS
244 {
245 GenericLessThan,
246 GenericGreaterThan,
247 GenericEqual
248 } RTL_GENERIC_COMPARE_RESULTS;
249
250 #else
251
252 //
253 // ACL Query Information Classes
254 //
255 typedef enum _ACL_INFORMATION_CLASS
256 {
257 AclRevisionInformation = 1,
258 AclSizeInformation
259 } ACL_INFORMATION_CLASS;
260
261 #endif
262
263 //
264 // RTL Path Types
265 //
266 typedef enum _RTL_PATH_TYPE
267 {
268 RtlPathTypeUnknown,
269 RtlPathTypeUncAbsolute,
270 RtlPathTypeDriveAbsolute,
271 RtlPathTypeDriveRelative,
272 RtlPathTypeRooted,
273 RtlPathTypeRelative,
274 RtlPathTypeLocalDevice,
275 RtlPathTypeRootLocalDevice,
276 } RTL_PATH_TYPE;
277
278 #ifndef NTOS_MODE_USER
279
280 //
281 // Callback function for RTL Timers or Registered Waits
282 //
283 typedef VOID
284 (NTAPI *WAITORTIMERCALLBACKFUNC)(
285 PVOID pvContext,
286 BOOLEAN fTimerOrWaitFired
287 );
288
289 //
290 // Handler during Vectored RTL Exceptions
291 //
292 typedef LONG
293 (NTAPI *PVECTORED_EXCEPTION_HANDLER)(
294 PEXCEPTION_POINTERS ExceptionPointers
295 );
296
297 #else
298
299 //
300 // Handler during regular RTL Exceptions
301 //
302 typedef EXCEPTION_DISPOSITION
303 (NTAPI *PEXCEPTION_ROUTINE)(
304 IN struct _EXCEPTION_RECORD *ExceptionRecord,
305 IN PVOID EstablisherFrame,
306 IN OUT struct _CONTEXT *ContextRecord,
307 IN OUT PVOID DispatcherContext
308 );
309
310 //
311 // RTL Library Allocation/Free Routines
312 //
313 typedef PVOID
314 (NTAPI *PRTL_ALLOCATE_STRING_ROUTINE)(
315 SIZE_T NumberOfBytes
316 );
317
318 typedef PVOID
319 (NTAPI *PRTL_REALLOCATE_STRING_ROUTINE)(
320 SIZE_T NumberOfBytes,
321 PVOID Buffer
322 );
323
324 typedef
325 VOID
326 (NTAPI *PRTL_FREE_STRING_ROUTINE)(
327 PVOID Buffer
328 );
329
330 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine;
331 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine;
332 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine;
333
334 #endif
335
336 //
337 // Callback for RTL Heap Enumeration
338 //
339 typedef NTSTATUS
340 (*PHEAP_ENUMERATION_ROUTINE)(
341 IN PVOID HeapHandle,
342 IN PVOID UserParam
343 );
344
345 //
346 // Thread and Process Start Routines for RtlCreateUserThread/Process
347 //
348 typedef ULONG (NTAPI *PTHREAD_START_ROUTINE)(
349 PVOID Parameter
350 );
351
352 typedef VOID
353 (NTAPI *PRTL_BASE_PROCESS_START_ROUTINE)(
354 PTHREAD_START_ROUTINE StartAddress,
355 PVOID Parameter
356 );
357
358 //
359 // Declare empty structure definitions so that they may be referenced by
360 // routines before they are defined
361 //
362 struct _RTL_AVL_TABLE;
363 struct _RTL_GENERIC_TABLE;
364 struct _RTL_RANGE;
365 typedef struct _COMPRESSED_DATA_INFO COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
366
367 //
368 // Routines and callbacks for the RTL AVL/Generic Table package
369 //
370 typedef NTSTATUS
371 (NTAPI *PRTL_AVL_MATCH_FUNCTION)(
372 struct _RTL_AVL_TABLE *Table,
373 PVOID UserData,
374 PVOID MatchData
375 );
376
377 typedef RTL_GENERIC_COMPARE_RESULTS
378 (NTAPI *PRTL_AVL_COMPARE_ROUTINE) (
379 struct _RTL_AVL_TABLE *Table,
380 PVOID FirstStruct,
381 PVOID SecondStruct
382 );
383
384 typedef RTL_GENERIC_COMPARE_RESULTS
385 (NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
386 struct _RTL_GENERIC_TABLE *Table,
387 PVOID FirstStruct,
388 PVOID SecondStruct
389 );
390
391 typedef PVOID
392 (NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
393 struct _RTL_GENERIC_TABLE *Table,
394 CLONG ByteSize
395 );
396
397 typedef VOID
398 (NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
399 struct _RTL_GENERIC_TABLE *Table,
400 PVOID Buffer
401 );
402
403 typedef PVOID
404 (NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
405 struct _RTL_AVL_TABLE *Table,
406 CLONG ByteSize
407 );
408
409 typedef VOID
410 (NTAPI *PRTL_AVL_FREE_ROUTINE) (
411 struct _RTL_AVL_TABLE *Table,
412 PVOID Buffer
413 );
414
415 //
416 // RTL Query Registry callback
417 //
418 typedef NTSTATUS
419 (NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
420 IN PWSTR ValueName,
421 IN ULONG ValueType,
422 IN PVOID ValueData,
423 IN ULONG ValueLength,
424 IN PVOID Context,
425 IN PVOID EntryContext
426 );
427
428 //
429 // RTL Range List callbacks
430 //
431 #ifdef NTOS_MODE_USER
432 typedef BOOLEAN
433 (NTAPI *PRTL_CONFLICT_RANGE_CALLBACK)(
434 PVOID Context,
435 struct _RTL_RANGE *Range
436 );
437
438 //
439 // Custom Heap Commit Routine for RtlCreateHeap
440 //
441 typedef NTSTATUS
442 (NTAPI * PRTL_HEAP_COMMIT_ROUTINE)(
443 IN PVOID Base,
444 IN OUT PVOID *CommitAddress,
445 IN OUT PSIZE_T CommitSize
446 );
447
448 //
449 // Version Info redefinitions
450 //
451 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW;
452 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW;
453 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW;
454 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW;
455
456 //
457 // Simple pointer definitions
458 //
459 typedef ACL_REVISION_INFORMATION *PACL_REVISION_INFORMATION;
460 typedef ACL_SIZE_INFORMATION *PACL_SIZE_INFORMATION;
461
462 //
463 // Parameters for RtlCreateHeap
464 //
465 typedef struct _RTL_HEAP_PARAMETERS
466 {
467 ULONG Length;
468 SIZE_T SegmentReserve;
469 SIZE_T SegmentCommit;
470 SIZE_T DeCommitFreeBlockThreshold;
471 SIZE_T DeCommitTotalFreeThreshold;
472 SIZE_T MaximumAllocationSize;
473 SIZE_T VirtualMemoryThreshold;
474 SIZE_T InitialCommit;
475 SIZE_T InitialReserve;
476 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
477 SIZE_T Reserved[2];
478 } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
479
480 //
481 // RTL Bitmap structures
482 //
483 typedef struct _RTL_BITMAP
484 {
485 ULONG SizeOfBitMap;
486 PULONG Buffer;
487 } RTL_BITMAP, *PRTL_BITMAP;
488
489 typedef struct _RTL_BITMAP_RUN
490 {
491 ULONG StartingIndex;
492 ULONG NumberOfBits;
493 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
494
495 //
496 // RtlGenerateXxxName context
497 //
498 typedef struct _GENERATE_NAME_CONTEXT
499 {
500 USHORT Checksum;
501 BOOLEAN CheckSumInserted;
502 UCHAR NameLength;
503 WCHAR NameBuffer[8];
504 ULONG ExtensionLength;
505 WCHAR ExtensionBuffer[4];
506 ULONG LastIndexValue;
507 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
508
509 //
510 // RTL Splay and Balanced Links structures
511 //
512 typedef struct _RTL_SPLAY_LINKS
513 {
514 struct _RTL_SPLAY_LINKS *Parent;
515 struct _RTL_SPLAY_LINKS *LeftChild;
516 struct _RTL_SPLAY_LINKS *RightChild;
517 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
518
519 typedef struct _RTL_BALANCED_LINKS
520 {
521 struct _RTL_BALANCED_LINKS *Parent;
522 struct _RTL_BALANCED_LINKS *LeftChild;
523 struct _RTL_BALANCED_LINKS *RightChild;
524 CHAR Balance;
525 UCHAR Reserved[3];
526 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
527
528 //
529 // RTL Avl/Generic Tables
530 //
531 typedef struct _RTL_GENERIC_TABLE
532 {
533 PRTL_SPLAY_LINKS TableRoot;
534 LIST_ENTRY InsertOrderList;
535 PLIST_ENTRY OrderedPointer;
536 ULONG WhichOrderedElement;
537 ULONG NumberGenericTableElements;
538 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
539 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
540 PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
541 PVOID TableContext;
542 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
543
544 typedef struct _RTL_AVL_TABLE
545 {
546 RTL_BALANCED_LINKS BalancedRoot;
547 PVOID OrderedPointer;
548 ULONG WhichOrderedElement;
549 ULONG NumberGenericTableElements;
550 ULONG DepthOfTree;
551 PRTL_BALANCED_LINKS RestartKey;
552 ULONG DeleteCount;
553 PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
554 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
555 PRTL_AVL_FREE_ROUTINE FreeRoutine;
556 PVOID TableContext;
557 } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
558
559 //
560 // RtlQueryRegistry Data
561 //
562 typedef struct _RTL_QUERY_REGISTRY_TABLE
563 {
564 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
565 ULONG Flags;
566 PWSTR Name;
567 PVOID EntryContext;
568 ULONG DefaultType;
569 PVOID DefaultData;
570 ULONG DefaultLength;
571 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
572
573 //
574 // RTL Unicode Table Structures
575 //
576 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
577 {
578 CSHORT NodeTypeCode;
579 CSHORT NameLength;
580 struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
581 struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
582 RTL_SPLAY_LINKS Links;
583 PUNICODE_STRING Prefix;
584 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
585
586 typedef struct _UNICODE_PREFIX_TABLE
587 {
588 CSHORT NodeTypeCode;
589 CSHORT NameLength;
590 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
591 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
592 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
593
594 //
595 // Time Structure for RTL Time calls
596 //
597 typedef struct _TIME_FIELDS
598 {
599 CSHORT Year;
600 CSHORT Month;
601 CSHORT Day;
602 CSHORT Hour;
603 CSHORT Minute;
604 CSHORT Second;
605 CSHORT Milliseconds;
606 CSHORT Weekday;
607 } TIME_FIELDS, *PTIME_FIELDS;
608
609 //
610 // Activation Context
611 //
612 typedef PVOID PACTIVATION_CONTEXT;
613
614 //
615 // Activation Context Frame
616 //
617 typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
618 {
619 struct __RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous;
620 PACTIVATION_CONTEXT ActivationContext;
621 ULONG Flags;
622 } RTL_ACTIVATION_CONTEXT_STACK_FRAME,
623 *PRTL_ACTIVATION_CONTEXT_STACK_FRAME;
624
625 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
626 {
627 ULONG Size;
628 ULONG Format;
629 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame;
630 PVOID Extra1;
631 PVOID Extra2;
632 PVOID Extra3;
633 PVOID Extra4;
634 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED,
635 *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED;
636
637 #endif
638
639 //
640 // ACE Structure
641 //
642 typedef struct _ACE
643 {
644 ACE_HEADER Header;
645 ACCESS_MASK AccessMask;
646 } ACE, *PACE;
647
648 //
649 // Information Structures for RTL Debug Functions
650 //
651 typedef struct _RTL_PROCESS_MODULE_INFORMATION
652 {
653 ULONG Section;
654 PVOID MappedBase;
655 PVOID ImageBase;
656 ULONG ImageSize;
657 ULONG Flags;
658 USHORT LoadOrderIndex;
659 USHORT InitOrderIndex;
660 USHORT LoadCount;
661 USHORT OffsetToFileName;
662 CHAR FullPathName[256];
663 } RTL_PROCESS_MODULE_INFORMATION, *PRTL_PROCESS_MODULE_INFORMATION;
664
665 typedef struct _RTL_PROCESS_MODULES
666 {
667 ULONG NumberOfModules;
668 RTL_PROCESS_MODULE_INFORMATION Modules[1];
669 } RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES;
670
671 typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
672 {
673 ULONG NextOffset;
674 RTL_PROCESS_MODULE_INFORMATION BaseInfo;
675 ULONG ImageCheckSum;
676 ULONG TimeDateStamp;
677 PVOID DefaultBase;
678 } RTL_PROCESS_MODULE_INFORMATION_EX, *PRTL_PROCESS_MODULE_INFORMATION_EX;
679
680 typedef struct _RTL_HEAP_INFORMATION
681 {
682 PVOID BaseAddress;
683 ULONG Flags;
684 USHORT EntryOverhead;
685 USHORT CreatorBackTraceIndex;
686 ULONG BytesAllocated;
687 ULONG BytesCommitted;
688 ULONG NumberOfTags;
689 ULONG NumberOfEntries;
690 ULONG NumberOfPseudoTags;
691 ULONG PseudoTagGranularity;
692 ULONG Reserved[4];
693 PVOID Tags;
694 PVOID Entries;
695 } RTL_HEAP_INFORMATION, *PRTL_HEAP_INFORMATION;
696
697 typedef struct _RTL_PROCESS_HEAPS
698 {
699 ULONG NumberOfHeaps;
700 RTL_HEAP_INFORMATION Heaps[1];
701 } RTL_PROCESS_HEAPS, *PRTL_PROCESS_HEAPS;
702
703 typedef struct _RTL_PROCESS_LOCK_INFORMATION
704 {
705 PVOID Address;
706 USHORT Type;
707 USHORT CreatorBackTraceIndex;
708 ULONG OwnerThreadId;
709 ULONG ActiveCount;
710 ULONG ContentionCount;
711 ULONG EntryCount;
712 ULONG RecursionCount;
713 ULONG NumberOfSharedWaiters;
714 ULONG NumberOfExclusiveWaiters;
715 } RTL_PROCESS_LOCK_INFORMATION, *PRTL_PROCESS_LOCK_INFORMATION;
716
717 typedef struct _RTL_PROCESS_LOCKS
718 {
719 ULONG NumberOfLocks;
720 RTL_PROCESS_LOCK_INFORMATION Locks[1];
721 } RTL_PROCESS_LOCKS, *PRTL_PROCESS_LOCKS;
722
723 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
724 {
725 PVOID SymbolicBackTrace;
726 ULONG TraceCount;
727 USHORT Index;
728 USHORT Depth;
729 PVOID BackTrace[16];
730 } RTL_PROCESS_BACKTRACE_INFORMATION, *PRTL_PROCESS_BACKTRACE_INFORMATION;
731
732 typedef struct _RTL_PROCESS_BACKTRACES
733 {
734 ULONG CommittedMemory;
735 ULONG ReservedMemory;
736 ULONG NumberOfBackTraceLookups;
737 ULONG NumberOfBackTraces;
738 RTL_PROCESS_BACKTRACE_INFORMATION BackTraces[1];
739 } RTL_PROCESS_BACKTRACES, *PRTL_PROCESS_BACKTRACES;
740
741 typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
742 {
743 ULONG SizeStruct;
744 ULONG Option;
745 UCHAR OptionData[1];
746 //
747 // Option array continues below
748 //
749 } RTL_PROCESS_VERIFIER_OPTIONS, *PRTL_PROCESS_VERIFIER_OPTIONS;
750
751 typedef struct _RTL_DEBUG_INFORMATION
752 {
753 HANDLE SectionHandleClient;
754 PVOID ViewBaseClient;
755 PVOID ViewBaseTarget;
756 ULONG ViewBaseDelta;
757 HANDLE EventPairClient;
758 PVOID EventPairTarget;
759 HANDLE TargetProcessId;
760 HANDLE TargetThreadHandle;
761 ULONG Flags;
762 ULONG OffsetFree;
763 ULONG CommitSize;
764 ULONG ViewSize;
765 union
766 {
767 PRTL_PROCESS_MODULES Modules;
768 PRTL_PROCESS_MODULE_INFORMATION_EX ModulesEx;
769 };
770 PRTL_PROCESS_BACKTRACES BackTraces;
771 PRTL_PROCESS_HEAPS Heaps;
772 PRTL_PROCESS_LOCKS Locks;
773 HANDLE SpecificHeap;
774 HANDLE TargetProcessHandle;
775 RTL_PROCESS_VERIFIER_OPTIONS VerifierOptions;
776 HANDLE ProcessHeap;
777 HANDLE CriticalSectionHandle;
778 HANDLE CriticalSectionOwnerThread;
779 PVOID Reserved[4];
780 } RTL_DEBUG_INFORMATION, *PRTL_DEBUG_INFORMATION;
781
782 //
783 // Unload Event Trace Structure for RtlGetUnloadEventTrace
784 //
785 typedef struct _RTL_UNLOAD_EVENT_TRACE
786 {
787 PVOID BaseAddress;
788 ULONG SizeOfImage;
789 ULONG Sequence;
790 ULONG TimeDateStamp;
791 ULONG CheckSum;
792 WCHAR ImageName[32];
793 } RTL_UNLOAD_EVENT_TRACE, *PRTL_UNLOAD_EVENT_TRACE;
794
795 //
796 // RTL Handle Structures
797 //
798 typedef struct _RTL_HANDLE_TABLE_ENTRY
799 {
800 ULONG Flags;
801 struct _RTL_HANDLE_TABLE_ENTRY *NextFree;
802 } RTL_HANDLE_TABLE_ENTRY, *PRTL_HANDLE_TABLE_ENTRY;
803
804 typedef struct _RTL_HANDLE_TABLE
805 {
806 ULONG MaximumNumberOfHandles;
807 ULONG SizeOfHandleTableEntry;
808 ULONG Reserved[2];
809 PRTL_HANDLE_TABLE_ENTRY FreeHandles;
810 PRTL_HANDLE_TABLE_ENTRY CommittedHandles;
811 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles;
812 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles;
813 } RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
814
815 //
816 // Exception Record
817 //
818 typedef struct _EXCEPTION_REGISTRATION_RECORD
819 {
820 struct _EXCEPTION_REGISTRATION_RECORD *Next;
821 PEXCEPTION_ROUTINE Handler;
822 } EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
823
824 //
825 // Current Directory Structures
826 //
827 typedef struct _CURDIR
828 {
829 UNICODE_STRING DosPath;
830 HANDLE Handle;
831 } CURDIR, *PCURDIR;
832
833 typedef struct RTL_DRIVE_LETTER_CURDIR
834 {
835 USHORT Flags;
836 USHORT Length;
837 ULONG TimeStamp;
838 UNICODE_STRING DosPath;
839 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
840
841 //
842 // Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
843 //
844 typedef struct _RTL_ACQUIRE_STATE
845 {
846 HANDLE Token;
847 HANDLE OldImpersonationToken;
848 PTOKEN_PRIVILEGES OldPrivileges;
849 PTOKEN_PRIVILEGES NewPrivileges;
850 ULONG Flags;
851 UCHAR OldPrivBuffer[1024];
852 } RTL_ACQUIRE_STATE, *PRTL_ACQUIRE_STATE;
853
854 #ifndef NTOS_MODE_USER
855
856 //
857 // RTL Critical Section Structures
858 //
859 typedef struct _RTL_CRITICAL_SECTION_DEBUG
860 {
861 USHORT Type;
862 USHORT CreatorBackTraceIndex;
863 struct _RTL_CRITICAL_SECTION *CriticalSection;
864 LIST_ENTRY ProcessLocksList;
865 ULONG EntryCount;
866 ULONG ContentionCount;
867 ULONG Spare[2];
868 } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
869
870 typedef struct _RTL_CRITICAL_SECTION
871 {
872 PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
873 LONG LockCount;
874 LONG RecursionCount;
875 HANDLE OwningThread;
876 HANDLE LockSemaphore;
877 ULONG_PTR SpinCount;
878 } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
879
880 #endif
881
882 //
883 // RTL Range List Structures
884 //
885 typedef struct _RTL_RANGE_LIST
886 {
887 LIST_ENTRY ListHead;
888 ULONG Flags;
889 ULONG Count;
890 ULONG Stamp;
891 } RTL_RANGE_LIST, *PRTL_RANGE_LIST;
892
893 typedef struct _RTL_RANGE
894 {
895 ULONGLONG Start;
896 ULONGLONG End;
897 PVOID UserData;
898 PVOID Owner;
899 UCHAR Attributes;
900 UCHAR Flags;
901 } RTL_RANGE, *PRTL_RANGE;
902
903 typedef struct _RANGE_LIST_ITERATOR
904 {
905 PLIST_ENTRY RangeListHead;
906 PLIST_ENTRY MergedHead;
907 PVOID Current;
908 ULONG Stamp;
909 } RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
910
911 //
912 // RTL Resource
913 //
914 typedef struct _RTL_RESOURCE
915 {
916 RTL_CRITICAL_SECTION Lock;
917 HANDLE SharedSemaphore;
918 ULONG SharedWaiters;
919 HANDLE ExclusiveSemaphore;
920 ULONG ExclusiveWaiters;
921 LONG NumberActive;
922 HANDLE OwningThread;
923 ULONG TimeoutBoost;
924 PVOID DebugInfo;
925 } RTL_RESOURCE, *PRTL_RESOURCE;
926
927 //
928 // RTL Message Structures for PE Resources
929 //
930 typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
931 {
932 USHORT Length;
933 USHORT Flags;
934 CHAR Text[1];
935 } RTL_MESSAGE_RESOURCE_ENTRY, *PRTL_MESSAGE_RESOURCE_ENTRY;
936
937 typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
938 {
939 ULONG LowId;
940 ULONG HighId;
941 ULONG OffsetToEntries;
942 } RTL_MESSAGE_RESOURCE_BLOCK, *PRTL_MESSAGE_RESOURCE_BLOCK;
943
944 typedef struct _RTL_MESSAGE_RESOURCE_DATA
945 {
946 ULONG NumberOfBlocks;
947 RTL_MESSAGE_RESOURCE_BLOCK Blocks[1];
948 } RTL_MESSAGE_RESOURCE_DATA, *PRTL_MESSAGE_RESOURCE_DATA;
949
950 //
951 // Structures for RtlCreateUserProcess
952 //
953 typedef struct _RTL_USER_PROCESS_PARAMETERS
954 {
955 ULONG MaximumLength;
956 ULONG Length;
957 ULONG Flags;
958 ULONG DebugFlags;
959 HANDLE ConsoleHandle;
960 ULONG ConsoleFlags;
961 HANDLE StandardInput;
962 HANDLE StandardOutput;
963 HANDLE StandardError;
964 CURDIR CurrentDirectory;
965 UNICODE_STRING DllPath;
966 UNICODE_STRING ImagePathName;
967 UNICODE_STRING CommandLine;
968 PWSTR Environment;
969 ULONG StartingX;
970 ULONG StartingY;
971 ULONG CountX;
972 ULONG CountY;
973 ULONG CountCharsX;
974 ULONG CountCharsY;
975 ULONG FillAttribute;
976 ULONG WindowFlags;
977 ULONG ShowWindowFlags;
978 UNICODE_STRING WindowTitle;
979 UNICODE_STRING DesktopInfo;
980 UNICODE_STRING ShellInfo;
981 UNICODE_STRING RuntimeData;
982 RTL_DRIVE_LETTER_CURDIR CurrentDirectories[32];
983 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
984
985 typedef struct _RTL_USER_PROCESS_INFORMATION
986 {
987 ULONG Size;
988 HANDLE ProcessHandle;
989 HANDLE ThreadHandle;
990 CLIENT_ID ClientId;
991 SECTION_IMAGE_INFORMATION ImageInformation;
992 } RTL_USER_PROCESS_INFORMATION, *PRTL_USER_PROCESS_INFORMATION;
993
994 //
995 // RTL Atom Table Structures
996 //
997 typedef struct _RTL_ATOM_TABLE_ENTRY
998 {
999 struct _RTL_ATOM_TABLE_ENTRY *HashLink;
1000 USHORT HandleIndex;
1001 USHORT Atom;
1002 USHORT ReferenceCount;
1003 UCHAR Flags;
1004 UCHAR NameLength;
1005 WCHAR Name[1];
1006 } RTL_ATOM_TABLE_ENTRY, *PRTL_ATOM_TABLE_ENTRY;
1007
1008 typedef struct _RTL_ATOM_TABLE
1009 {
1010 ULONG Signature;
1011 union
1012 {
1013 #ifdef NTOS_MODE_USER
1014 RTL_CRITICAL_SECTION CriticalSection;
1015 #else
1016 FAST_MUTEX FastMutex;
1017 #endif
1018 };
1019 union
1020 {
1021 #ifdef NTOS_MODE_USER
1022 RTL_HANDLE_TABLE RtlHandleTable;
1023 #else
1024 PHANDLE_TABLE ExHandleTable;
1025 #endif
1026 };
1027 ULONG NumberOfBuckets;
1028 PRTL_ATOM_TABLE_ENTRY Buckets[1];
1029 } RTL_ATOM_TABLE, *PRTL_ATOM_TABLE;
1030
1031 #ifndef NTOS_MODE_USER
1032
1033 //
1034 // System Time and Timezone Structures
1035 //
1036 typedef struct _SYSTEMTIME
1037 {
1038 USHORT wYear;
1039 USHORT wMonth;
1040 USHORT wDayOfWeek;
1041 USHORT wDay;
1042 USHORT wHour;
1043 USHORT wMinute;
1044 USHORT wSecond;
1045 USHORT wMilliseconds;
1046 } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
1047
1048 typedef struct _TIME_ZONE_INFORMATION
1049 {
1050 LONG Bias;
1051 WCHAR StandardName[32];
1052 SYSTEMTIME StandardDate;
1053 LONG StandardBias;
1054 WCHAR DaylightName[32];
1055 SYSTEMTIME DaylightDate;
1056 LONG DaylightBias;
1057 } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
1058
1059 #endif
1060
1061 //
1062 // Hotpatch Header
1063 //
1064 typedef struct _RTL_PATCH_HEADER
1065 {
1066 LIST_ENTRY PatchList;
1067 PVOID PatchImageBase;
1068 struct _RTL_PATCH_HEADER *NextPath;
1069 ULONG PatchFlags;
1070 LONG PatchRefCount;
1071 struct _HOTPATCH_HEADER *HotpatchHeader;
1072 UNICODE_STRING TargetDllName;
1073 PVOID TargetDllBase;
1074 PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry;
1075 PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry;
1076 struct _SYSTEM_HOTPATCH_CODE_INFORMATION *CodeInfo;
1077 } RTL_PATCH_HEADER, *PRTL_PATCH_HEADER;
1078
1079 //
1080 // Header for NLS Files
1081 //
1082 typedef struct _NLS_FILE_HEADER
1083 {
1084 USHORT HeaderSize;
1085 USHORT CodePage;
1086 USHORT MaximumCharacterSize;
1087 USHORT DefaultChar;
1088 USHORT UniDefaultChar;
1089 USHORT TransDefaultChar;
1090 USHORT TransUniDefaultChar;
1091 USHORT DBCSCodePage;
1092 UCHAR LeadByte[MAXIMUM_LEADBYTES];
1093 } NLS_FILE_HEADER, *PNLS_FILE_HEADER;
1094
1095 //
1096 // Stack Traces
1097 //
1098 typedef struct _RTL_STACK_TRACE_ENTRY
1099 {
1100 struct _RTL_STACK_TRACE_ENTRY *HashChain;
1101 ULONG TraceCount;
1102 USHORT Index;
1103 USHORT Depth;
1104 PVOID BackTrace[32];
1105 } RTL_STACK_TRACE_ENTRY, *PRTL_STACK_TRACE_ENTRY;
1106
1107 typedef struct _STACK_TRACE_DATABASE
1108 {
1109 RTL_CRITICAL_SECTION CriticalSection;
1110 } STACK_TRACE_DATABASE, *PSTACK_TRACE_DATABASE;
1111
1112 #ifndef NTOS_MODE_USER
1113
1114 //
1115 // Message Resource Entry, Block and Data
1116 //
1117 typedef struct _MESSAGE_RESOURCE_ENTRY
1118 {
1119 USHORT Length;
1120 USHORT Flags;
1121 UCHAR Text[ANYSIZE_ARRAY];
1122 } MESSAGE_RESOURCE_ENTRY, *PMESSAGE_RESOURCE_ENTRY;
1123
1124 typedef struct _MESSAGE_RESOURCE_BLOCK
1125 {
1126 ULONG LowId;
1127 ULONG HighId;
1128 ULONG OffsetToEntries;
1129 } MESSAGE_RESOURCE_BLOCK, *PMESSAGE_RESOURCE_BLOCK;
1130
1131 typedef struct _MESSAGE_RESOURCE_DATA
1132 {
1133 ULONG NumberOfBlocks;
1134 MESSAGE_RESOURCE_BLOCK Blocks[ANYSIZE_ARRAY];
1135 } MESSAGE_RESOURCE_DATA, *PMESSAGE_RESOURCE_DATA;
1136
1137 #endif
1138 #endif