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