[CONSRV]
[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 $endif (_WDMDDK_)
225 $if (_NTDDK_)
226
227 #ifndef _RTL_RUN_ONCE_DEF
228 #define _RTL_RUN_ONCE_DEF
229
230 #define RTL_RUN_ONCE_INIT {0}
231
232 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
233 #define RTL_RUN_ONCE_ASYNC 0x00000002UL
234 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
235
236 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
237
238 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
239
240 #define RTL_HASH_RESERVED_SIGNATURE 0
241
242 /* RtlVerifyVersionInfo() ComparisonType */
243
244 #define VER_EQUAL 1
245 #define VER_GREATER 2
246 #define VER_GREATER_EQUAL 3
247 #define VER_LESS 4
248 #define VER_LESS_EQUAL 5
249 #define VER_AND 6
250 #define VER_OR 7
251
252 #define VER_CONDITION_MASK 7
253 #define VER_NUM_BITS_PER_CONDITION_MASK 3
254
255 /* RtlVerifyVersionInfo() TypeMask */
256
257 #define VER_MINORVERSION 0x0000001
258 #define VER_MAJORVERSION 0x0000002
259 #define VER_BUILDNUMBER 0x0000004
260 #define VER_PLATFORMID 0x0000008
261 #define VER_SERVICEPACKMINOR 0x0000010
262 #define VER_SERVICEPACKMAJOR 0x0000020
263 #define VER_SUITENAME 0x0000040
264 #define VER_PRODUCT_TYPE 0x0000080
265
266 #define VER_NT_WORKSTATION 0x0000001
267 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
268 #define VER_NT_SERVER 0x0000003
269
270 #define VER_PLATFORM_WIN32s 0
271 #define VER_PLATFORM_WIN32_WINDOWS 1
272 #define VER_PLATFORM_WIN32_NT 2
273
274 typedef union _RTL_RUN_ONCE {
275 PVOID Ptr;
276 } RTL_RUN_ONCE, *PRTL_RUN_ONCE;
277
278 _Function_class_(RTL_RUN_ONCE_INIT_FN)
279 _IRQL_requires_same_
280 typedef ULONG /* LOGICAL */
281 (NTAPI *PRTL_RUN_ONCE_INIT_FN) (
282 _Inout_ PRTL_RUN_ONCE RunOnce,
283 _Inout_opt_ PVOID Parameter,
284 _Inout_opt_ PVOID *Context);
285
286 #endif /* _RTL_RUN_ONCE_DEF */
287
288 typedef enum _TABLE_SEARCH_RESULT {
289 TableEmptyTree,
290 TableFoundNode,
291 TableInsertAsLeft,
292 TableInsertAsRight
293 } TABLE_SEARCH_RESULT;
294
295 typedef enum _RTL_GENERIC_COMPARE_RESULTS {
296 GenericLessThan,
297 GenericGreaterThan,
298 GenericEqual
299 } RTL_GENERIC_COMPARE_RESULTS;
300
301 // Forwarder
302 struct _RTL_AVL_TABLE;
303
304 _IRQL_requires_same_
305 _Function_class_(RTL_AVL_COMPARE_ROUTINE)
306 typedef RTL_GENERIC_COMPARE_RESULTS
307 (NTAPI RTL_AVL_COMPARE_ROUTINE) (
308 _In_ struct _RTL_AVL_TABLE *Table,
309 _In_ PVOID FirstStruct,
310 _In_ PVOID SecondStruct);
311 typedef RTL_AVL_COMPARE_ROUTINE *PRTL_AVL_COMPARE_ROUTINE;
312
313 _IRQL_requires_same_
314 _Function_class_(RTL_AVL_ALLOCATE_ROUTINE)
315 __drv_allocatesMem(Mem)
316 typedef PVOID
317 (NTAPI RTL_AVL_ALLOCATE_ROUTINE) (
318 _In_ struct _RTL_AVL_TABLE *Table,
319 _In_ CLONG ByteSize);
320 typedef RTL_AVL_ALLOCATE_ROUTINE *PRTL_AVL_ALLOCATE_ROUTINE;
321
322 _IRQL_requires_same_
323 _Function_class_(RTL_AVL_FREE_ROUTINE)
324 typedef VOID
325 (NTAPI RTL_AVL_FREE_ROUTINE) (
326 _In_ struct _RTL_AVL_TABLE *Table,
327 _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer);
328 typedef RTL_AVL_FREE_ROUTINE *PRTL_AVL_FREE_ROUTINE;
329
330 _IRQL_requires_same_
331 _Function_class_(RTL_AVL_MATCH_FUNCTION)
332 typedef NTSTATUS
333 (NTAPI RTL_AVL_MATCH_FUNCTION) (
334 _In_ struct _RTL_AVL_TABLE *Table,
335 _In_ PVOID UserData,
336 _In_ PVOID MatchData);
337 typedef RTL_AVL_MATCH_FUNCTION *PRTL_AVL_MATCH_FUNCTION;
338
339 typedef struct _RTL_BALANCED_LINKS {
340 struct _RTL_BALANCED_LINKS *Parent;
341 struct _RTL_BALANCED_LINKS *LeftChild;
342 struct _RTL_BALANCED_LINKS *RightChild;
343 CHAR Balance;
344 UCHAR Reserved[3];
345 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
346
347 typedef struct _RTL_AVL_TABLE {
348 RTL_BALANCED_LINKS BalancedRoot;
349 PVOID OrderedPointer;
350 ULONG WhichOrderedElement;
351 ULONG NumberGenericTableElements;
352 ULONG DepthOfTree;
353 PRTL_BALANCED_LINKS RestartKey;
354 ULONG DeleteCount;
355 PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
356 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
357 PRTL_AVL_FREE_ROUTINE FreeRoutine;
358 PVOID TableContext;
359 } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
360
361 typedef struct _RTL_SPLAY_LINKS {
362 struct _RTL_SPLAY_LINKS *Parent;
363 struct _RTL_SPLAY_LINKS *LeftChild;
364 struct _RTL_SPLAY_LINKS *RightChild;
365 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
366
367 #ifndef RTL_USE_AVL_TABLES
368
369 struct _RTL_GENERIC_TABLE;
370
371 _IRQL_requires_same_
372 _Function_class_(RTL_GENERIC_COMPARE_ROUTINE)
373 typedef RTL_GENERIC_COMPARE_RESULTS
374 (NTAPI RTL_GENERIC_COMPARE_ROUTINE) (
375 _In_ struct _RTL_GENERIC_TABLE *Table,
376 _In_ PVOID FirstStruct,
377 _In_ PVOID SecondStruct);
378 typedef RTL_GENERIC_COMPARE_ROUTINE *PRTL_GENERIC_COMPARE_ROUTINE;
379
380 _IRQL_requires_same_
381 _Function_class_(RTL_GENERIC_ALLOCATE_ROUTINE)
382 __drv_allocatesMem(Mem)
383 typedef PVOID
384 (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE) (
385 _In_ struct _RTL_GENERIC_TABLE *Table,
386 _In_ CLONG ByteSize);
387 typedef RTL_GENERIC_ALLOCATE_ROUTINE *PRTL_GENERIC_ALLOCATE_ROUTINE;
388
389 _IRQL_requires_same_
390 _Function_class_(RTL_GENERIC_FREE_ROUTINE)
391 typedef VOID
392 (NTAPI RTL_GENERIC_FREE_ROUTINE) (
393 _In_ struct _RTL_GENERIC_TABLE *Table,
394 _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer);
395 typedef RTL_GENERIC_FREE_ROUTINE *PRTL_GENERIC_FREE_ROUTINE;
396
397 typedef struct _RTL_GENERIC_TABLE {
398 PRTL_SPLAY_LINKS TableRoot;
399 LIST_ENTRY InsertOrderList;
400 PLIST_ENTRY OrderedPointer;
401 ULONG WhichOrderedElement;
402 ULONG NumberGenericTableElements;
403 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
404 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
405 PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
406 PVOID TableContext;
407 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
408
409 #endif /* !RTL_USE_AVL_TABLES */
410
411 #ifdef RTL_USE_AVL_TABLES
412
413 #undef RTL_GENERIC_COMPARE_ROUTINE
414 #undef PRTL_GENERIC_COMPARE_ROUTINE
415 #undef RTL_GENERIC_ALLOCATE_ROUTINE
416 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
417 #undef RTL_GENERIC_FREE_ROUTINE
418 #undef PRTL_GENERIC_FREE_ROUTINE
419 #undef RTL_GENERIC_TABLE
420 #undef PRTL_GENERIC_TABLE
421
422 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
423 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
424 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
425 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
426 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
427 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
428 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
429 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
430
431 #endif /* RTL_USE_AVL_TABLES */
432
433 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
434
435 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY {
436 LIST_ENTRY Linkage;
437 ULONG_PTR Signature;
438 } RTL_DYNAMIC_HASH_TABLE_ENTRY, *PRTL_DYNAMIC_HASH_TABLE_ENTRY;
439
440 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT {
441 PLIST_ENTRY ChainHead;
442 PLIST_ENTRY PrevLinkage;
443 ULONG_PTR Signature;
444 } RTL_DYNAMIC_HASH_TABLE_CONTEXT, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT;
445
446 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR {
447 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry;
448 PLIST_ENTRY ChainHead;
449 ULONG BucketIndex;
450 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR;
451
452 typedef struct _RTL_DYNAMIC_HASH_TABLE {
453 ULONG Flags;
454 ULONG Shift;
455 ULONG TableSize;
456 ULONG Pivot;
457 ULONG DivisorMask;
458 ULONG NumEntries;
459 ULONG NonEmptyBuckets;
460 ULONG NumEnumerators;
461 PVOID Directory;
462 } RTL_DYNAMIC_HASH_TABLE, *PRTL_DYNAMIC_HASH_TABLE;
463
464 typedef struct _OSVERSIONINFOA {
465 ULONG dwOSVersionInfoSize;
466 ULONG dwMajorVersion;
467 ULONG dwMinorVersion;
468 ULONG dwBuildNumber;
469 ULONG dwPlatformId;
470 CHAR szCSDVersion[128];
471 } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
472
473 typedef struct _OSVERSIONINFOW {
474 ULONG dwOSVersionInfoSize;
475 ULONG dwMajorVersion;
476 ULONG dwMinorVersion;
477 ULONG dwBuildNumber;
478 ULONG dwPlatformId;
479 WCHAR szCSDVersion[128];
480 } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
481
482 typedef struct _OSVERSIONINFOEXA {
483 ULONG dwOSVersionInfoSize;
484 ULONG dwMajorVersion;
485 ULONG dwMinorVersion;
486 ULONG dwBuildNumber;
487 ULONG dwPlatformId;
488 CHAR szCSDVersion[128];
489 USHORT wServicePackMajor;
490 USHORT wServicePackMinor;
491 USHORT wSuiteMask;
492 UCHAR wProductType;
493 UCHAR wReserved;
494 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
495
496 typedef struct _OSVERSIONINFOEXW {
497 ULONG dwOSVersionInfoSize;
498 ULONG dwMajorVersion;
499 ULONG dwMinorVersion;
500 ULONG dwBuildNumber;
501 ULONG dwPlatformId;
502 WCHAR szCSDVersion[128];
503 USHORT wServicePackMajor;
504 USHORT wServicePackMinor;
505 USHORT wSuiteMask;
506 UCHAR wProductType;
507 UCHAR wReserved;
508 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
509
510 #ifdef UNICODE
511 typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
512 typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
513 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
514 typedef OSVERSIONINFOW OSVERSIONINFO;
515 typedef POSVERSIONINFOW POSVERSIONINFO;
516 typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
517 #else
518 typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
519 typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
520 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
521 typedef OSVERSIONINFOA OSVERSIONINFO;
522 typedef POSVERSIONINFOA POSVERSIONINFO;
523 typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
524 #endif /* UNICODE */
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_)