A couple of header fixes to get all the FreeLDR-loaded boot drivers to compile and...
[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 #else
352
353 //
354 // ACL Query Information Classes
355 //
356 typedef enum _ACL_INFORMATION_CLASS
357 {
358 AclRevisionInformation = 1,
359 AclSizeInformation
360 } ACL_INFORMATION_CLASS;
361
362 #endif
363
364 //
365 // RTL Path Types
366 //
367 typedef enum _RTL_PATH_TYPE
368 {
369 RtlPathTypeUnknown,
370 RtlPathTypeUncAbsolute,
371 RtlPathTypeDriveAbsolute,
372 RtlPathTypeDriveRelative,
373 RtlPathTypeRooted,
374 RtlPathTypeRelative,
375 RtlPathTypeLocalDevice,
376 RtlPathTypeRootLocalDevice,
377 } RTL_PATH_TYPE;
378
379 #ifndef NTOS_MODE_USER
380
381 //
382 // Callback function for RTL Timers or Registered Waits
383 //
384 typedef VOID
385 (NTAPI *WAITORTIMERCALLBACKFUNC)(
386 PVOID pvContext,
387 BOOLEAN fTimerOrWaitFired
388 );
389
390 //
391 // Handler during Vectored RTL Exceptions
392 //
393 typedef LONG
394 (NTAPI *PVECTORED_EXCEPTION_HANDLER)(
395 PEXCEPTION_POINTERS ExceptionPointers
396 );
397
398 //
399 // Worker Thread Callback for Rtl
400 //
401 typedef VOID
402 (NTAPI *WORKERCALLBACKFUNC)(
403 IN PVOID Context
404 );
405
406 #else
407
408 //
409 // Handler during regular RTL Exceptions
410 //
411 typedef EXCEPTION_DISPOSITION
412 (NTAPI *PEXCEPTION_ROUTINE)(
413 IN struct _EXCEPTION_RECORD *ExceptionRecord,
414 IN PVOID EstablisherFrame,
415 IN OUT struct _CONTEXT *ContextRecord,
416 IN OUT PVOID DispatcherContext
417 );
418
419 //
420 // RTL Library Allocation/Free Routines
421 //
422 typedef PVOID
423 (NTAPI *PRTL_ALLOCATE_STRING_ROUTINE)(
424 SIZE_T NumberOfBytes
425 );
426
427 typedef PVOID
428 (NTAPI *PRTL_REALLOCATE_STRING_ROUTINE)(
429 SIZE_T NumberOfBytes,
430 PVOID Buffer
431 );
432
433 typedef
434 VOID
435 (NTAPI *PRTL_FREE_STRING_ROUTINE)(
436 PVOID Buffer
437 );
438
439 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine;
440 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine;
441 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine;
442
443 #endif
444
445 //
446 // Callback for RTL Heap Enumeration
447 //
448 typedef NTSTATUS
449 (*PHEAP_ENUMERATION_ROUTINE)(
450 IN PVOID HeapHandle,
451 IN PVOID UserParam
452 );
453
454 //
455 // Thread and Process Start Routines for RtlCreateUserThread/Process
456 //
457 typedef ULONG (NTAPI *PTHREAD_START_ROUTINE)(
458 PVOID Parameter
459 );
460
461 typedef VOID
462 (NTAPI *PRTL_BASE_PROCESS_START_ROUTINE)(
463 PTHREAD_START_ROUTINE StartAddress,
464 PVOID Parameter
465 );
466
467 //
468 // Declare empty structure definitions so that they may be referenced by
469 // routines before they are defined
470 //
471 struct _RTL_AVL_TABLE;
472 struct _RTL_GENERIC_TABLE;
473 struct _RTL_RANGE;
474 typedef struct _COMPRESSED_DATA_INFO COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
475
476 //
477 // Routines and callbacks for the RTL AVL/Generic Table package
478 //
479 #if defined(NTOS_MODE_USER) || (!defined(NTOS_MODE_USER) && !defined(_NTIFS_))
480 typedef NTSTATUS
481 (NTAPI *PRTL_AVL_MATCH_FUNCTION)(
482 struct _RTL_AVL_TABLE *Table,
483 PVOID UserData,
484 PVOID MatchData
485 );
486
487 typedef RTL_GENERIC_COMPARE_RESULTS
488 (NTAPI *PRTL_AVL_COMPARE_ROUTINE) (
489 struct _RTL_AVL_TABLE *Table,
490 PVOID FirstStruct,
491 PVOID SecondStruct
492 );
493
494 typedef RTL_GENERIC_COMPARE_RESULTS
495 (NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
496 struct _RTL_GENERIC_TABLE *Table,
497 PVOID FirstStruct,
498 PVOID SecondStruct
499 );
500
501 typedef PVOID
502 (NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
503 struct _RTL_GENERIC_TABLE *Table,
504 CLONG ByteSize
505 );
506
507 typedef VOID
508 (NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
509 struct _RTL_GENERIC_TABLE *Table,
510 PVOID Buffer
511 );
512
513 typedef PVOID
514 (NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
515 struct _RTL_AVL_TABLE *Table,
516 CLONG ByteSize
517 );
518
519 typedef VOID
520 (NTAPI *PRTL_AVL_FREE_ROUTINE) (
521 struct _RTL_AVL_TABLE *Table,
522 PVOID Buffer
523 );
524 #endif
525
526 //
527 // RTL Query Registry callback
528 //
529 typedef NTSTATUS
530 (NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
531 IN PWSTR ValueName,
532 IN ULONG ValueType,
533 IN PVOID ValueData,
534 IN ULONG ValueLength,
535 IN PVOID Context,
536 IN PVOID EntryContext
537 );
538
539 //
540 // RTL Secure Memory callbacks
541 //
542 #ifdef NTOS_MODE_USER
543 typedef NTSTATUS
544 (NTAPI *PRTL_SECURE_MEMORY_CACHE_CALLBACK)(
545 IN PVOID Address,
546 IN SIZE_T Length
547 );
548 #endif
549
550 //
551 // RTL Range List callbacks
552 //
553 #ifdef NTOS_MODE_USER
554 typedef BOOLEAN
555 (NTAPI *PRTL_CONFLICT_RANGE_CALLBACK)(
556 PVOID Context,
557 struct _RTL_RANGE *Range
558 );
559
560 //
561 // Custom Heap Commit Routine for RtlCreateHeap
562 //
563 typedef NTSTATUS
564 (NTAPI * PRTL_HEAP_COMMIT_ROUTINE)(
565 IN PVOID Base,
566 IN OUT PVOID *CommitAddress,
567 IN OUT PSIZE_T CommitSize
568 );
569
570 //
571 // Version Info redefinitions
572 //
573 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW;
574 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW;
575 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW;
576 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW;
577
578 //
579 // Simple pointer definitions
580 //
581 typedef ACL_REVISION_INFORMATION *PACL_REVISION_INFORMATION;
582 typedef ACL_SIZE_INFORMATION *PACL_SIZE_INFORMATION;
583
584 //
585 // Parameters for RtlCreateHeap
586 // FIXME: Determine whether Length is SIZE_T or ULONG
587 //
588 typedef struct _RTL_HEAP_PARAMETERS
589 {
590 ULONG Length;
591 SIZE_T SegmentReserve;
592 SIZE_T SegmentCommit;
593 SIZE_T DeCommitFreeBlockThreshold;
594 SIZE_T DeCommitTotalFreeThreshold;
595 SIZE_T MaximumAllocationSize;
596 SIZE_T VirtualMemoryThreshold;
597 SIZE_T InitialCommit;
598 SIZE_T InitialReserve;
599 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
600 SIZE_T Reserved[2];
601 } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
602
603 //
604 // RTL Bitmap structures
605 //
606 typedef struct _RTL_BITMAP
607 {
608 ULONG SizeOfBitMap;
609 PULONG Buffer;
610 } RTL_BITMAP, *PRTL_BITMAP;
611
612 typedef struct _RTL_BITMAP_RUN
613 {
614 ULONG StartingIndex;
615 ULONG NumberOfBits;
616 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
617
618 //
619 // RtlGenerateXxxName context
620 //
621 typedef struct _GENERATE_NAME_CONTEXT
622 {
623 USHORT Checksum;
624 BOOLEAN CheckSumInserted;
625 UCHAR NameLength;
626 WCHAR NameBuffer[8];
627 ULONG ExtensionLength;
628 WCHAR ExtensionBuffer[4];
629 ULONG LastIndexValue;
630 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
631
632 //
633 // RTL Splay and Balanced Links structures
634 //
635 typedef struct _RTL_SPLAY_LINKS
636 {
637 struct _RTL_SPLAY_LINKS *Parent;
638 struct _RTL_SPLAY_LINKS *LeftChild;
639 struct _RTL_SPLAY_LINKS *RightChild;
640 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
641
642 typedef struct _RTL_BALANCED_LINKS
643 {
644 struct _RTL_BALANCED_LINKS *Parent;
645 struct _RTL_BALANCED_LINKS *LeftChild;
646 struct _RTL_BALANCED_LINKS *RightChild;
647 CHAR Balance;
648 UCHAR Reserved[3];
649 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
650
651 //
652 // RTL Avl/Generic Tables
653 //
654 typedef struct _RTL_GENERIC_TABLE
655 {
656 PRTL_SPLAY_LINKS TableRoot;
657 LIST_ENTRY InsertOrderList;
658 PLIST_ENTRY OrderedPointer;
659 ULONG WhichOrderedElement;
660 ULONG NumberGenericTableElements;
661 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
662 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
663 PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
664 PVOID TableContext;
665 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
666
667 typedef struct _RTL_AVL_TABLE
668 {
669 RTL_BALANCED_LINKS BalancedRoot;
670 PVOID OrderedPointer;
671 ULONG WhichOrderedElement;
672 ULONG NumberGenericTableElements;
673 ULONG DepthOfTree;
674 PRTL_BALANCED_LINKS RestartKey;
675 ULONG DeleteCount;
676 PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
677 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
678 PRTL_AVL_FREE_ROUTINE FreeRoutine;
679 PVOID TableContext;
680 } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
681
682 //
683 // RtlQueryRegistry Data
684 //
685 typedef struct _RTL_QUERY_REGISTRY_TABLE
686 {
687 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
688 ULONG Flags;
689 PWSTR Name;
690 PVOID EntryContext;
691 ULONG DefaultType;
692 PVOID DefaultData;
693 ULONG DefaultLength;
694 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
695
696 //
697 // RTL Unicode Table Structures
698 //
699 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
700 {
701 CSHORT NodeTypeCode;
702 CSHORT NameLength;
703 struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
704 struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
705 RTL_SPLAY_LINKS Links;
706 PUNICODE_STRING Prefix;
707 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
708
709 typedef struct _UNICODE_PREFIX_TABLE
710 {
711 CSHORT NodeTypeCode;
712 CSHORT NameLength;
713 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
714 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
715 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
716
717 //
718 // Time Structure for RTL Time calls
719 //
720 typedef struct _TIME_FIELDS
721 {
722 CSHORT Year;
723 CSHORT Month;
724 CSHORT Day;
725 CSHORT Hour;
726 CSHORT Minute;
727 CSHORT Second;
728 CSHORT Milliseconds;
729 CSHORT Weekday;
730 } TIME_FIELDS, *PTIME_FIELDS;
731
732 //
733 // Activation Context
734 //
735 typedef PVOID PACTIVATION_CONTEXT;
736
737 //
738 // Activation Context Frame
739 //
740 typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
741 {
742 struct __RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous;
743 PACTIVATION_CONTEXT ActivationContext;
744 ULONG Flags;
745 } RTL_ACTIVATION_CONTEXT_STACK_FRAME,
746 *PRTL_ACTIVATION_CONTEXT_STACK_FRAME;
747
748 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
749 {
750 ULONG Size;
751 ULONG Format;
752 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame;
753 PVOID Extra1;
754 PVOID Extra2;
755 PVOID Extra3;
756 PVOID Extra4;
757 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED,
758 *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED;
759
760 #endif
761
762 //
763 // ACE Structure
764 //
765 typedef struct _ACE
766 {
767 ACE_HEADER Header;
768 ACCESS_MASK AccessMask;
769 } ACE, *PACE;
770
771 //
772 // Information Structures for RTL Debug Functions
773 //
774 typedef struct _RTL_PROCESS_MODULE_INFORMATION
775 {
776 ULONG Section;
777 PVOID MappedBase;
778 PVOID ImageBase;
779 ULONG ImageSize;
780 ULONG Flags;
781 USHORT LoadOrderIndex;
782 USHORT InitOrderIndex;
783 USHORT LoadCount;
784 USHORT OffsetToFileName;
785 CHAR FullPathName[256];
786 } RTL_PROCESS_MODULE_INFORMATION, *PRTL_PROCESS_MODULE_INFORMATION;
787
788 typedef struct _RTL_PROCESS_MODULES
789 {
790 ULONG NumberOfModules;
791 RTL_PROCESS_MODULE_INFORMATION Modules[1];
792 } RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES;
793
794 typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
795 {
796 ULONG NextOffset;
797 RTL_PROCESS_MODULE_INFORMATION BaseInfo;
798 ULONG ImageCheckSum;
799 ULONG TimeDateStamp;
800 PVOID DefaultBase;
801 } RTL_PROCESS_MODULE_INFORMATION_EX, *PRTL_PROCESS_MODULE_INFORMATION_EX;
802
803 typedef struct _RTL_HEAP_TAG_INFO
804 {
805 ULONG NumberOfAllocations;
806 ULONG NumberOfFrees;
807 ULONG BytesAllocated;
808 } RTL_HEAP_TAG_INFO, *PRTL_HEAP_TAG_INFO;
809
810 typedef struct _RTL_HEAP_USAGE_ENTRY
811 {
812 struct _RTL_HEAP_USAGE_ENTRY *Next;
813 } RTL_HEAP_USAGE_ENTRY, *PRTL_HEAP_USAGE_ENTRY;
814
815 typedef struct _RTL_HEAP_USAGE
816 {
817 ULONG Length;
818 ULONG BytesAllocated;
819 ULONG BytesCommitted;
820 ULONG BytesReserved;
821 ULONG BytesReservedMaximum;
822 PRTL_HEAP_USAGE_ENTRY Entries;
823 PRTL_HEAP_USAGE_ENTRY AddedEntries;
824 PRTL_HEAP_USAGE_ENTRY RemovedEntries;
825 UCHAR Reserved[32];
826 } RTL_HEAP_USAGE, *PRTL_HEAP_USAGE;
827
828 typedef struct _RTL_HEAP_INFORMATION
829 {
830 PVOID BaseAddress;
831 ULONG Flags;
832 USHORT EntryOverhead;
833 USHORT CreatorBackTraceIndex;
834 ULONG BytesAllocated;
835 ULONG BytesCommitted;
836 ULONG NumberOfTags;
837 ULONG NumberOfEntries;
838 ULONG NumberOfPseudoTags;
839 ULONG PseudoTagGranularity;
840 ULONG Reserved[4];
841 PVOID Tags;
842 PVOID Entries;
843 } RTL_HEAP_INFORMATION, *PRTL_HEAP_INFORMATION;
844
845 typedef struct _RTL_PROCESS_HEAPS
846 {
847 ULONG NumberOfHeaps;
848 RTL_HEAP_INFORMATION Heaps[1];
849 } RTL_PROCESS_HEAPS, *PRTL_PROCESS_HEAPS;
850
851 typedef struct _RTL_PROCESS_LOCK_INFORMATION
852 {
853 PVOID Address;
854 USHORT Type;
855 USHORT CreatorBackTraceIndex;
856 ULONG OwnerThreadId;
857 ULONG ActiveCount;
858 ULONG ContentionCount;
859 ULONG EntryCount;
860 ULONG RecursionCount;
861 ULONG NumberOfSharedWaiters;
862 ULONG NumberOfExclusiveWaiters;
863 } RTL_PROCESS_LOCK_INFORMATION, *PRTL_PROCESS_LOCK_INFORMATION;
864
865 typedef struct _RTL_PROCESS_LOCKS
866 {
867 ULONG NumberOfLocks;
868 RTL_PROCESS_LOCK_INFORMATION Locks[1];
869 } RTL_PROCESS_LOCKS, *PRTL_PROCESS_LOCKS;
870
871 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
872 {
873 PVOID SymbolicBackTrace;
874 ULONG TraceCount;
875 USHORT Index;
876 USHORT Depth;
877 PVOID BackTrace[16];
878 } RTL_PROCESS_BACKTRACE_INFORMATION, *PRTL_PROCESS_BACKTRACE_INFORMATION;
879
880 typedef struct _RTL_PROCESS_BACKTRACES
881 {
882 ULONG CommittedMemory;
883 ULONG ReservedMemory;
884 ULONG NumberOfBackTraceLookups;
885 ULONG NumberOfBackTraces;
886 RTL_PROCESS_BACKTRACE_INFORMATION BackTraces[1];
887 } RTL_PROCESS_BACKTRACES, *PRTL_PROCESS_BACKTRACES;
888
889 typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
890 {
891 ULONG SizeStruct;
892 ULONG Option;
893 UCHAR OptionData[1];
894 //
895 // Option array continues below
896 //
897 } RTL_PROCESS_VERIFIER_OPTIONS, *PRTL_PROCESS_VERIFIER_OPTIONS;
898
899 typedef struct _RTL_DEBUG_INFORMATION
900 {
901 HANDLE SectionHandleClient;
902 PVOID ViewBaseClient;
903 PVOID ViewBaseTarget;
904 ULONG ViewBaseDelta;
905 HANDLE EventPairClient;
906 PVOID EventPairTarget;
907 HANDLE TargetProcessId;
908 HANDLE TargetThreadHandle;
909 ULONG Flags;
910 ULONG OffsetFree;
911 ULONG CommitSize;
912 ULONG ViewSize;
913 union
914 {
915 PRTL_PROCESS_MODULES Modules;
916 PRTL_PROCESS_MODULE_INFORMATION_EX ModulesEx;
917 };
918 PRTL_PROCESS_BACKTRACES BackTraces;
919 PRTL_PROCESS_HEAPS Heaps;
920 PRTL_PROCESS_LOCKS Locks;
921 HANDLE SpecificHeap;
922 HANDLE TargetProcessHandle;
923 RTL_PROCESS_VERIFIER_OPTIONS VerifierOptions;
924 HANDLE ProcessHeap;
925 HANDLE CriticalSectionHandle;
926 HANDLE CriticalSectionOwnerThread;
927 PVOID Reserved[4];
928 } RTL_DEBUG_INFORMATION, *PRTL_DEBUG_INFORMATION;
929
930 //
931 // Unload Event Trace Structure for RtlGetUnloadEventTrace
932 //
933 typedef struct _RTL_UNLOAD_EVENT_TRACE
934 {
935 PVOID BaseAddress;
936 ULONG SizeOfImage;
937 ULONG Sequence;
938 ULONG TimeDateStamp;
939 ULONG CheckSum;
940 WCHAR ImageName[32];
941 } RTL_UNLOAD_EVENT_TRACE, *PRTL_UNLOAD_EVENT_TRACE;
942
943 //
944 // RTL Handle Structures
945 //
946 typedef struct _RTL_HANDLE_TABLE_ENTRY
947 {
948 ULONG Flags;
949 struct _RTL_HANDLE_TABLE_ENTRY *NextFree;
950 } RTL_HANDLE_TABLE_ENTRY, *PRTL_HANDLE_TABLE_ENTRY;
951
952 typedef struct _RTL_HANDLE_TABLE
953 {
954 ULONG MaximumNumberOfHandles;
955 ULONG SizeOfHandleTableEntry;
956 ULONG Reserved[2];
957 PRTL_HANDLE_TABLE_ENTRY FreeHandles;
958 PRTL_HANDLE_TABLE_ENTRY CommittedHandles;
959 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles;
960 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles;
961 } RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
962
963 //
964 // Exception Record
965 //
966 typedef struct _EXCEPTION_REGISTRATION_RECORD
967 {
968 struct _EXCEPTION_REGISTRATION_RECORD *Next;
969 PEXCEPTION_ROUTINE Handler;
970 } EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
971
972 //
973 // Current Directory Structures
974 //
975 typedef struct _CURDIR
976 {
977 UNICODE_STRING DosPath;
978 HANDLE Handle;
979 } CURDIR, *PCURDIR;
980
981 typedef struct RTL_DRIVE_LETTER_CURDIR
982 {
983 USHORT Flags;
984 USHORT Length;
985 ULONG TimeStamp;
986 UNICODE_STRING DosPath;
987 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
988
989 //
990 // Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
991 //
992 typedef struct _RTL_ACQUIRE_STATE
993 {
994 HANDLE Token;
995 HANDLE OldImpersonationToken;
996 PTOKEN_PRIVILEGES OldPrivileges;
997 PTOKEN_PRIVILEGES NewPrivileges;
998 ULONG Flags;
999 UCHAR OldPrivBuffer[1024];
1000 } RTL_ACQUIRE_STATE, *PRTL_ACQUIRE_STATE;
1001
1002 #ifndef NTOS_MODE_USER
1003
1004 //
1005 // RTL Critical Section Structures
1006 //
1007 typedef struct _RTL_CRITICAL_SECTION_DEBUG
1008 {
1009 USHORT Type;
1010 USHORT CreatorBackTraceIndex;
1011 struct _RTL_CRITICAL_SECTION *CriticalSection;
1012 LIST_ENTRY ProcessLocksList;
1013 ULONG EntryCount;
1014 ULONG ContentionCount;
1015 ULONG Spare[2];
1016 } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
1017
1018 typedef struct _RTL_CRITICAL_SECTION
1019 {
1020 PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
1021 LONG LockCount;
1022 LONG RecursionCount;
1023 HANDLE OwningThread;
1024 HANDLE LockSemaphore;
1025 ULONG_PTR SpinCount;
1026 } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
1027
1028 #endif
1029
1030 //
1031 // RTL Range List Structures
1032 //
1033 typedef struct _RTL_RANGE_LIST
1034 {
1035 LIST_ENTRY ListHead;
1036 ULONG Flags;
1037 ULONG Count;
1038 ULONG Stamp;
1039 } RTL_RANGE_LIST, *PRTL_RANGE_LIST;
1040
1041 typedef struct _RTL_RANGE
1042 {
1043 ULONGLONG Start;
1044 ULONGLONG End;
1045 PVOID UserData;
1046 PVOID Owner;
1047 UCHAR Attributes;
1048 UCHAR Flags;
1049 } RTL_RANGE, *PRTL_RANGE;
1050
1051 typedef struct _RANGE_LIST_ITERATOR
1052 {
1053 PLIST_ENTRY RangeListHead;
1054 PLIST_ENTRY MergedHead;
1055 PVOID Current;
1056 ULONG Stamp;
1057 } RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
1058
1059 //
1060 // RTL Resource
1061 //
1062 typedef struct _RTL_RESOURCE
1063 {
1064 RTL_CRITICAL_SECTION Lock;
1065 HANDLE SharedSemaphore;
1066 ULONG SharedWaiters;
1067 HANDLE ExclusiveSemaphore;
1068 ULONG ExclusiveWaiters;
1069 LONG NumberActive;
1070 HANDLE OwningThread;
1071 ULONG TimeoutBoost;
1072 PVOID DebugInfo;
1073 } RTL_RESOURCE, *PRTL_RESOURCE;
1074
1075 //
1076 // RTL Message Structures for PE Resources
1077 //
1078 typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
1079 {
1080 USHORT Length;
1081 USHORT Flags;
1082 CHAR Text[1];
1083 } RTL_MESSAGE_RESOURCE_ENTRY, *PRTL_MESSAGE_RESOURCE_ENTRY;
1084
1085 typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
1086 {
1087 ULONG LowId;
1088 ULONG HighId;
1089 ULONG OffsetToEntries;
1090 } RTL_MESSAGE_RESOURCE_BLOCK, *PRTL_MESSAGE_RESOURCE_BLOCK;
1091
1092 typedef struct _RTL_MESSAGE_RESOURCE_DATA
1093 {
1094 ULONG NumberOfBlocks;
1095 RTL_MESSAGE_RESOURCE_BLOCK Blocks[1];
1096 } RTL_MESSAGE_RESOURCE_DATA, *PRTL_MESSAGE_RESOURCE_DATA;
1097
1098 //
1099 // Structures for RtlCreateUserProcess
1100 //
1101 typedef struct _RTL_USER_PROCESS_PARAMETERS
1102 {
1103 ULONG MaximumLength;
1104 ULONG Length;
1105 ULONG Flags;
1106 ULONG DebugFlags;
1107 HANDLE ConsoleHandle;
1108 ULONG ConsoleFlags;
1109 HANDLE StandardInput;
1110 HANDLE StandardOutput;
1111 HANDLE StandardError;
1112 CURDIR CurrentDirectory;
1113 UNICODE_STRING DllPath;
1114 UNICODE_STRING ImagePathName;
1115 UNICODE_STRING CommandLine;
1116 PWSTR Environment;
1117 ULONG StartingX;
1118 ULONG StartingY;
1119 ULONG CountX;
1120 ULONG CountY;
1121 ULONG CountCharsX;
1122 ULONG CountCharsY;
1123 ULONG FillAttribute;
1124 ULONG WindowFlags;
1125 ULONG ShowWindowFlags;
1126 UNICODE_STRING WindowTitle;
1127 UNICODE_STRING DesktopInfo;
1128 UNICODE_STRING ShellInfo;
1129 UNICODE_STRING RuntimeData;
1130 RTL_DRIVE_LETTER_CURDIR CurrentDirectories[32];
1131 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
1132
1133 typedef struct _RTL_USER_PROCESS_INFORMATION
1134 {
1135 ULONG Size;
1136 HANDLE ProcessHandle;
1137 HANDLE ThreadHandle;
1138 CLIENT_ID ClientId;
1139 SECTION_IMAGE_INFORMATION ImageInformation;
1140 } RTL_USER_PROCESS_INFORMATION, *PRTL_USER_PROCESS_INFORMATION;
1141
1142 //
1143 // RTL Atom Table Structures
1144 //
1145 typedef struct _RTL_ATOM_TABLE_ENTRY
1146 {
1147 struct _RTL_ATOM_TABLE_ENTRY *HashLink;
1148 USHORT HandleIndex;
1149 USHORT Atom;
1150 USHORT ReferenceCount;
1151 UCHAR Flags;
1152 UCHAR NameLength;
1153 WCHAR Name[1];
1154 } RTL_ATOM_TABLE_ENTRY, *PRTL_ATOM_TABLE_ENTRY;
1155
1156 typedef struct _RTL_ATOM_TABLE
1157 {
1158 ULONG Signature;
1159 union
1160 {
1161 #ifdef NTOS_MODE_USER
1162 RTL_CRITICAL_SECTION CriticalSection;
1163 #else
1164 FAST_MUTEX FastMutex;
1165 #endif
1166 };
1167 union
1168 {
1169 #ifdef NTOS_MODE_USER
1170 RTL_HANDLE_TABLE RtlHandleTable;
1171 #else
1172 PHANDLE_TABLE ExHandleTable;
1173 #endif
1174 };
1175 ULONG NumberOfBuckets;
1176 PRTL_ATOM_TABLE_ENTRY Buckets[1];
1177 } RTL_ATOM_TABLE, *PRTL_ATOM_TABLE;
1178
1179 #ifndef _WINBASE_
1180 //
1181 // System Time and Timezone Structures
1182 //
1183 typedef struct _SYSTEMTIME
1184 {
1185 USHORT wYear;
1186 USHORT wMonth;
1187 USHORT wDayOfWeek;
1188 USHORT wDay;
1189 USHORT wHour;
1190 USHORT wMinute;
1191 USHORT wSecond;
1192 USHORT wMilliseconds;
1193 } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
1194
1195 typedef struct _TIME_ZONE_INFORMATION
1196 {
1197 LONG Bias;
1198 WCHAR StandardName[32];
1199 SYSTEMTIME StandardDate;
1200 LONG StandardBias;
1201 WCHAR DaylightName[32];
1202 SYSTEMTIME DaylightDate;
1203 LONG DaylightBias;
1204 } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
1205 #endif
1206
1207 //
1208 // Native version of Timezone Structure
1209 //
1210 typedef LPTIME_ZONE_INFORMATION PRTL_TIME_ZONE_INFORMATION;
1211
1212 //
1213 // Hotpatch Header
1214 //
1215 typedef struct _RTL_PATCH_HEADER
1216 {
1217 LIST_ENTRY PatchList;
1218 PVOID PatchImageBase;
1219 struct _RTL_PATCH_HEADER *NextPath;
1220 ULONG PatchFlags;
1221 LONG PatchRefCount;
1222 struct _HOTPATCH_HEADER *HotpatchHeader;
1223 UNICODE_STRING TargetDllName;
1224 PVOID TargetDllBase;
1225 PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry;
1226 PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry;
1227 struct _SYSTEM_HOTPATCH_CODE_INFORMATION *CodeInfo;
1228 } RTL_PATCH_HEADER, *PRTL_PATCH_HEADER;
1229
1230 //
1231 // Header for NLS Files
1232 //
1233 typedef struct _NLS_FILE_HEADER
1234 {
1235 USHORT HeaderSize;
1236 USHORT CodePage;
1237 USHORT MaximumCharacterSize;
1238 USHORT DefaultChar;
1239 USHORT UniDefaultChar;
1240 USHORT TransDefaultChar;
1241 USHORT TransUniDefaultChar;
1242 USHORT DBCSCodePage;
1243 UCHAR LeadByte[MAXIMUM_LEADBYTES];
1244 } NLS_FILE_HEADER, *PNLS_FILE_HEADER;
1245
1246 //
1247 // Stack Traces
1248 //
1249 typedef struct _RTL_STACK_TRACE_ENTRY
1250 {
1251 struct _RTL_STACK_TRACE_ENTRY *HashChain;
1252 ULONG TraceCount;
1253 USHORT Index;
1254 USHORT Depth;
1255 PVOID BackTrace[32];
1256 } RTL_STACK_TRACE_ENTRY, *PRTL_STACK_TRACE_ENTRY;
1257
1258 typedef struct _STACK_TRACE_DATABASE
1259 {
1260 RTL_CRITICAL_SECTION CriticalSection;
1261 } STACK_TRACE_DATABASE, *PSTACK_TRACE_DATABASE;
1262
1263 #ifndef NTOS_MODE_USER
1264
1265 //
1266 // Message Resource Entry, Block and Data
1267 //
1268 typedef struct _MESSAGE_RESOURCE_ENTRY
1269 {
1270 USHORT Length;
1271 USHORT Flags;
1272 UCHAR Text[ANYSIZE_ARRAY];
1273 } MESSAGE_RESOURCE_ENTRY, *PMESSAGE_RESOURCE_ENTRY;
1274
1275 typedef struct _MESSAGE_RESOURCE_BLOCK
1276 {
1277 ULONG LowId;
1278 ULONG HighId;
1279 ULONG OffsetToEntries;
1280 } MESSAGE_RESOURCE_BLOCK, *PMESSAGE_RESOURCE_BLOCK;
1281
1282 typedef struct _MESSAGE_RESOURCE_DATA
1283 {
1284 ULONG NumberOfBlocks;
1285 MESSAGE_RESOURCE_BLOCK Blocks[ANYSIZE_ARRAY];
1286 } MESSAGE_RESOURCE_DATA, *PMESSAGE_RESOURCE_DATA;
1287
1288 #endif
1289 #endif