1 /******************************************************************************
2 * Runtime Library Types *
3 ******************************************************************************/
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
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
25 #define HASH_STRING_ALGORITHM_DEFAULT 0
26 #define HASH_STRING_ALGORITHM_X65599 1
27 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
29 typedef struct _RTL_BITMAP
{
32 } RTL_BITMAP
, *PRTL_BITMAP
;
34 typedef struct _RTL_BITMAP_RUN
{
37 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
40 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
46 IN PVOID EntryContext
);
48 typedef struct _RTL_QUERY_REGISTRY_TABLE
{
49 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
56 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
58 typedef struct _TIME_FIELDS
{
67 } TIME_FIELDS
, *PTIME_FIELDS
;
70 #ifndef _SLIST_HEADER_
71 #define _SLIST_HEADER_
75 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY
{
76 struct _SLIST_ENTRY
*Next
;
77 } SLIST_ENTRY
, *PSLIST_ENTRY
;
79 typedef struct _SLIST_ENTRY32
{
81 } SLIST_ENTRY32
, *PSLIST_ENTRY32
;
83 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER
{
84 _ANONYMOUS_STRUCT
struct {
91 ULONGLONG NextEntry
:39;
92 ULONGLONG HeaderType
:1;
94 ULONGLONG Reserved
:59;
99 ULONGLONG Sequence
:48;
100 ULONGLONG HeaderType
:1;
102 ULONGLONG Reserved
:2;
103 ULONGLONG NextEntry
:60;
107 ULONGLONG Sequence
:48;
108 ULONGLONG HeaderType
:1;
109 ULONGLONG Reserved
:3;
110 ULONGLONG NextEntry
:60;
112 } SLIST_HEADER
, *PSLIST_HEADER
;
114 typedef union _SLIST_HEADER32
{
116 _ANONYMOUS_STRUCT
struct {
121 } SLIST_HEADER32
, *PSLIST_HEADER32
;
125 #define SLIST_ENTRY SINGLE_LIST_ENTRY
126 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
127 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
129 typedef SLIST_ENTRY SLIST_ENTRY32
, *PSLIST_ENTRY32
;
131 typedef union _SLIST_HEADER
{
133 _ANONYMOUS_STRUCT
struct {
138 } SLIST_HEADER
, *PSLIST_HEADER
;
140 typedef SLIST_HEADER SLIST_HEADER32
, *PSLIST_HEADER32
;
142 #endif /* defined(_WIN64) */
144 #endif /* _SLIST_HEADER_ */
146 /* MS definition is broken! */
147 extern BOOLEAN NTSYSAPI NlsMbCodePageTag
;
148 extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag
;
149 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
150 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
152 #define SHORT_LEAST_SIGNIFICANT_BIT 0
153 #define SHORT_MOST_SIGNIFICANT_BIT 1
155 #define LONG_LEAST_SIGNIFICANT_BIT 0
156 #define LONG_3RD_MOST_SIGNIFICANT_BIT 1
157 #define LONG_2ND_MOST_SIGNIFICANT_BIT 2
158 #define LONG_MOST_SIGNIFICANT_BIT 3
160 #define RTLVERLIB_DDI(x) Wdmlib##x
163 (*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE
)(
167 (*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED
)(
173 #ifndef _RTL_RUN_ONCE_DEF
174 #define _RTL_RUN_ONCE_DEF
176 #define RTL_RUN_ONCE_INIT {0}
178 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
179 #define RTL_RUN_ONCE_ASYNC 0x00000002UL
180 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
182 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
184 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
186 #define RTL_HASH_RESERVED_SIGNATURE 0
188 /* RtlVerifyVersionInfo() ComparisonType */
191 #define VER_GREATER 2
192 #define VER_GREATER_EQUAL 3
194 #define VER_LESS_EQUAL 5
198 #define VER_CONDITION_MASK 7
199 #define VER_NUM_BITS_PER_CONDITION_MASK 3
201 /* RtlVerifyVersionInfo() TypeMask */
203 #define VER_MINORVERSION 0x0000001
204 #define VER_MAJORVERSION 0x0000002
205 #define VER_BUILDNUMBER 0x0000004
206 #define VER_PLATFORMID 0x0000008
207 #define VER_SERVICEPACKMINOR 0x0000010
208 #define VER_SERVICEPACKMAJOR 0x0000020
209 #define VER_SUITENAME 0x0000040
210 #define VER_PRODUCT_TYPE 0x0000080
212 #define VER_NT_WORKSTATION 0x0000001
213 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
214 #define VER_NT_SERVER 0x0000003
216 #define VER_PLATFORM_WIN32s 0
217 #define VER_PLATFORM_WIN32_WINDOWS 1
218 #define VER_PLATFORM_WIN32_NT 2
220 typedef union _RTL_RUN_ONCE
{
222 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
224 typedef ULONG
/* LOGICAL */
225 (NTAPI
*PRTL_RUN_ONCE_INIT_FN
) (
226 IN OUT PRTL_RUN_ONCE RunOnce
,
227 IN OUT PVOID Parameter OPTIONAL
,
228 IN OUT PVOID
*Context OPTIONAL
);
230 #endif /* _RTL_RUN_ONCE_DEF */
232 typedef enum _TABLE_SEARCH_RESULT
{
237 } TABLE_SEARCH_RESULT
;
239 typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
243 } RTL_GENERIC_COMPARE_RESULTS
;
246 struct _RTL_AVL_TABLE
;
248 typedef RTL_GENERIC_COMPARE_RESULTS
249 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
250 IN
struct _RTL_AVL_TABLE
*Table
,
251 IN PVOID FirstStruct
,
252 IN PVOID SecondStruct
);
255 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
256 IN
struct _RTL_AVL_TABLE
*Table
,
260 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
261 IN
struct _RTL_AVL_TABLE
*Table
,
265 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
) (
266 IN
struct _RTL_AVL_TABLE
*Table
,
270 typedef struct _RTL_BALANCED_LINKS
{
271 struct _RTL_BALANCED_LINKS
*Parent
;
272 struct _RTL_BALANCED_LINKS
*LeftChild
;
273 struct _RTL_BALANCED_LINKS
*RightChild
;
276 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
278 typedef struct _RTL_AVL_TABLE
{
279 RTL_BALANCED_LINKS BalancedRoot
;
280 PVOID OrderedPointer
;
281 ULONG WhichOrderedElement
;
282 ULONG NumberGenericTableElements
;
284 PRTL_BALANCED_LINKS RestartKey
;
286 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
287 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
288 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
290 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
292 #ifndef RTL_USE_AVL_TABLES
294 struct _RTL_GENERIC_TABLE
;
296 typedef RTL_GENERIC_COMPARE_RESULTS
297 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
298 IN
struct _RTL_GENERIC_TABLE
*Table
,
299 IN PVOID FirstStruct
,
300 IN PVOID SecondStruct
);
303 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
304 IN
struct _RTL_GENERIC_TABLE
*Table
,
308 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
309 IN
struct _RTL_GENERIC_TABLE
*Table
,
312 typedef struct _RTL_SPLAY_LINKS
{
313 struct _RTL_SPLAY_LINKS
*Parent
;
314 struct _RTL_SPLAY_LINKS
*LeftChild
;
315 struct _RTL_SPLAY_LINKS
*RightChild
;
316 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
318 typedef struct _RTL_GENERIC_TABLE
{
319 PRTL_SPLAY_LINKS TableRoot
;
320 LIST_ENTRY InsertOrderList
;
321 PLIST_ENTRY OrderedPointer
;
322 ULONG WhichOrderedElement
;
323 ULONG NumberGenericTableElements
;
324 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
325 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
326 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
328 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
330 #endif /* !RTL_USE_AVL_TABLES */
332 #ifdef RTL_USE_AVL_TABLES
334 #undef PRTL_GENERIC_COMPARE_ROUTINE
335 #undef RTL_GENERIC_COMPARE_ROUTINE
336 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
337 #undef RTL_GENERIC_ALLOCATE_ROUTINE
338 #undef PRTL_GENERIC_FREE_ROUTINE
339 #undef RTL_GENERIC_FREE_ROUTINE
340 #undef RTL_GENERIC_TABLE
341 #undef PRTL_GENERIC_TABLE
343 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
344 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
345 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
346 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
347 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
348 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
349 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
350 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
352 #endif /* RTL_USE_AVL_TABLES */
354 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY
{
357 } RTL_DYNAMIC_HASH_TABLE_ENTRY
, *PRTL_DYNAMIC_HASH_TABLE_ENTRY
;
359 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT
{
360 PLIST_ENTRY ChainHead
;
361 PLIST_ENTRY PrevLinkage
;
363 } RTL_DYNAMIC_HASH_TABLE_CONTEXT
, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT
;
365 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
{
366 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry
;
367 PLIST_ENTRY ChainHead
;
369 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR
;
371 typedef struct _RTL_DYNAMIC_HASH_TABLE
{
378 ULONG NonEmptyBuckets
;
379 ULONG NumEnumerators
;
381 } RTL_DYNAMIC_HASH_TABLE
, *PRTL_DYNAMIC_HASH_TABLE
;
383 typedef struct _OSVERSIONINFOA
{
384 ULONG dwOSVersionInfoSize
;
385 ULONG dwMajorVersion
;
386 ULONG dwMinorVersion
;
389 CHAR szCSDVersion
[128];
390 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
392 typedef struct _OSVERSIONINFOW
{
393 ULONG dwOSVersionInfoSize
;
394 ULONG dwMajorVersion
;
395 ULONG dwMinorVersion
;
398 WCHAR szCSDVersion
[128];
399 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
401 typedef struct _OSVERSIONINFOEXA
{
402 ULONG dwOSVersionInfoSize
;
403 ULONG dwMajorVersion
;
404 ULONG dwMinorVersion
;
407 CHAR szCSDVersion
[128];
408 USHORT wServicePackMajor
;
409 USHORT wServicePackMinor
;
413 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
415 typedef struct _OSVERSIONINFOEXW
{
416 ULONG dwOSVersionInfoSize
;
417 ULONG dwMajorVersion
;
418 ULONG dwMinorVersion
;
421 WCHAR szCSDVersion
[128];
422 USHORT wServicePackMajor
;
423 USHORT wServicePackMinor
;
427 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
430 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
431 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
432 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
433 typedef OSVERSIONINFOW OSVERSIONINFO
;
434 typedef POSVERSIONINFOW POSVERSIONINFO
;
435 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
437 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
438 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
439 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
440 typedef OSVERSIONINFOA OSVERSIONINFO
;
441 typedef POSVERSIONINFOA POSVERSIONINFO
;
442 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
445 #define HASH_ENTRY_KEY(x) ((x)->Signature)
450 #define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER L"System Volume Information"
453 (NTAPI
*PRTL_ALLOCATE_STRING_ROUTINE
)(
454 IN SIZE_T NumberOfBytes
);
456 #if _WIN32_WINNT >= 0x0600
458 (NTAPI
*PRTL_REALLOCATE_STRING_ROUTINE
)(
459 IN SIZE_T NumberOfBytes
,
464 (NTAPI
*PRTL_FREE_STRING_ROUTINE
)(
467 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine
;
468 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine
;
470 #if _WIN32_WINNT >= 0x0600
471 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine
;
475 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
) (
477 IN OUT PVOID
*CommitAddress
,
478 IN OUT PSIZE_T CommitSize
);
480 typedef struct _RTL_HEAP_PARAMETERS
{
482 SIZE_T SegmentReserve
;
483 SIZE_T SegmentCommit
;
484 SIZE_T DeCommitFreeBlockThreshold
;
485 SIZE_T DeCommitTotalFreeThreshold
;
486 SIZE_T MaximumAllocationSize
;
487 SIZE_T VirtualMemoryThreshold
;
488 SIZE_T InitialCommit
;
489 SIZE_T InitialReserve
;
490 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
492 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
494 #if (NTDDI_VERSION >= NTDDI_WIN2K)
496 typedef struct _GENERATE_NAME_CONTEXT
{
498 BOOLEAN CheckSumInserted
;
501 ULONG ExtensionLength
;
502 WCHAR ExtensionBuffer
[4];
503 ULONG LastIndexValue
;
504 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
506 typedef struct _PREFIX_TABLE_ENTRY
{
509 struct _PREFIX_TABLE_ENTRY
*NextPrefixTree
;
510 RTL_SPLAY_LINKS Links
;
512 } PREFIX_TABLE_ENTRY
, *PPREFIX_TABLE_ENTRY
;
514 typedef struct _PREFIX_TABLE
{
517 PPREFIX_TABLE_ENTRY NextPrefixTree
;
518 } PREFIX_TABLE
, *PPREFIX_TABLE
;
520 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
{
523 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
524 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
525 RTL_SPLAY_LINKS Links
;
526 PUNICODE_STRING Prefix
;
527 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
529 typedef struct _UNICODE_PREFIX_TABLE
{
532 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
533 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
534 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
536 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
538 #if (NTDDI_VERSION >= NTDDI_WINXP)
539 typedef struct _COMPRESSED_DATA_INFO
{
540 USHORT CompressionFormatAndEngine
;
541 UCHAR CompressionUnitShift
;
545 USHORT NumberOfChunks
;
546 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
547 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;