5f9a99d94ee78fb86685061db2883110282008bf
[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 <mmtypes.h>
27 #include <ldrtypes.h>
28
29 //
30 // Maximum Atom Length
31 //
32 #define RTL_MAXIMUM_ATOM_LENGTH 255
33
34 //
35 // Process Parameters Flags
36 //
37 #define RTL_USER_PROCESS_PARAMETERS_NORMALIZED 0x01
38 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_USER 0x02
39 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_SERVER 0x04
40 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_KERNEL 0x08
41 #define RTL_USER_PROCESS_PARAMETERS_UNKNOWN 0x10
42 #define RTL_USER_PROCESS_PARAMETERS_RESERVE_1MB 0x20
43 #define RTL_USER_PROCESS_PARAMETERS_DISABLE_HEAP_CHECKS 0x100
44 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_1 0x200
45 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_2 0x400
46 #define RTL_USER_PROCESS_PARAMETERS_PRIVATE_DLL_PATH 0x1000
47 #define RTL_USER_PROCESS_PARAMETERS_LOCAL_DLL_PATH 0x2000
48 #define RTL_USER_PROCESS_PARAMETERS_NX 0x20000
49
50 //
51 // Exception Flags
52 //
53 #define EXCEPTION_CHAIN_END ((PEXCEPTION_REGISTRATION_RECORD)-1)
54 #define EXCEPTION_UNWINDING 0x02
55 #define EXCEPTION_EXIT_UNWIND 0x04
56 #define EXCEPTION_STACK_INVALID 0x08
57 #define EXCEPTION_UNWIND (EXCEPTION_UNWINDING + EXCEPTION_EXIT_UNWIND)
58 #define EXCEPTION_NESTED_CALL 0x10
59 #define EXCEPTION_TARGET_UNWIND 0x20
60 #define EXCEPTION_COLLIDED_UNWIND 0x20
61
62 //
63 // Range and Range List Flags
64 //
65 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
66 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
67
68 #define RTL_RANGE_SHARED 0x01
69 #define RTL_RANGE_CONFLICT 0x02
70
71 //
72 // Activation Context Frame Flags
73 //
74 #define RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_FORMAT_WHISTLER \
75 0x1
76
77 //
78 // Public Heap Flags
79 //
80 #if !defined(NTOS_MODE_USER) && !defined(_NTIFS_)
81 #define HEAP_NO_SERIALIZE 0x00000001
82 #define HEAP_GROWABLE 0x00000002
83 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
84 #define HEAP_ZERO_MEMORY 0x00000008
85 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
86 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
87 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
88 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
89 #define HEAP_CREATE_ALIGN_16 0x00010000
90 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
91 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
92 #endif
93
94 //
95 // User-Defined Heap Flags and Classes
96 //
97 #define HEAP_SETTABLE_USER_VALUE 0x00000100
98 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
99 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
100 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
101 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
102 #define HEAP_CLASS_0 0x00000000
103 #define HEAP_CLASS_1 0x00001000
104 #define HEAP_CLASS_2 0x00002000
105 #define HEAP_CLASS_3 0x00003000
106 #define HEAP_CLASS_4 0x00004000
107 #define HEAP_CLASS_5 0x00005000
108 #define HEAP_CLASS_6 0x00006000
109 #define HEAP_CLASS_7 0x00007000
110 #define HEAP_CLASS_8 0x00008000
111 #define HEAP_CLASS_MASK 0x0000F000
112
113 //
114 // Internal HEAP Structure Flags
115 //
116 #define HEAP_FLAG_PAGE_ALLOCS 0x01000000
117 #define HEAP_PROTECTION_ENABLED 0x02000000
118 #define HEAP_BREAK_WHEN_OUT_OF_VM 0x04000000
119 #define HEAP_NO_ALIGNMENT 0x08000000
120 #define HEAP_CAPTURE_STACK_BACKTRACES 0x08000000
121 #define HEAP_SKIP_VALIDATION_CHECKS 0x10000000
122 #define HEAP_VALIDATE_ALL_ENABLED 0x20000000
123 #define HEAP_VALIDATE_PARAMETERS_ENABLED 0x40000000
124 #define HEAP_LOCK_USER_ALLOCATED 0x80000000
125
126 //
127 // Heap Validation Flags
128 //
129 #define HEAP_CREATE_VALID_MASK \
130 (HEAP_NO_SERIALIZE | \
131 HEAP_GROWABLE | \
132 HEAP_GENERATE_EXCEPTIONS | \
133 HEAP_ZERO_MEMORY | \
134 HEAP_REALLOC_IN_PLACE_ONLY | \
135 HEAP_TAIL_CHECKING_ENABLED | \
136 HEAP_FREE_CHECKING_ENABLED | \
137 HEAP_DISABLE_COALESCE_ON_FREE | \
138 HEAP_CLASS_MASK | \
139 HEAP_CREATE_ALIGN_16 | \
140 HEAP_CREATE_ENABLE_TRACING | \
141 HEAP_CREATE_ENABLE_EXECUTE)
142 #ifdef C_ASSERT
143 C_ASSERT(HEAP_CREATE_VALID_MASK == 0x0007F0FF);
144 #endif
145
146 //
147 // Native image architecture
148 //
149 #if defined(_M_IX86)
150 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_I386
151 #elif defined(_M_ARM)
152 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_ARM
153 #elif defined(_M_AMD64)
154 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_AMD64
155 #else
156 #error Define these please!
157 #endif
158
159 //
160 // Registry Keys
161 //
162 #define RTL_REGISTRY_ABSOLUTE 0
163 #define RTL_REGISTRY_SERVICES 1
164 #define RTL_REGISTRY_CONTROL 2
165 #define RTL_REGISTRY_WINDOWS_NT 3
166 #define RTL_REGISTRY_DEVICEMAP 4
167 #define RTL_REGISTRY_USER 5
168 #define RTL_REGISTRY_MAXIMUM 6
169 #define RTL_REGISTRY_HANDLE 0x40000000
170 #define RTL_REGISTRY_OPTIONAL 0x80000000
171 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
172 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
173 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
174 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
175 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
176 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
177 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
178
179 //
180 // Versioning
181 //
182 #define VER_MINORVERSION 0x0000001
183 #define VER_MAJORVERSION 0x0000002
184 #define VER_BUILDNUMBER 0x0000004
185 #define VER_PLATFORMID 0x0000008
186 #define VER_SERVICEPACKMINOR 0x0000010
187 #define VER_SERVICEPACKMAJOR 0x0000020
188 #define VER_SUITENAME 0x0000040
189 #define VER_PRODUCT_TYPE 0x0000080
190 #define VER_PLATFORM_WIN32s 0
191 #define VER_PLATFORM_WIN32_WINDOWS 1
192 #define VER_PLATFORM_WIN32_NT 2
193 #define VER_EQUAL 1
194 #define VER_GREATER 2
195 #define VER_GREATER_EQUAL 3
196 #define VER_LESS 4
197 #define VER_LESS_EQUAL 5
198 #define VER_AND 6
199 #define VER_OR 7
200 #define VER_CONDITION_MASK 7
201 #define VER_NUM_BITS_PER_CONDITION_MASK 3
202
203 //
204 // Timezone IDs
205 //
206 #define TIME_ZONE_ID_UNKNOWN 0
207 #define TIME_ZONE_ID_STANDARD 1
208 #define TIME_ZONE_ID_DAYLIGHT 2
209
210 //
211 // Maximum Path Length
212 //
213 #define MAX_PATH 260
214
215 //
216 // RTL Lock Type (Critical Section or Resource)
217 //
218 #define RTL_CRITSECT_TYPE 0
219 #define RTL_RESOURCE_TYPE 1
220
221 //
222 // RtlAcquirePrivileges Flags
223 //
224 #define RTL_ACQUIRE_PRIVILEGE_IMPERSONATE 1
225 #define RTL_ACQUIRE_PRIVILEGE_PROCESS 2
226
227 #ifdef NTOS_MODE_USER
228
229 //
230 // String Hash Algorithms
231 //
232 #define HASH_STRING_ALGORITHM_DEFAULT 0
233 #define HASH_STRING_ALGORITHM_X65599 1
234 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
235
236 //
237 // RtlDuplicateString Flags
238 //
239 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
240 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
241
242 //
243 // RtlFindCharInUnicodeString Flags
244 //
245 #define RTL_FIND_CHAR_IN_UNICODE_STRING_CASE_INSENSITIVE 4
246
247 //
248 // RtlImageNtHeaderEx Flags
249 //
250 #define RTL_IMAGE_NT_HEADER_EX_FLAG_NO_RANGE_CHECK 0x00000001
251
252 //
253 // Codepages
254 //
255 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
256 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
257 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
258
259 //
260 // Activation Contexts
261 //
262 #define INVALID_ACTIVATION_CONTEXT (PVOID)0xFFFFFFFF
263
264 //
265 // C++ CONST casting
266 //
267 #if defined(__cplusplus)
268 #define RTL_CONST_CAST(type) const_cast<type>
269 #else
270 #define RTL_CONST_CAST(type) (type)
271 #endif
272
273 //
274 // Constant String Macro
275 //
276 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
277 { \
278 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
279 sizeof(__SOURCE_STRING__), \
280 (__SOURCE_STRING__) \
281 }
282
283 //
284 // Constant Object Attributes Macro
285 //
286 #define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a) \
287 { \
288 sizeof(OBJECT_ATTRIBUTES), \
289 NULL, \
290 RTL_CONST_CAST(PUNICODE_STRING)(n), \
291 a, \
292 NULL, \
293 NULL \
294 }
295
296 #define RTL_INIT_OBJECT_ATTRIBUTES(n, a) \
297 RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
298
299 #else /* NTOS_MODE_USER */
300 //
301 // Message Resource Flag
302 //
303 #define MESSAGE_RESOURCE_UNICODE 0x0001
304
305 #endif /* !NTOS_MODE_USER */
306 #define MAXIMUM_LEADBYTES 12
307
308 //
309 // RTL Debug Queries
310 //
311 #define RTL_DEBUG_QUERY_MODULES 0x01
312 #define RTL_DEBUG_QUERY_BACKTRACES 0x02
313 #define RTL_DEBUG_QUERY_HEAPS 0x04
314 #define RTL_DEBUG_QUERY_HEAP_TAGS 0x08
315 #define RTL_DEBUG_QUERY_HEAP_BLOCKS 0x10
316 #define RTL_DEBUG_QUERY_LOCKS 0x20
317
318 //
319 // RTL Handle Flags
320 //
321 #define RTL_HANDLE_VALID 0x1
322
323 //
324 // RTL Atom Flags
325 //
326 #define RTL_ATOM_IS_PINNED 0x1
327
328 //
329 // Critical section lock bits
330 //
331 #define CS_LOCK_BIT 0x1
332 #define CS_LOCK_BIT_V 0x0
333 #define CS_LOCK_WAITER_WOKEN 0x2
334 #define CS_LOCK_WAITER_INC 0x4
335
336 //
337 // Codepage Tags
338 //
339 #ifdef NTOS_MODE_USER
340 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG;
341 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
342
343 //
344 // Constant String Macro
345 //
346 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
347 { \
348 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
349 sizeof(__SOURCE_STRING__), \
350 (__SOURCE_STRING__) \
351 }
352
353 #endif /* NTOS_MODE_USER */
354
355 #ifdef NTOS_MODE_USER
356
357 //
358 // Table and Compare result types
359 //
360 typedef enum _TABLE_SEARCH_RESULT
361 {
362 TableEmptyTree,
363 TableFoundNode,
364 TableInsertAsLeft,
365 TableInsertAsRight
366 } TABLE_SEARCH_RESULT;
367
368 typedef enum _RTL_GENERIC_COMPARE_RESULTS
369 {
370 GenericLessThan,
371 GenericGreaterThan,
372 GenericEqual
373 } RTL_GENERIC_COMPARE_RESULTS;
374
375 #endif /* NTOS_MODE_USER */
376
377 //
378 // RTL Path Types
379 //
380 typedef enum _RTL_PATH_TYPE
381 {
382 RtlPathTypeUnknown,
383 RtlPathTypeUncAbsolute,
384 RtlPathTypeDriveAbsolute,
385 RtlPathTypeDriveRelative,
386 RtlPathTypeRooted,
387 RtlPathTypeRelative,
388 RtlPathTypeLocalDevice,
389 RtlPathTypeRootLocalDevice,
390 } RTL_PATH_TYPE;
391
392 #ifndef NTOS_MODE_USER
393
394 //
395 // Heap Information Class
396 //
397 typedef enum _HEAP_INFORMATION_CLASS
398 {
399 HeapCompatibilityInformation,
400 HeapEnableTerminationOnCorruption
401 } HEAP_INFORMATION_CLASS;
402
403 //
404 // Callback function for RTL Timers or Registered Waits
405 //
406 typedef VOID
407 (NTAPI *WAITORTIMERCALLBACKFUNC)(
408 PVOID pvContext,
409 BOOLEAN fTimerOrWaitFired
410 );
411
412 //
413 // Handler during Vectored RTL Exceptions
414 //
415 typedef LONG
416 (NTAPI *PVECTORED_EXCEPTION_HANDLER)(
417 PEXCEPTION_POINTERS ExceptionPointers
418 );
419
420 //
421 // Worker Thread Callback for Rtl
422 //
423 typedef VOID
424 (NTAPI *WORKERCALLBACKFUNC)(
425 IN PVOID Context
426 );
427
428 #else /* !NTOS_MODE_USER */
429
430 //
431 // Handler during regular RTL Exceptions
432 //
433 typedef EXCEPTION_DISPOSITION
434 (NTAPI *PEXCEPTION_ROUTINE)(
435 IN struct _EXCEPTION_RECORD *ExceptionRecord,
436 IN PVOID EstablisherFrame,
437 IN OUT struct _CONTEXT *ContextRecord,
438 IN OUT PVOID DispatcherContext
439 );
440
441 //
442 // RTL Library Allocation/Free Routines
443 //
444 typedef PVOID
445 (NTAPI *PRTL_ALLOCATE_STRING_ROUTINE)(
446 SIZE_T NumberOfBytes
447 );
448
449 typedef PVOID
450 (NTAPI *PRTL_REALLOCATE_STRING_ROUTINE)(
451 SIZE_T NumberOfBytes,
452 PVOID Buffer
453 );
454
455 typedef
456 VOID
457 (NTAPI *PRTL_FREE_STRING_ROUTINE)(
458 PVOID Buffer
459 );
460
461 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine;
462 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine;
463 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine;
464
465 #endif /* NTOS_MODE_USER */
466
467 //
468 // Callback for RTL Heap Enumeration
469 //
470 typedef NTSTATUS
471 (NTAPI *PHEAP_ENUMERATION_ROUTINE)(
472 IN PVOID HeapHandle,
473 IN PVOID UserParam
474 );
475
476 //
477 // Thread and Process Start Routines for RtlCreateUserThread/Process
478 //
479 typedef ULONG (NTAPI *PTHREAD_START_ROUTINE)(
480 PVOID Parameter
481 );
482
483 typedef VOID
484 (NTAPI *PRTL_BASE_PROCESS_START_ROUTINE)(
485 PTHREAD_START_ROUTINE StartAddress,
486 PVOID Parameter
487 );
488
489 //
490 // Declare empty structure definitions so that they may be referenced by
491 // routines before they are defined
492 //
493 struct _RTL_AVL_TABLE;
494 struct _RTL_GENERIC_TABLE;
495 struct _RTL_RANGE;
496
497 //
498 // Routines and callbacks for the RTL AVL/Generic Table package
499 //
500 #ifdef NTOS_MODE_USER
501 typedef NTSTATUS
502 (NTAPI RTL_AVL_MATCH_FUNCTION)(
503 struct _RTL_AVL_TABLE *Table,
504 PVOID UserData,
505 PVOID MatchData
506 );
507 typedef RTL_AVL_MATCH_FUNCTION *PRTL_AVL_MATCH_FUNCTION;
508
509 typedef RTL_GENERIC_COMPARE_RESULTS
510 (NTAPI RTL_AVL_COMPARE_ROUTINE) (
511 struct _RTL_AVL_TABLE *Table,
512 PVOID FirstStruct,
513 PVOID SecondStruct
514 );
515 typedef RTL_AVL_COMPARE_ROUTINE *PRTL_AVL_COMPARE_ROUTINE;
516
517 typedef RTL_GENERIC_COMPARE_RESULTS
518 (NTAPI RTL_GENERIC_COMPARE_ROUTINE) (
519 struct _RTL_GENERIC_TABLE *Table,
520 PVOID FirstStruct,
521 PVOID SecondStruct
522 );
523 typedef RTL_GENERIC_COMPARE_ROUTINE *PRTL_GENERIC_COMPARE_ROUTINE;
524
525 typedef PVOID
526 (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE) (
527 struct _RTL_GENERIC_TABLE *Table,
528 CLONG ByteSize
529 );
530 typedef RTL_GENERIC_ALLOCATE_ROUTINE *PRTL_GENERIC_ALLOCATE_ROUTINE;
531
532 typedef PVOID
533 (NTAPI RTL_AVL_ALLOCATE_ROUTINE) (
534 struct _RTL_AVL_TABLE *Table,
535 CLONG ByteSize
536 );
537 typedef RTL_AVL_ALLOCATE_ROUTINE *PRTL_AVL_ALLOCATE_ROUTINE;
538
539 typedef VOID
540 (NTAPI RTL_GENERIC_FREE_ROUTINE) (
541 struct _RTL_GENERIC_TABLE *Table,
542 PVOID Buffer
543 );
544 typedef RTL_GENERIC_FREE_ROUTINE *PRTL_GENERIC_FREE_ROUTINE;
545
546 typedef VOID
547 (NTAPI RTL_AVL_FREE_ROUTINE) (
548 struct _RTL_AVL_TABLE *Table,
549 PVOID Buffer
550 );
551 typedef RTL_AVL_FREE_ROUTINE *PRTL_AVL_FREE_ROUTINE;
552
553 #ifdef RTL_USE_AVL_TABLES
554 #undef RTL_GENERIC_COMPARE_ROUTINE
555 #undef PRTL_GENERIC_COMPARE_ROUTINE
556 #undef RTL_GENERIC_ALLOCATE_ROUTINE
557 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
558 #undef RTL_GENERIC_FREE_ROUTINE
559 #undef PRTL_GENERIC_FREE_ROUTINE
560
561 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
562 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
563 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
564 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
565 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
566 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
567 #endif /* RTL_USE_AVL_TABLES */
568
569 #endif /* NTOS_MODE_USER */
570
571 //
572 // RTL Query Registry callback
573 //
574 #ifdef NTOS_MODE_USER
575 typedef NTSTATUS
576 (NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
577 IN PWSTR ValueName,
578 IN ULONG ValueType,
579 IN PVOID ValueData,
580 IN ULONG ValueLength,
581 IN PVOID Context,
582 IN PVOID EntryContext
583 );
584 #endif
585
586 //
587 // RTL Secure Memory callbacks
588 //
589 #ifdef NTOS_MODE_USER
590 typedef NTSTATUS
591 (NTAPI *PRTL_SECURE_MEMORY_CACHE_CALLBACK)(
592 IN PVOID Address,
593 IN SIZE_T Length
594 );
595 #endif
596
597 //
598 // RTL Range List callbacks
599 //
600 #ifdef NTOS_MODE_USER
601 typedef BOOLEAN
602 (NTAPI *PRTL_CONFLICT_RANGE_CALLBACK)(
603 PVOID Context,
604 struct _RTL_RANGE *Range
605 );
606
607 //
608 // Custom Heap Commit Routine for RtlCreateHeap
609 //
610 typedef NTSTATUS
611 (NTAPI * PRTL_HEAP_COMMIT_ROUTINE)(
612 IN PVOID Base,
613 IN OUT PVOID *CommitAddress,
614 IN OUT PSIZE_T CommitSize
615 );
616
617 //
618 // Parameters for RtlCreateHeap
619 //
620 typedef struct _RTL_HEAP_PARAMETERS
621 {
622 ULONG Length;
623 SIZE_T SegmentReserve;
624 SIZE_T SegmentCommit;
625 SIZE_T DeCommitFreeBlockThreshold;
626 SIZE_T DeCommitTotalFreeThreshold;
627 SIZE_T MaximumAllocationSize;
628 SIZE_T VirtualMemoryThreshold;
629 SIZE_T InitialCommit;
630 SIZE_T InitialReserve;
631 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
632 SIZE_T Reserved[2];
633 } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
634
635 //
636 // RTL Bitmap structures
637 //
638 typedef struct _RTL_BITMAP
639 {
640 ULONG SizeOfBitMap;
641 PULONG Buffer;
642 } RTL_BITMAP, *PRTL_BITMAP;
643
644 typedef struct _RTL_BITMAP_RUN
645 {
646 ULONG StartingIndex;
647 ULONG NumberOfBits;
648 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
649
650 //
651 // RtlGenerateXxxName context
652 //
653 typedef struct _GENERATE_NAME_CONTEXT
654 {
655 USHORT Checksum;
656 BOOLEAN CheckSumInserted;
657 UCHAR NameLength;
658 WCHAR NameBuffer[8];
659 ULONG ExtensionLength;
660 WCHAR ExtensionBuffer[4];
661 ULONG LastIndexValue;
662 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
663
664 //
665 // RTL Splay and Balanced Links structures
666 //
667 typedef struct _RTL_SPLAY_LINKS
668 {
669 struct _RTL_SPLAY_LINKS *Parent;
670 struct _RTL_SPLAY_LINKS *LeftChild;
671 struct _RTL_SPLAY_LINKS *RightChild;
672 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
673
674 typedef struct _RTL_BALANCED_LINKS
675 {
676 struct _RTL_BALANCED_LINKS *Parent;
677 struct _RTL_BALANCED_LINKS *LeftChild;
678 struct _RTL_BALANCED_LINKS *RightChild;
679 CHAR Balance;
680 UCHAR Reserved[3];
681 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
682
683 //
684 // RTL Avl/Generic Tables
685 //
686 #ifndef RTL_USE_AVL_TABLES
687 typedef struct _RTL_GENERIC_TABLE
688 {
689 PRTL_SPLAY_LINKS TableRoot;
690 LIST_ENTRY InsertOrderList;
691 PLIST_ENTRY OrderedPointer;
692 ULONG WhichOrderedElement;
693 ULONG NumberGenericTableElements;
694 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
695 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
696 PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
697 PVOID TableContext;
698 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
699 #endif /* !RTL_USE_AVL_TABLES */
700
701 typedef struct _RTL_AVL_TABLE
702 {
703 RTL_BALANCED_LINKS BalancedRoot;
704 PVOID OrderedPointer;
705 ULONG WhichOrderedElement;
706 ULONG NumberGenericTableElements;
707 ULONG DepthOfTree;
708 PRTL_BALANCED_LINKS RestartKey;
709 ULONG DeleteCount;
710 PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
711 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
712 PRTL_AVL_FREE_ROUTINE FreeRoutine;
713 PVOID TableContext;
714 } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
715
716 #ifdef RTL_USE_AVL_TABLES
717 #undef RTL_GENERIC_TABLE
718 #undef PRTL_GENERIC_TABLE
719
720 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
721 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
722 #endif /* RTL_USE_AVL_TABLES */
723
724 //
725 // RTL Compression Buffer
726 //
727 typedef struct _COMPRESSED_DATA_INFO {
728 USHORT CompressionFormatAndEngine;
729 UCHAR CompressionUnitShift;
730 UCHAR ChunkShift;
731 UCHAR ClusterShift;
732 UCHAR Reserved;
733 USHORT NumberOfChunks;
734 ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
735 } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
736
737 //
738 // RtlQueryRegistry Data
739 //
740 typedef struct _RTL_QUERY_REGISTRY_TABLE
741 {
742 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
743 ULONG Flags;
744 PCWSTR Name;
745 PVOID EntryContext;
746 ULONG DefaultType;
747 PVOID DefaultData;
748 ULONG DefaultLength;
749 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
750
751 //
752 // RTL Unicode Table Structures
753 //
754 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
755 {
756 CSHORT NodeTypeCode;
757 CSHORT NameLength;
758 struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
759 struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
760 RTL_SPLAY_LINKS Links;
761 PUNICODE_STRING Prefix;
762 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
763
764 typedef struct _UNICODE_PREFIX_TABLE
765 {
766 CSHORT NodeTypeCode;
767 CSHORT NameLength;
768 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
769 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
770 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
771
772 //
773 // Time Structure for RTL Time calls
774 //
775 typedef struct _TIME_FIELDS
776 {
777 CSHORT Year;
778 CSHORT Month;
779 CSHORT Day;
780 CSHORT Hour;
781 CSHORT Minute;
782 CSHORT Second;
783 CSHORT Milliseconds;
784 CSHORT Weekday;
785 } TIME_FIELDS, *PTIME_FIELDS;
786
787 //
788 // Activation Context
789 //
790 typedef PVOID PACTIVATION_CONTEXT;
791
792 //
793 // Activation Context Frame
794 //
795 typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
796 {
797 struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous;
798 PACTIVATION_CONTEXT ActivationContext;
799 ULONG Flags;
800 } RTL_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME;
801
802 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
803 {
804 SIZE_T Size;
805 ULONG Format;
806 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame;
807 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC;
808
809 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
810 {
811 SIZE_T Size;
812 ULONG Format;
813 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame;
814 PVOID Extra1;
815 PVOID Extra2;
816 PVOID Extra3;
817 PVOID Extra4;
818 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED;
819
820 typedef RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME;
821 typedef PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME;
822
823 #if (NTDDI_VERSION >= NTDDI_WS03)
824 typedef struct _ACTIVATION_CONTEXT_STACK
825 {
826 PRTL_ACTIVATION_CONTEXT_STACK_FRAME ActiveFrame;
827 LIST_ENTRY FrameListCache;
828 ULONG Flags;
829 ULONG NextCookieSequenceNumber;
830 ULONG StackId;
831 } ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK;
832 #else
833 typedef struct _ACTIVATION_CONTEXT_STACK
834 {
835 ULONG Flags;
836 ULONG NextCookieSequenceNumber;
837 PVOID ActiveFrame;
838 LIST_ENTRY FrameListCache;
839 } ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK;
840 #endif
841
842 #endif /* NTOS_MODE_USER */
843
844 //
845 // ACE Structure
846 //
847 typedef struct _ACE
848 {
849 ACE_HEADER Header;
850 ACCESS_MASK AccessMask;
851 } ACE, *PACE;
852
853 //
854 // Information Structures for RTL Debug Functions
855 //
856 typedef struct _RTL_PROCESS_MODULE_INFORMATION
857 {
858 ULONG Section;
859 PVOID MappedBase;
860 PVOID ImageBase;
861 ULONG ImageSize;
862 ULONG Flags;
863 USHORT LoadOrderIndex;
864 USHORT InitOrderIndex;
865 USHORT LoadCount;
866 USHORT OffsetToFileName;
867 CHAR FullPathName[256];
868 } RTL_PROCESS_MODULE_INFORMATION, *PRTL_PROCESS_MODULE_INFORMATION;
869
870 typedef struct _RTL_PROCESS_MODULES
871 {
872 ULONG NumberOfModules;
873 RTL_PROCESS_MODULE_INFORMATION Modules[1];
874 } RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES;
875
876 typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
877 {
878 ULONG NextOffset;
879 RTL_PROCESS_MODULE_INFORMATION BaseInfo;
880 ULONG ImageCheckSum;
881 ULONG TimeDateStamp;
882 PVOID DefaultBase;
883 } RTL_PROCESS_MODULE_INFORMATION_EX, *PRTL_PROCESS_MODULE_INFORMATION_EX;
884
885 typedef struct _RTL_HEAP_TAG_INFO
886 {
887 ULONG NumberOfAllocations;
888 ULONG NumberOfFrees;
889 ULONG BytesAllocated;
890 } RTL_HEAP_TAG_INFO, *PRTL_HEAP_TAG_INFO;
891
892 typedef struct _RTL_HEAP_USAGE_ENTRY
893 {
894 struct _RTL_HEAP_USAGE_ENTRY *Next;
895 } RTL_HEAP_USAGE_ENTRY, *PRTL_HEAP_USAGE_ENTRY;
896
897 typedef struct _RTL_HEAP_USAGE
898 {
899 ULONG Length;
900 ULONG BytesAllocated;
901 ULONG BytesCommitted;
902 ULONG BytesReserved;
903 ULONG BytesReservedMaximum;
904 PRTL_HEAP_USAGE_ENTRY Entries;
905 PRTL_HEAP_USAGE_ENTRY AddedEntries;
906 PRTL_HEAP_USAGE_ENTRY RemovedEntries;
907 UCHAR Reserved[32];
908 } RTL_HEAP_USAGE, *PRTL_HEAP_USAGE;
909
910 typedef struct _RTL_HEAP_INFORMATION
911 {
912 PVOID BaseAddress;
913 ULONG Flags;
914 USHORT EntryOverhead;
915 USHORT CreatorBackTraceIndex;
916 ULONG BytesAllocated;
917 ULONG BytesCommitted;
918 ULONG NumberOfTags;
919 ULONG NumberOfEntries;
920 ULONG NumberOfPseudoTags;
921 ULONG PseudoTagGranularity;
922 ULONG Reserved[4];
923 PVOID Tags;
924 PVOID Entries;
925 } RTL_HEAP_INFORMATION, *PRTL_HEAP_INFORMATION;
926
927 typedef struct _RTL_PROCESS_HEAPS
928 {
929 ULONG NumberOfHeaps;
930 RTL_HEAP_INFORMATION Heaps[1];
931 } RTL_PROCESS_HEAPS, *PRTL_PROCESS_HEAPS;
932
933 typedef struct _RTL_PROCESS_LOCK_INFORMATION
934 {
935 PVOID Address;
936 USHORT Type;
937 USHORT CreatorBackTraceIndex;
938 ULONG OwnerThreadId;
939 ULONG ActiveCount;
940 ULONG ContentionCount;
941 ULONG EntryCount;
942 ULONG RecursionCount;
943 ULONG NumberOfSharedWaiters;
944 ULONG NumberOfExclusiveWaiters;
945 } RTL_PROCESS_LOCK_INFORMATION, *PRTL_PROCESS_LOCK_INFORMATION;
946
947 typedef struct _RTL_PROCESS_LOCKS
948 {
949 ULONG NumberOfLocks;
950 RTL_PROCESS_LOCK_INFORMATION Locks[1];
951 } RTL_PROCESS_LOCKS, *PRTL_PROCESS_LOCKS;
952
953 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
954 {
955 PVOID SymbolicBackTrace;
956 ULONG TraceCount;
957 USHORT Index;
958 USHORT Depth;
959 PVOID BackTrace[16];
960 } RTL_PROCESS_BACKTRACE_INFORMATION, *PRTL_PROCESS_BACKTRACE_INFORMATION;
961
962 typedef struct _RTL_PROCESS_BACKTRACES
963 {
964 ULONG CommittedMemory;
965 ULONG ReservedMemory;
966 ULONG NumberOfBackTraceLookups;
967 ULONG NumberOfBackTraces;
968 RTL_PROCESS_BACKTRACE_INFORMATION BackTraces[1];
969 } RTL_PROCESS_BACKTRACES, *PRTL_PROCESS_BACKTRACES;
970
971 typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
972 {
973 ULONG SizeStruct;
974 ULONG Option;
975 UCHAR OptionData[1];
976 //
977 // Option array continues below
978 //
979 } RTL_PROCESS_VERIFIER_OPTIONS, *PRTL_PROCESS_VERIFIER_OPTIONS;
980
981 typedef struct _RTL_DEBUG_INFORMATION
982 {
983 HANDLE SectionHandleClient;
984 PVOID ViewBaseClient;
985 PVOID ViewBaseTarget;
986 ULONG ViewBaseDelta;
987 HANDLE EventPairClient;
988 PVOID EventPairTarget;
989 HANDLE TargetProcessId;
990 HANDLE TargetThreadHandle;
991 ULONG Flags;
992 ULONG OffsetFree;
993 ULONG CommitSize;
994 ULONG ViewSize;
995 union
996 {
997 PRTL_PROCESS_MODULES Modules;
998 PRTL_PROCESS_MODULE_INFORMATION_EX ModulesEx;
999 };
1000 PRTL_PROCESS_BACKTRACES BackTraces;
1001 PRTL_PROCESS_HEAPS Heaps;
1002 PRTL_PROCESS_LOCKS Locks;
1003 HANDLE SpecificHeap;
1004 HANDLE TargetProcessHandle;
1005 RTL_PROCESS_VERIFIER_OPTIONS VerifierOptions;
1006 HANDLE ProcessHeap;
1007 HANDLE CriticalSectionHandle;
1008 HANDLE CriticalSectionOwnerThread;
1009 PVOID Reserved[4];
1010 } RTL_DEBUG_INFORMATION, *PRTL_DEBUG_INFORMATION;
1011
1012 //
1013 // Unload Event Trace Structure for RtlGetUnloadEventTrace
1014 //
1015 typedef struct _RTL_UNLOAD_EVENT_TRACE
1016 {
1017 PVOID BaseAddress;
1018 ULONG SizeOfImage;
1019 ULONG Sequence;
1020 ULONG TimeDateStamp;
1021 ULONG CheckSum;
1022 WCHAR ImageName[32];
1023 } RTL_UNLOAD_EVENT_TRACE, *PRTL_UNLOAD_EVENT_TRACE;
1024
1025 //
1026 // RTL Handle Structures
1027 //
1028 typedef struct _RTL_HANDLE_TABLE_ENTRY
1029 {
1030 union
1031 {
1032 ULONG Flags;
1033 struct _RTL_HANDLE_TABLE_ENTRY *NextFree;
1034 };
1035 } RTL_HANDLE_TABLE_ENTRY, *PRTL_HANDLE_TABLE_ENTRY;
1036
1037 typedef struct _RTL_HANDLE_TABLE
1038 {
1039 ULONG MaximumNumberOfHandles;
1040 ULONG SizeOfHandleTableEntry;
1041 ULONG Reserved[2];
1042 PRTL_HANDLE_TABLE_ENTRY FreeHandles;
1043 PRTL_HANDLE_TABLE_ENTRY CommittedHandles;
1044 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles;
1045 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles;
1046 } RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
1047
1048 //
1049 // Exception Record
1050 //
1051 typedef struct _EXCEPTION_REGISTRATION_RECORD
1052 {
1053 struct _EXCEPTION_REGISTRATION_RECORD *Next;
1054 PEXCEPTION_ROUTINE Handler;
1055 } EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
1056
1057 //
1058 // Current Directory Structures
1059 //
1060 typedef struct _CURDIR
1061 {
1062 UNICODE_STRING DosPath;
1063 HANDLE Handle;
1064 } CURDIR, *PCURDIR;
1065
1066 typedef struct _RTLP_CURDIR_REF *PRTLP_CURDIR_REF;
1067 typedef struct _RTL_RELATIVE_NAME_U
1068 {
1069 UNICODE_STRING RelativeName;
1070 HANDLE ContainingDirectory;
1071 PRTLP_CURDIR_REF CurDirRef;
1072 } RTL_RELATIVE_NAME_U, *PRTL_RELATIVE_NAME_U;
1073
1074 typedef struct _RTL_DRIVE_LETTER_CURDIR
1075 {
1076 USHORT Flags;
1077 USHORT Length;
1078 ULONG TimeStamp;
1079 UNICODE_STRING DosPath;
1080 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
1081
1082 typedef struct _RTL_PERTHREAD_CURDIR
1083 {
1084 PRTL_DRIVE_LETTER_CURDIR CurrentDirectories;
1085 PUNICODE_STRING ImageName;
1086 PVOID Environment;
1087 } RTL_PERTHREAD_CURDIR, *PRTL_PERTHREAD_CURDIR;
1088
1089 //
1090 // Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
1091 //
1092 typedef struct _RTL_ACQUIRE_STATE
1093 {
1094 HANDLE Token;
1095 HANDLE OldImpersonationToken;
1096 PTOKEN_PRIVILEGES OldPrivileges;
1097 PTOKEN_PRIVILEGES NewPrivileges;
1098 ULONG Flags;
1099 UCHAR OldPrivBuffer[1024];
1100 } RTL_ACQUIRE_STATE, *PRTL_ACQUIRE_STATE;
1101
1102 #ifndef NTOS_MODE_USER
1103
1104 //
1105 // RTL Critical Section Structures
1106 //
1107 typedef struct _RTL_CRITICAL_SECTION_DEBUG
1108 {
1109 USHORT Type;
1110 USHORT CreatorBackTraceIndex;
1111 struct _RTL_CRITICAL_SECTION *CriticalSection;
1112 LIST_ENTRY ProcessLocksList;
1113 ULONG EntryCount;
1114 ULONG ContentionCount;
1115 ULONG Spare[2];
1116 } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
1117
1118 typedef struct _RTL_CRITICAL_SECTION
1119 {
1120 PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
1121 LONG LockCount;
1122 LONG RecursionCount;
1123 HANDLE OwningThread;
1124 HANDLE LockSemaphore;
1125 ULONG_PTR SpinCount;
1126 } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
1127
1128 #endif /* !NTOS_MODE_USER */
1129
1130 //
1131 // RTL Private Heap Structures
1132 //
1133 typedef struct _HEAP_LOCK
1134 {
1135 union
1136 {
1137 RTL_CRITICAL_SECTION CriticalSection;
1138 #ifndef NTOS_MODE_USER
1139 ERESOURCE Resource;
1140 #endif
1141 UCHAR Padding[0x68]; /* Max ERESOURCE size for x64 build. Needed because RTL is built only once */
1142 };
1143 } HEAP_LOCK, *PHEAP_LOCK;
1144
1145 //
1146 // RTL Range List Structures
1147 //
1148 typedef struct _RTL_RANGE_LIST
1149 {
1150 LIST_ENTRY ListHead;
1151 ULONG Flags;
1152 ULONG Count;
1153 ULONG Stamp;
1154 } RTL_RANGE_LIST, *PRTL_RANGE_LIST;
1155
1156 typedef struct _RTL_RANGE
1157 {
1158 ULONGLONG Start;
1159 ULONGLONG End;
1160 PVOID UserData;
1161 PVOID Owner;
1162 UCHAR Attributes;
1163 UCHAR Flags;
1164 } RTL_RANGE, *PRTL_RANGE;
1165
1166 typedef struct _RANGE_LIST_ITERATOR
1167 {
1168 PLIST_ENTRY RangeListHead;
1169 PLIST_ENTRY MergedHead;
1170 PVOID Current;
1171 ULONG Stamp;
1172 } RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
1173
1174 //
1175 // RTL Resource
1176 //
1177 typedef struct _RTL_RESOURCE
1178 {
1179 RTL_CRITICAL_SECTION Lock;
1180 HANDLE SharedSemaphore;
1181 ULONG SharedWaiters;
1182 HANDLE ExclusiveSemaphore;
1183 ULONG ExclusiveWaiters;
1184 LONG NumberActive;
1185 HANDLE OwningThread;
1186 ULONG TimeoutBoost;
1187 PVOID DebugInfo;
1188 } RTL_RESOURCE, *PRTL_RESOURCE;
1189
1190 //
1191 // Structures for RtlCreateUserProcess
1192 //
1193 typedef struct _RTL_USER_PROCESS_PARAMETERS
1194 {
1195 ULONG MaximumLength;
1196 ULONG Length;
1197 ULONG Flags;
1198 ULONG DebugFlags;
1199 HANDLE ConsoleHandle;
1200 ULONG ConsoleFlags;
1201 HANDLE StandardInput;
1202 HANDLE StandardOutput;
1203 HANDLE StandardError;
1204 CURDIR CurrentDirectory;
1205 UNICODE_STRING DllPath;
1206 UNICODE_STRING ImagePathName;
1207 UNICODE_STRING CommandLine;
1208 PWSTR Environment;
1209 ULONG StartingX;
1210 ULONG StartingY;
1211 ULONG CountX;
1212 ULONG CountY;
1213 ULONG CountCharsX;
1214 ULONG CountCharsY;
1215 ULONG FillAttribute;
1216 ULONG WindowFlags;
1217 ULONG ShowWindowFlags;
1218 UNICODE_STRING WindowTitle;
1219 UNICODE_STRING DesktopInfo;
1220 UNICODE_STRING ShellInfo;
1221 UNICODE_STRING RuntimeData;
1222 RTL_DRIVE_LETTER_CURDIR CurrentDirectories[32];
1223 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
1224
1225 typedef struct _RTL_USER_PROCESS_INFORMATION
1226 {
1227 ULONG Size;
1228 HANDLE ProcessHandle;
1229 HANDLE ThreadHandle;
1230 CLIENT_ID ClientId;
1231 SECTION_IMAGE_INFORMATION ImageInformation;
1232 } RTL_USER_PROCESS_INFORMATION, *PRTL_USER_PROCESS_INFORMATION;
1233
1234 //
1235 // RTL Atom Table Structures
1236 //
1237 typedef struct _RTL_ATOM_TABLE_ENTRY
1238 {
1239 struct _RTL_ATOM_TABLE_ENTRY *HashLink;
1240 USHORT HandleIndex;
1241 USHORT Atom;
1242 USHORT ReferenceCount;
1243 UCHAR Flags;
1244 UCHAR NameLength;
1245 WCHAR Name[1];
1246 } RTL_ATOM_TABLE_ENTRY, *PRTL_ATOM_TABLE_ENTRY;
1247
1248 typedef struct _RTL_ATOM_TABLE
1249 {
1250 ULONG Signature;
1251 union
1252 {
1253 #ifdef NTOS_MODE_USER
1254 RTL_CRITICAL_SECTION CriticalSection;
1255 #else
1256 FAST_MUTEX FastMutex;
1257 #endif
1258 };
1259 union
1260 {
1261 #ifdef NTOS_MODE_USER
1262 RTL_HANDLE_TABLE RtlHandleTable;
1263 #else
1264 PHANDLE_TABLE ExHandleTable;
1265 #endif
1266 };
1267 ULONG NumberOfBuckets;
1268 PRTL_ATOM_TABLE_ENTRY Buckets[1];
1269 } RTL_ATOM_TABLE, *PRTL_ATOM_TABLE;
1270
1271 #ifndef _WINBASE_
1272 //
1273 // System Time and Timezone Structures
1274 //
1275 typedef struct _SYSTEMTIME
1276 {
1277 USHORT wYear;
1278 USHORT wMonth;
1279 USHORT wDayOfWeek;
1280 USHORT wDay;
1281 USHORT wHour;
1282 USHORT wMinute;
1283 USHORT wSecond;
1284 USHORT wMilliseconds;
1285 } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
1286
1287 typedef struct _TIME_ZONE_INFORMATION
1288 {
1289 LONG Bias;
1290 WCHAR StandardName[32];
1291 SYSTEMTIME StandardDate;
1292 LONG StandardBias;
1293 WCHAR DaylightName[32];
1294 SYSTEMTIME DaylightDate;
1295 LONG DaylightBias;
1296 } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
1297 #endif /* !_WINBASE_ */
1298
1299 //
1300 // Native version of Timezone Structure
1301 //
1302 typedef LPTIME_ZONE_INFORMATION PRTL_TIME_ZONE_INFORMATION;
1303
1304 //
1305 // Hotpatch Header
1306 //
1307 typedef struct _RTL_PATCH_HEADER
1308 {
1309 LIST_ENTRY PatchList;
1310 PVOID PatchImageBase;
1311 struct _RTL_PATCH_HEADER *NextPath;
1312 ULONG PatchFlags;
1313 LONG PatchRefCount;
1314 struct _HOTPATCH_HEADER *HotpatchHeader;
1315 UNICODE_STRING TargetDllName;
1316 PVOID TargetDllBase;
1317 PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry;
1318 PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry;
1319 struct _SYSTEM_HOTPATCH_CODE_INFORMATION *CodeInfo;
1320 } RTL_PATCH_HEADER, *PRTL_PATCH_HEADER;
1321
1322 //
1323 // Header for NLS Files
1324 //
1325 typedef struct _NLS_FILE_HEADER
1326 {
1327 USHORT HeaderSize;
1328 USHORT CodePage;
1329 USHORT MaximumCharacterSize;
1330 USHORT DefaultChar;
1331 USHORT UniDefaultChar;
1332 USHORT TransDefaultChar;
1333 USHORT TransUniDefaultChar;
1334 UCHAR LeadByte[MAXIMUM_LEADBYTES];
1335 } NLS_FILE_HEADER, *PNLS_FILE_HEADER;
1336
1337 //
1338 // Stack Traces
1339 //
1340 typedef struct _RTL_STACK_TRACE_ENTRY
1341 {
1342 struct _RTL_STACK_TRACE_ENTRY *HashChain;
1343 ULONG TraceCount;
1344 USHORT Index;
1345 USHORT Depth;
1346 PVOID BackTrace[32];
1347 } RTL_STACK_TRACE_ENTRY, *PRTL_STACK_TRACE_ENTRY;
1348
1349 typedef struct _STACK_TRACE_DATABASE
1350 {
1351 RTL_CRITICAL_SECTION CriticalSection;
1352 } STACK_TRACE_DATABASE, *PSTACK_TRACE_DATABASE;
1353
1354 typedef struct _RTL_TRACE_BLOCK
1355 {
1356 ULONG Magic;
1357 ULONG Count;
1358 ULONG Size;
1359 ULONG UserCount;
1360 ULONG UserSize;
1361 PVOID UserContext;
1362 struct _RTL_TRACE_BLOCK *Next;
1363 PVOID *Trace;
1364 } RTL_TRACE_BLOCK, *PRTL_TRACE_BLOCK;
1365
1366 #ifndef NTOS_MODE_USER
1367
1368 //
1369 // Message Resource Entry, Block and Data
1370 //
1371 typedef struct _MESSAGE_RESOURCE_ENTRY
1372 {
1373 USHORT Length;
1374 USHORT Flags;
1375 UCHAR Text[ANYSIZE_ARRAY];
1376 } MESSAGE_RESOURCE_ENTRY, *PMESSAGE_RESOURCE_ENTRY;
1377
1378 typedef struct _MESSAGE_RESOURCE_BLOCK
1379 {
1380 ULONG LowId;
1381 ULONG HighId;
1382 ULONG OffsetToEntries;
1383 } MESSAGE_RESOURCE_BLOCK, *PMESSAGE_RESOURCE_BLOCK;
1384
1385 typedef struct _MESSAGE_RESOURCE_DATA
1386 {
1387 ULONG NumberOfBlocks;
1388 MESSAGE_RESOURCE_BLOCK Blocks[ANYSIZE_ARRAY];
1389 } MESSAGE_RESOURCE_DATA, *PMESSAGE_RESOURCE_DATA;
1390
1391 #endif /* !NTOS_MODE_USER */
1392 #endif /* !_RTLTYPES_H */