Sync to trunk r38200
[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 PWSTR 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 ULONG Flags;
962 struct _RTL_HANDLE_TABLE_ENTRY *NextFree;
963 } RTL_HANDLE_TABLE_ENTRY, *PRTL_HANDLE_TABLE_ENTRY;
964
965 typedef struct _RTL_HANDLE_TABLE
966 {
967 ULONG MaximumNumberOfHandles;
968 ULONG SizeOfHandleTableEntry;
969 ULONG Reserved[2];
970 PRTL_HANDLE_TABLE_ENTRY FreeHandles;
971 PRTL_HANDLE_TABLE_ENTRY CommittedHandles;
972 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles;
973 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles;
974 } RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
975
976 //
977 // Exception Record
978 //
979 typedef struct _EXCEPTION_REGISTRATION_RECORD
980 {
981 struct _EXCEPTION_REGISTRATION_RECORD *Next;
982 PEXCEPTION_ROUTINE Handler;
983 } EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
984
985 //
986 // Current Directory Structures
987 //
988 typedef struct _CURDIR
989 {
990 UNICODE_STRING DosPath;
991 HANDLE Handle;
992 } CURDIR, *PCURDIR;
993
994 typedef struct RTL_DRIVE_LETTER_CURDIR
995 {
996 USHORT Flags;
997 USHORT Length;
998 ULONG TimeStamp;
999 UNICODE_STRING DosPath;
1000 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
1001
1002 //
1003 // Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
1004 //
1005 typedef struct _RTL_ACQUIRE_STATE
1006 {
1007 HANDLE Token;
1008 HANDLE OldImpersonationToken;
1009 PTOKEN_PRIVILEGES OldPrivileges;
1010 PTOKEN_PRIVILEGES NewPrivileges;
1011 ULONG Flags;
1012 UCHAR OldPrivBuffer[1024];
1013 } RTL_ACQUIRE_STATE, *PRTL_ACQUIRE_STATE;
1014
1015 #ifndef NTOS_MODE_USER
1016
1017 //
1018 // RTL Critical Section Structures
1019 //
1020 typedef struct _RTL_CRITICAL_SECTION_DEBUG
1021 {
1022 USHORT Type;
1023 USHORT CreatorBackTraceIndex;
1024 struct _RTL_CRITICAL_SECTION *CriticalSection;
1025 LIST_ENTRY ProcessLocksList;
1026 ULONG EntryCount;
1027 ULONG ContentionCount;
1028 ULONG Spare[2];
1029 } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
1030
1031 typedef struct _RTL_CRITICAL_SECTION
1032 {
1033 PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
1034 LONG LockCount;
1035 LONG RecursionCount;
1036 HANDLE OwningThread;
1037 HANDLE LockSemaphore;
1038 ULONG_PTR SpinCount;
1039 } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
1040
1041 #endif
1042
1043 //
1044 // RTL Range List Structures
1045 //
1046 typedef struct _RTL_RANGE_LIST
1047 {
1048 LIST_ENTRY ListHead;
1049 ULONG Flags;
1050 ULONG Count;
1051 ULONG Stamp;
1052 } RTL_RANGE_LIST, *PRTL_RANGE_LIST;
1053
1054 typedef struct _RTL_RANGE
1055 {
1056 ULONGLONG Start;
1057 ULONGLONG End;
1058 PVOID UserData;
1059 PVOID Owner;
1060 UCHAR Attributes;
1061 UCHAR Flags;
1062 } RTL_RANGE, *PRTL_RANGE;
1063
1064 typedef struct _RANGE_LIST_ITERATOR
1065 {
1066 PLIST_ENTRY RangeListHead;
1067 PLIST_ENTRY MergedHead;
1068 PVOID Current;
1069 ULONG Stamp;
1070 } RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
1071
1072 //
1073 // RTL Resource
1074 //
1075 typedef struct _RTL_RESOURCE
1076 {
1077 RTL_CRITICAL_SECTION Lock;
1078 HANDLE SharedSemaphore;
1079 ULONG SharedWaiters;
1080 HANDLE ExclusiveSemaphore;
1081 ULONG ExclusiveWaiters;
1082 LONG NumberActive;
1083 HANDLE OwningThread;
1084 ULONG TimeoutBoost;
1085 PVOID DebugInfo;
1086 } RTL_RESOURCE, *PRTL_RESOURCE;
1087
1088 //
1089 // RTL Message Structures for PE Resources
1090 //
1091 typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
1092 {
1093 USHORT Length;
1094 USHORT Flags;
1095 CHAR Text[1];
1096 } RTL_MESSAGE_RESOURCE_ENTRY, *PRTL_MESSAGE_RESOURCE_ENTRY;
1097
1098 typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
1099 {
1100 ULONG LowId;
1101 ULONG HighId;
1102 ULONG OffsetToEntries;
1103 } RTL_MESSAGE_RESOURCE_BLOCK, *PRTL_MESSAGE_RESOURCE_BLOCK;
1104
1105 typedef struct _RTL_MESSAGE_RESOURCE_DATA
1106 {
1107 ULONG NumberOfBlocks;
1108 RTL_MESSAGE_RESOURCE_BLOCK Blocks[1];
1109 } RTL_MESSAGE_RESOURCE_DATA, *PRTL_MESSAGE_RESOURCE_DATA;
1110
1111 //
1112 // Structures for RtlCreateUserProcess
1113 //
1114 typedef struct _RTL_USER_PROCESS_PARAMETERS
1115 {
1116 ULONG MaximumLength;
1117 ULONG Length;
1118 ULONG Flags;
1119 ULONG DebugFlags;
1120 HANDLE ConsoleHandle;
1121 ULONG ConsoleFlags;
1122 HANDLE StandardInput;
1123 HANDLE StandardOutput;
1124 HANDLE StandardError;
1125 CURDIR CurrentDirectory;
1126 UNICODE_STRING DllPath;
1127 UNICODE_STRING ImagePathName;
1128 UNICODE_STRING CommandLine;
1129 PWSTR Environment;
1130 ULONG StartingX;
1131 ULONG StartingY;
1132 ULONG CountX;
1133 ULONG CountY;
1134 ULONG CountCharsX;
1135 ULONG CountCharsY;
1136 ULONG FillAttribute;
1137 ULONG WindowFlags;
1138 ULONG ShowWindowFlags;
1139 UNICODE_STRING WindowTitle;
1140 UNICODE_STRING DesktopInfo;
1141 UNICODE_STRING ShellInfo;
1142 UNICODE_STRING RuntimeData;
1143 RTL_DRIVE_LETTER_CURDIR CurrentDirectories[32];
1144 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
1145
1146 typedef struct _RTL_USER_PROCESS_INFORMATION
1147 {
1148 ULONG Size;
1149 HANDLE ProcessHandle;
1150 HANDLE ThreadHandle;
1151 CLIENT_ID ClientId;
1152 SECTION_IMAGE_INFORMATION ImageInformation;
1153 } RTL_USER_PROCESS_INFORMATION, *PRTL_USER_PROCESS_INFORMATION;
1154
1155 //
1156 // RTL Atom Table Structures
1157 //
1158 typedef struct _RTL_ATOM_TABLE_ENTRY
1159 {
1160 struct _RTL_ATOM_TABLE_ENTRY *HashLink;
1161 USHORT HandleIndex;
1162 USHORT Atom;
1163 USHORT ReferenceCount;
1164 UCHAR Flags;
1165 UCHAR NameLength;
1166 WCHAR Name[1];
1167 } RTL_ATOM_TABLE_ENTRY, *PRTL_ATOM_TABLE_ENTRY;
1168
1169 typedef struct _RTL_ATOM_TABLE
1170 {
1171 ULONG Signature;
1172 union
1173 {
1174 #ifdef NTOS_MODE_USER
1175 RTL_CRITICAL_SECTION CriticalSection;
1176 #else
1177 FAST_MUTEX FastMutex;
1178 #endif
1179 };
1180 union
1181 {
1182 #ifdef NTOS_MODE_USER
1183 RTL_HANDLE_TABLE RtlHandleTable;
1184 #else
1185 PHANDLE_TABLE ExHandleTable;
1186 #endif
1187 };
1188 ULONG NumberOfBuckets;
1189 PRTL_ATOM_TABLE_ENTRY Buckets[1];
1190 } RTL_ATOM_TABLE, *PRTL_ATOM_TABLE;
1191
1192 #ifndef _WINBASE_
1193 //
1194 // System Time and Timezone Structures
1195 //
1196 typedef struct _SYSTEMTIME
1197 {
1198 USHORT wYear;
1199 USHORT wMonth;
1200 USHORT wDayOfWeek;
1201 USHORT wDay;
1202 USHORT wHour;
1203 USHORT wMinute;
1204 USHORT wSecond;
1205 USHORT wMilliseconds;
1206 } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
1207
1208 typedef struct _TIME_ZONE_INFORMATION
1209 {
1210 LONG Bias;
1211 WCHAR StandardName[32];
1212 SYSTEMTIME StandardDate;
1213 LONG StandardBias;
1214 WCHAR DaylightName[32];
1215 SYSTEMTIME DaylightDate;
1216 LONG DaylightBias;
1217 } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
1218 #endif
1219
1220 //
1221 // Native version of Timezone Structure
1222 //
1223 typedef LPTIME_ZONE_INFORMATION PRTL_TIME_ZONE_INFORMATION;
1224
1225 //
1226 // Hotpatch Header
1227 //
1228 typedef struct _RTL_PATCH_HEADER
1229 {
1230 LIST_ENTRY PatchList;
1231 PVOID PatchImageBase;
1232 struct _RTL_PATCH_HEADER *NextPath;
1233 ULONG PatchFlags;
1234 LONG PatchRefCount;
1235 struct _HOTPATCH_HEADER *HotpatchHeader;
1236 UNICODE_STRING TargetDllName;
1237 PVOID TargetDllBase;
1238 PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry;
1239 PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry;
1240 struct _SYSTEM_HOTPATCH_CODE_INFORMATION *CodeInfo;
1241 } RTL_PATCH_HEADER, *PRTL_PATCH_HEADER;
1242
1243 //
1244 // Header for NLS Files
1245 //
1246 typedef struct _NLS_FILE_HEADER
1247 {
1248 USHORT HeaderSize;
1249 USHORT CodePage;
1250 USHORT MaximumCharacterSize;
1251 USHORT DefaultChar;
1252 USHORT UniDefaultChar;
1253 USHORT TransDefaultChar;
1254 USHORT TransUniDefaultChar;
1255 UCHAR LeadByte[MAXIMUM_LEADBYTES];
1256 } NLS_FILE_HEADER, *PNLS_FILE_HEADER;
1257
1258 //
1259 // Stack Traces
1260 //
1261 typedef struct _RTL_STACK_TRACE_ENTRY
1262 {
1263 struct _RTL_STACK_TRACE_ENTRY *HashChain;
1264 ULONG TraceCount;
1265 USHORT Index;
1266 USHORT Depth;
1267 PVOID BackTrace[32];
1268 } RTL_STACK_TRACE_ENTRY, *PRTL_STACK_TRACE_ENTRY;
1269
1270 typedef struct _STACK_TRACE_DATABASE
1271 {
1272 RTL_CRITICAL_SECTION CriticalSection;
1273 } STACK_TRACE_DATABASE, *PSTACK_TRACE_DATABASE;
1274
1275 #ifndef NTOS_MODE_USER
1276
1277 //
1278 // Message Resource Entry, Block and Data
1279 //
1280 typedef struct _MESSAGE_RESOURCE_ENTRY
1281 {
1282 USHORT Length;
1283 USHORT Flags;
1284 UCHAR Text[ANYSIZE_ARRAY];
1285 } MESSAGE_RESOURCE_ENTRY, *PMESSAGE_RESOURCE_ENTRY;
1286
1287 typedef struct _MESSAGE_RESOURCE_BLOCK
1288 {
1289 ULONG LowId;
1290 ULONG HighId;
1291 ULONG OffsetToEntries;
1292 } MESSAGE_RESOURCE_BLOCK, *PMESSAGE_RESOURCE_BLOCK;
1293
1294 typedef struct _MESSAGE_RESOURCE_DATA
1295 {
1296 ULONG NumberOfBlocks;
1297 MESSAGE_RESOURCE_BLOCK Blocks[ANYSIZE_ARRAY];
1298 } MESSAGE_RESOURCE_DATA, *PMESSAGE_RESOURCE_DATA;
1299
1300 #endif
1301 #endif