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