[FAST486]
[reactos.git] / include / xdk / rtltypes.h
1 /******************************************************************************
2 * Runtime Library Types *
3 ******************************************************************************/
4
5 $if (_WDMDDK_)
6 #define RTL_REGISTRY_ABSOLUTE 0
7 #define RTL_REGISTRY_SERVICES 1
8 #define RTL_REGISTRY_CONTROL 2
9 #define RTL_REGISTRY_WINDOWS_NT 3
10 #define RTL_REGISTRY_DEVICEMAP 4
11 #define RTL_REGISTRY_USER 5
12 #define RTL_REGISTRY_MAXIMUM 6
13 #define RTL_REGISTRY_HANDLE 0x40000000
14 #define RTL_REGISTRY_OPTIONAL 0x80000000
15
16 /* RTL_QUERY_REGISTRY_TABLE.Flags */
17 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
18 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
19 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
20 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
21 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
22 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
23 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
24
25 #define HASH_STRING_ALGORITHM_DEFAULT 0
26 #define HASH_STRING_ALGORITHM_X65599 1
27 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
28
29 typedef struct _RTL_BITMAP {
30 ULONG SizeOfBitMap;
31 PULONG Buffer;
32 } RTL_BITMAP, *PRTL_BITMAP;
33
34 typedef struct _RTL_BITMAP_RUN {
35 ULONG StartingIndex;
36 ULONG NumberOfBits;
37 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
38
39 _Function_class_(RTL_QUERY_REGISTRY_ROUTINE)
40 _IRQL_requires_max_(PASSIVE_LEVEL)
41 _IRQL_requires_same_
42 typedef NTSTATUS
43 (NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
44 _In_z_ PWSTR ValueName,
45 _In_ ULONG ValueType,
46 _In_reads_bytes_opt_(ValueLength) PVOID ValueData,
47 _In_ ULONG ValueLength,
48 _In_opt_ PVOID Context,
49 _In_opt_ PVOID EntryContext);
50
51 typedef struct _RTL_QUERY_REGISTRY_TABLE {
52 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
53 ULONG Flags;
54 PCWSTR Name;
55 PVOID EntryContext;
56 ULONG DefaultType;
57 PVOID DefaultData;
58 ULONG DefaultLength;
59 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
60
61 typedef struct _TIME_FIELDS {
62 CSHORT Year;
63 CSHORT Month;
64 CSHORT Day;
65 CSHORT Hour;
66 CSHORT Minute;
67 CSHORT Second;
68 CSHORT Milliseconds;
69 CSHORT Weekday;
70 } TIME_FIELDS, *PTIME_FIELDS;
71
72 /* Slist Header */
73 #ifndef _SLIST_HEADER_
74 #define _SLIST_HEADER_
75
76 #if defined(_WIN64)
77
78 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY {
79 struct _SLIST_ENTRY *Next;
80 } SLIST_ENTRY, *PSLIST_ENTRY;
81
82 typedef struct _SLIST_ENTRY32 {
83 ULONG Next;
84 } SLIST_ENTRY32, *PSLIST_ENTRY32;
85
86 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER {
87 _ANONYMOUS_STRUCT struct {
88 ULONGLONG Alignment;
89 ULONGLONG Region;
90 } DUMMYSTRUCTNAME;
91 struct {
92 ULONGLONG Depth:16;
93 ULONGLONG Sequence:9;
94 ULONGLONG NextEntry:39;
95 ULONGLONG HeaderType:1;
96 ULONGLONG Init:1;
97 ULONGLONG Reserved:59;
98 ULONGLONG Region:3;
99 } Header8;
100 struct {
101 ULONGLONG Depth:16;
102 ULONGLONG Sequence:48;
103 ULONGLONG HeaderType:1;
104 ULONGLONG Init:1;
105 ULONGLONG Reserved:2;
106 ULONGLONG NextEntry:60;
107 } Header16;
108 struct {
109 ULONGLONG Depth:16;
110 ULONGLONG Sequence:48;
111 ULONGLONG HeaderType:1;
112 ULONGLONG Reserved:3;
113 ULONGLONG NextEntry:60;
114 } HeaderX64;
115 } SLIST_HEADER, *PSLIST_HEADER;
116
117 typedef union _SLIST_HEADER32 {
118 ULONGLONG Alignment;
119 _ANONYMOUS_STRUCT struct {
120 SLIST_ENTRY32 Next;
121 USHORT Depth;
122 USHORT Sequence;
123 } DUMMYSTRUCTNAME;
124 } SLIST_HEADER32, *PSLIST_HEADER32;
125
126 #else
127
128 #define SLIST_ENTRY SINGLE_LIST_ENTRY
129 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
130 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
131
132 typedef SLIST_ENTRY SLIST_ENTRY32, *PSLIST_ENTRY32;
133
134 typedef union _SLIST_HEADER {
135 ULONGLONG Alignment;
136 _ANONYMOUS_STRUCT struct {
137 SLIST_ENTRY Next;
138 USHORT Depth;
139 USHORT Sequence;
140 } DUMMYSTRUCTNAME;
141 } SLIST_HEADER, *PSLIST_HEADER;
142
143 typedef SLIST_HEADER SLIST_HEADER32, *PSLIST_HEADER32;
144
145 #endif /* defined(_WIN64) */
146
147 #endif /* _SLIST_HEADER_ */
148
149 /* Exception record flags */
150 #define EXCEPTION_NONCONTINUABLE 0x01
151 #define EXCEPTION_UNWINDING 0x02
152 #define EXCEPTION_EXIT_UNWIND 0x04
153 #define EXCEPTION_STACK_INVALID 0x08
154 #define EXCEPTION_NESTED_CALL 0x10
155 #define EXCEPTION_TARGET_UNWIND 0x20
156 #define EXCEPTION_COLLIDED_UNWIND 0x40
157 #define EXCEPTION_UNWIND (EXCEPTION_UNWINDING | EXCEPTION_EXIT_UNWIND | \
158 EXCEPTION_TARGET_UNWIND | EXCEPTION_COLLIDED_UNWIND)
159
160 #define IS_UNWINDING(Flag) ((Flag & EXCEPTION_UNWIND) != 0)
161 #define IS_DISPATCHING(Flag) ((Flag & EXCEPTION_UNWIND) == 0)
162 #define IS_TARGET_UNWIND(Flag) (Flag & EXCEPTION_TARGET_UNWIND)
163
164 #define EXCEPTION_MAXIMUM_PARAMETERS 15
165
166 /* Exception records */
167 typedef struct _EXCEPTION_RECORD {
168 NTSTATUS ExceptionCode;
169 ULONG ExceptionFlags;
170 struct _EXCEPTION_RECORD *ExceptionRecord;
171 PVOID ExceptionAddress;
172 ULONG NumberParameters;
173 ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
174 } EXCEPTION_RECORD, *PEXCEPTION_RECORD;
175
176 typedef struct _EXCEPTION_RECORD32 {
177 NTSTATUS ExceptionCode;
178 ULONG ExceptionFlags;
179 ULONG ExceptionRecord;
180 ULONG ExceptionAddress;
181 ULONG NumberParameters;
182 ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
183 } EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;
184
185 typedef struct _EXCEPTION_RECORD64 {
186 NTSTATUS ExceptionCode;
187 ULONG ExceptionFlags;
188 ULONG64 ExceptionRecord;
189 ULONG64 ExceptionAddress;
190 ULONG NumberParameters;
191 ULONG __unusedAlignment;
192 ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
193 } EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;
194
195 typedef struct _EXCEPTION_POINTERS {
196 PEXCEPTION_RECORD ExceptionRecord;
197 PCONTEXT ContextRecord;
198 } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
199
200 /* MS definition is broken! */
201 extern BOOLEAN NTSYSAPI NlsMbCodePageTag;
202 extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag;
203 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
204 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
205
206 #define SHORT_LEAST_SIGNIFICANT_BIT 0
207 #define SHORT_MOST_SIGNIFICANT_BIT 1
208
209 #define LONG_LEAST_SIGNIFICANT_BIT 0
210 #define LONG_3RD_MOST_SIGNIFICANT_BIT 1
211 #define LONG_2ND_MOST_SIGNIFICANT_BIT 2
212 #define LONG_MOST_SIGNIFICANT_BIT 3
213
214 #define RTLVERLIB_DDI(x) Wdmlib##x
215
216 typedef BOOLEAN
217 (*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE)(
218 _In_ ULONG Version);
219
220 typedef BOOLEAN
221 (*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED)(
222 _In_ ULONG Version);
223
224 typedef struct _OSVERSIONINFOA {
225 ULONG dwOSVersionInfoSize;
226 ULONG dwMajorVersion;
227 ULONG dwMinorVersion;
228 ULONG dwBuildNumber;
229 ULONG dwPlatformId;
230 CHAR szCSDVersion[128];
231 } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
232
233 typedef struct _OSVERSIONINFOW {
234 ULONG dwOSVersionInfoSize;
235 ULONG dwMajorVersion;
236 ULONG dwMinorVersion;
237 ULONG dwBuildNumber;
238 ULONG dwPlatformId;
239 WCHAR szCSDVersion[128];
240 } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
241
242 typedef struct _OSVERSIONINFOEXA {
243 ULONG dwOSVersionInfoSize;
244 ULONG dwMajorVersion;
245 ULONG dwMinorVersion;
246 ULONG dwBuildNumber;
247 ULONG dwPlatformId;
248 CHAR szCSDVersion[128];
249 USHORT wServicePackMajor;
250 USHORT wServicePackMinor;
251 USHORT wSuiteMask;
252 UCHAR wProductType;
253 UCHAR wReserved;
254 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
255
256 typedef struct _OSVERSIONINFOEXW {
257 ULONG dwOSVersionInfoSize;
258 ULONG dwMajorVersion;
259 ULONG dwMinorVersion;
260 ULONG dwBuildNumber;
261 ULONG dwPlatformId;
262 WCHAR szCSDVersion[128];
263 USHORT wServicePackMajor;
264 USHORT wServicePackMinor;
265 USHORT wSuiteMask;
266 UCHAR wProductType;
267 UCHAR wReserved;
268 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
269
270 #ifdef UNICODE
271 typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
272 typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
273 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
274 typedef OSVERSIONINFOW OSVERSIONINFO;
275 typedef POSVERSIONINFOW POSVERSIONINFO;
276 typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
277 #else
278 typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
279 typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
280 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
281 typedef OSVERSIONINFOA OSVERSIONINFO;
282 typedef POSVERSIONINFOA POSVERSIONINFO;
283 typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
284 #endif /* UNICODE */
285
286 $endif (_WDMDDK_)
287 $if (_NTDDK_)
288
289 #ifndef _RTL_RUN_ONCE_DEF
290 #define _RTL_RUN_ONCE_DEF
291
292 #define RTL_RUN_ONCE_INIT {0}
293
294 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
295 #define RTL_RUN_ONCE_ASYNC 0x00000002UL
296 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
297
298 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
299
300 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
301
302 #define RTL_HASH_RESERVED_SIGNATURE 0
303
304 /* RtlVerifyVersionInfo() ComparisonType */
305
306 #define VER_EQUAL 1
307 #define VER_GREATER 2
308 #define VER_GREATER_EQUAL 3
309 #define VER_LESS 4
310 #define VER_LESS_EQUAL 5
311 #define VER_AND 6
312 #define VER_OR 7
313
314 #define VER_CONDITION_MASK 7
315 #define VER_NUM_BITS_PER_CONDITION_MASK 3
316
317 /* RtlVerifyVersionInfo() TypeMask */
318
319 #define VER_MINORVERSION 0x0000001
320 #define VER_MAJORVERSION 0x0000002
321 #define VER_BUILDNUMBER 0x0000004
322 #define VER_PLATFORMID 0x0000008
323 #define VER_SERVICEPACKMINOR 0x0000010
324 #define VER_SERVICEPACKMAJOR 0x0000020
325 #define VER_SUITENAME 0x0000040
326 #define VER_PRODUCT_TYPE 0x0000080
327
328 #define VER_NT_WORKSTATION 0x0000001
329 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
330 #define VER_NT_SERVER 0x0000003
331
332 #define VER_PLATFORM_WIN32s 0
333 #define VER_PLATFORM_WIN32_WINDOWS 1
334 #define VER_PLATFORM_WIN32_NT 2
335
336 typedef union _RTL_RUN_ONCE {
337 PVOID Ptr;
338 } RTL_RUN_ONCE, *PRTL_RUN_ONCE;
339
340 _Function_class_(RTL_RUN_ONCE_INIT_FN)
341 _IRQL_requires_same_
342 typedef ULONG /* LOGICAL */
343 (NTAPI *PRTL_RUN_ONCE_INIT_FN) (
344 _Inout_ PRTL_RUN_ONCE RunOnce,
345 _Inout_opt_ PVOID Parameter,
346 _Inout_opt_ PVOID *Context);
347
348 #endif /* _RTL_RUN_ONCE_DEF */
349
350 typedef enum _TABLE_SEARCH_RESULT {
351 TableEmptyTree,
352 TableFoundNode,
353 TableInsertAsLeft,
354 TableInsertAsRight
355 } TABLE_SEARCH_RESULT;
356
357 typedef enum _RTL_GENERIC_COMPARE_RESULTS {
358 GenericLessThan,
359 GenericGreaterThan,
360 GenericEqual
361 } RTL_GENERIC_COMPARE_RESULTS;
362
363 // Forwarder
364 struct _RTL_AVL_TABLE;
365
366 _IRQL_requires_same_
367 _Function_class_(RTL_AVL_COMPARE_ROUTINE)
368 typedef RTL_GENERIC_COMPARE_RESULTS
369 (NTAPI RTL_AVL_COMPARE_ROUTINE) (
370 _In_ struct _RTL_AVL_TABLE *Table,
371 _In_ PVOID FirstStruct,
372 _In_ PVOID SecondStruct);
373 typedef RTL_AVL_COMPARE_ROUTINE *PRTL_AVL_COMPARE_ROUTINE;
374
375 _IRQL_requires_same_
376 _Function_class_(RTL_AVL_ALLOCATE_ROUTINE)
377 __drv_allocatesMem(Mem)
378 typedef PVOID
379 (NTAPI RTL_AVL_ALLOCATE_ROUTINE) (
380 _In_ struct _RTL_AVL_TABLE *Table,
381 _In_ CLONG ByteSize);
382 typedef RTL_AVL_ALLOCATE_ROUTINE *PRTL_AVL_ALLOCATE_ROUTINE;
383
384 _IRQL_requires_same_
385 _Function_class_(RTL_AVL_FREE_ROUTINE)
386 typedef VOID
387 (NTAPI RTL_AVL_FREE_ROUTINE) (
388 _In_ struct _RTL_AVL_TABLE *Table,
389 _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer);
390 typedef RTL_AVL_FREE_ROUTINE *PRTL_AVL_FREE_ROUTINE;
391
392 _IRQL_requires_same_
393 _Function_class_(RTL_AVL_MATCH_FUNCTION)
394 typedef NTSTATUS
395 (NTAPI RTL_AVL_MATCH_FUNCTION) (
396 _In_ struct _RTL_AVL_TABLE *Table,
397 _In_ PVOID UserData,
398 _In_ PVOID MatchData);
399 typedef RTL_AVL_MATCH_FUNCTION *PRTL_AVL_MATCH_FUNCTION;
400
401 typedef struct _RTL_BALANCED_LINKS {
402 struct _RTL_BALANCED_LINKS *Parent;
403 struct _RTL_BALANCED_LINKS *LeftChild;
404 struct _RTL_BALANCED_LINKS *RightChild;
405 CHAR Balance;
406 UCHAR Reserved[3];
407 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
408
409 typedef struct _RTL_AVL_TABLE {
410 RTL_BALANCED_LINKS BalancedRoot;
411 PVOID OrderedPointer;
412 ULONG WhichOrderedElement;
413 ULONG NumberGenericTableElements;
414 ULONG DepthOfTree;
415 PRTL_BALANCED_LINKS RestartKey;
416 ULONG DeleteCount;
417 PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
418 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
419 PRTL_AVL_FREE_ROUTINE FreeRoutine;
420 PVOID TableContext;
421 } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
422
423 typedef struct _RTL_SPLAY_LINKS {
424 struct _RTL_SPLAY_LINKS *Parent;
425 struct _RTL_SPLAY_LINKS *LeftChild;
426 struct _RTL_SPLAY_LINKS *RightChild;
427 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
428
429 #ifndef RTL_USE_AVL_TABLES
430
431 struct _RTL_GENERIC_TABLE;
432
433 _IRQL_requires_same_
434 _Function_class_(RTL_GENERIC_COMPARE_ROUTINE)
435 typedef RTL_GENERIC_COMPARE_RESULTS
436 (NTAPI RTL_GENERIC_COMPARE_ROUTINE) (
437 _In_ struct _RTL_GENERIC_TABLE *Table,
438 _In_ PVOID FirstStruct,
439 _In_ PVOID SecondStruct);
440 typedef RTL_GENERIC_COMPARE_ROUTINE *PRTL_GENERIC_COMPARE_ROUTINE;
441
442 _IRQL_requires_same_
443 _Function_class_(RTL_GENERIC_ALLOCATE_ROUTINE)
444 __drv_allocatesMem(Mem)
445 typedef PVOID
446 (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE) (
447 _In_ struct _RTL_GENERIC_TABLE *Table,
448 _In_ CLONG ByteSize);
449 typedef RTL_GENERIC_ALLOCATE_ROUTINE *PRTL_GENERIC_ALLOCATE_ROUTINE;
450
451 _IRQL_requires_same_
452 _Function_class_(RTL_GENERIC_FREE_ROUTINE)
453 typedef VOID
454 (NTAPI RTL_GENERIC_FREE_ROUTINE) (
455 _In_ struct _RTL_GENERIC_TABLE *Table,
456 _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer);
457 typedef RTL_GENERIC_FREE_ROUTINE *PRTL_GENERIC_FREE_ROUTINE;
458
459 typedef struct _RTL_GENERIC_TABLE {
460 PRTL_SPLAY_LINKS TableRoot;
461 LIST_ENTRY InsertOrderList;
462 PLIST_ENTRY OrderedPointer;
463 ULONG WhichOrderedElement;
464 ULONG NumberGenericTableElements;
465 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
466 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
467 PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
468 PVOID TableContext;
469 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
470
471 #endif /* !RTL_USE_AVL_TABLES */
472
473 #ifdef RTL_USE_AVL_TABLES
474
475 #undef RTL_GENERIC_COMPARE_ROUTINE
476 #undef PRTL_GENERIC_COMPARE_ROUTINE
477 #undef RTL_GENERIC_ALLOCATE_ROUTINE
478 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
479 #undef RTL_GENERIC_FREE_ROUTINE
480 #undef PRTL_GENERIC_FREE_ROUTINE
481 #undef RTL_GENERIC_TABLE
482 #undef PRTL_GENERIC_TABLE
483
484 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
485 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
486 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
487 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
488 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
489 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
490 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
491 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
492
493 #endif /* RTL_USE_AVL_TABLES */
494
495 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
496
497 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY {
498 LIST_ENTRY Linkage;
499 ULONG_PTR Signature;
500 } RTL_DYNAMIC_HASH_TABLE_ENTRY, *PRTL_DYNAMIC_HASH_TABLE_ENTRY;
501
502 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT {
503 PLIST_ENTRY ChainHead;
504 PLIST_ENTRY PrevLinkage;
505 ULONG_PTR Signature;
506 } RTL_DYNAMIC_HASH_TABLE_CONTEXT, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT;
507
508 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR {
509 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry;
510 PLIST_ENTRY ChainHead;
511 ULONG BucketIndex;
512 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR;
513
514 typedef struct _RTL_DYNAMIC_HASH_TABLE {
515 ULONG Flags;
516 ULONG Shift;
517 ULONG TableSize;
518 ULONG Pivot;
519 ULONG DivisorMask;
520 ULONG NumEntries;
521 ULONG NonEmptyBuckets;
522 ULONG NumEnumerators;
523 PVOID Directory;
524 } RTL_DYNAMIC_HASH_TABLE, *PRTL_DYNAMIC_HASH_TABLE;
525
526 #define HASH_ENTRY_KEY(x) ((x)->Signature)
527
528 $endif (_NTDDK_)
529 $if (_NTIFS_)
530
531 #define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER L"System Volume Information"
532
533 _Function_class_(RTL_ALLOCATE_STRING_ROUTINE)
534 _IRQL_requires_max_(PASSIVE_LEVEL)
535 __drv_allocatesMem(Mem)
536 typedef PVOID
537 (NTAPI *PRTL_ALLOCATE_STRING_ROUTINE)(
538 _In_ SIZE_T NumberOfBytes);
539
540 #if _WIN32_WINNT >= 0x0600
541 _Function_class_(RTL_REALLOCATE_STRING_ROUTINE)
542 _IRQL_requires_max_(PASSIVE_LEVEL)
543 __drv_allocatesMem(Mem)
544 typedef PVOID
545 (NTAPI *PRTL_REALLOCATE_STRING_ROUTINE)(
546 _In_ SIZE_T NumberOfBytes,
547 IN PVOID Buffer);
548 #endif
549
550 typedef VOID
551 (NTAPI *PRTL_FREE_STRING_ROUTINE)(
552 _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer);
553
554 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine;
555 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine;
556
557 #if _WIN32_WINNT >= 0x0600
558 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine;
559 #endif
560
561 _Function_class_(RTL_HEAP_COMMIT_ROUTINE)
562 _IRQL_requires_same_
563 typedef NTSTATUS
564 (NTAPI *PRTL_HEAP_COMMIT_ROUTINE) (
565 _In_ PVOID Base,
566 _Inout_ PVOID *CommitAddress,
567 _Inout_ PSIZE_T CommitSize);
568
569 typedef struct _RTL_HEAP_PARAMETERS {
570 ULONG Length;
571 SIZE_T SegmentReserve;
572 SIZE_T SegmentCommit;
573 SIZE_T DeCommitFreeBlockThreshold;
574 SIZE_T DeCommitTotalFreeThreshold;
575 SIZE_T MaximumAllocationSize;
576 SIZE_T VirtualMemoryThreshold;
577 SIZE_T InitialCommit;
578 SIZE_T InitialReserve;
579 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
580 SIZE_T Reserved[2];
581 } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
582
583 #if (NTDDI_VERSION >= NTDDI_WIN2K)
584
585 typedef struct _GENERATE_NAME_CONTEXT {
586 USHORT Checksum;
587 BOOLEAN CheckSumInserted;
588 _Field_range_(<=, 8) UCHAR NameLength;
589 WCHAR NameBuffer[8];
590 _Field_range_(<=, 4) ULONG ExtensionLength;
591 WCHAR ExtensionBuffer[4];
592 ULONG LastIndexValue;
593 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
594
595 typedef struct _PREFIX_TABLE_ENTRY {
596 CSHORT NodeTypeCode;
597 CSHORT NameLength;
598 struct _PREFIX_TABLE_ENTRY *NextPrefixTree;
599 RTL_SPLAY_LINKS Links;
600 PSTRING Prefix;
601 } PREFIX_TABLE_ENTRY, *PPREFIX_TABLE_ENTRY;
602
603 typedef struct _PREFIX_TABLE {
604 CSHORT NodeTypeCode;
605 CSHORT NameLength;
606 PPREFIX_TABLE_ENTRY NextPrefixTree;
607 } PREFIX_TABLE, *PPREFIX_TABLE;
608
609 typedef struct _UNICODE_PREFIX_TABLE_ENTRY {
610 CSHORT NodeTypeCode;
611 CSHORT NameLength;
612 struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
613 struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
614 RTL_SPLAY_LINKS Links;
615 PUNICODE_STRING Prefix;
616 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
617
618 typedef struct _UNICODE_PREFIX_TABLE {
619 CSHORT NodeTypeCode;
620 CSHORT NameLength;
621 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
622 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
623 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
624
625 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
626
627 #if (NTDDI_VERSION >= NTDDI_WINXP)
628 typedef struct _COMPRESSED_DATA_INFO {
629 USHORT CompressionFormatAndEngine;
630 UCHAR CompressionUnitShift;
631 UCHAR ChunkShift;
632 UCHAR ClusterShift;
633 UCHAR Reserved;
634 USHORT NumberOfChunks;
635 ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
636 } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
637 #endif
638 $endif (_NTIFS_)