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