3 Copyright (c) Alex Ionescu. All rights reserved.
11 Type definitions for the Run-Time Library
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
28 // Maximum Atom Length
30 #define RTL_MAXIMUM_ATOM_LENGTH 255
33 // Process Parameters Flags (FIXME: Rename)
35 #define PPF_NORMALIZED 0x01
36 #define PPF_PROFILE_USER 0x02
37 #define PPF_PROFILE_SERVER 0x04
38 #define PPF_PROFILE_KERNEL 0x08
39 #define PPF_UNKNOWN 0x10
40 #define PPF_RESERVE_1MB 0x20
41 #define PPF_DISABLE_HEAP_CHECKS 0x100
42 #define PPF_PROCESS_OR_1 0x200
43 #define PPF_PROCESS_OR_2 0x400
48 #define EXCEPTION_CHAIN_END ((PEXCEPTION_REGISTRATION_RECORD)-1)
49 #define EXCEPTION_UNWINDING 0x02
50 #define EXCEPTION_EXIT_UNWIND 0x04
51 #define EXCEPTION_STACK_INVALID 0x08
52 #define EXCEPTION_NESTED_CALL 0x10
53 #define EXCEPTION_TARGET_UNWIND 0x20
54 #define EXCEPTION_COLLIDED_UNWIND 0x20
57 // Range and Range List Flags
59 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
60 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
62 #define RTL_RANGE_SHARED 0x01
63 #define RTL_RANGE_CONFLICT 0x02
68 #define RTL_REGISTRY_ABSOLUTE 0
69 #define RTL_REGISTRY_SERVICES 1
70 #define RTL_REGISTRY_CONTROL 2
71 #define RTL_REGISTRY_WINDOWS_NT 3
72 #define RTL_REGISTRY_DEVICEMAP 4
73 #define RTL_REGISTRY_USER 5
74 #define RTL_REGISTRY_MAXIMUM 6
75 #define RTL_REGISTRY_HANDLE 0x40000000
76 #define RTL_REGISTRY_OPTIONAL 0x80000000
77 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
78 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
79 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
80 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
81 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
82 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
83 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
88 #define VER_MINORVERSION 0x0000001
89 #define VER_MAJORVERSION 0x0000002
90 #define VER_BUILDNUMBER 0x0000004
91 #define VER_PLATFORMID 0x0000008
92 #define VER_SERVICEPACKMINOR 0x0000010
93 #define VER_SERVICEPACKMAJOR 0x0000020
94 #define VER_SUITENAME 0x0000040
95 #define VER_PRODUCT_TYPE 0x0000080
96 #define VER_PLATFORM_WIN32s 0
97 #define VER_PLATFORM_WIN32_WINDOWS 1
98 #define VER_PLATFORM_WIN32_NT 2
100 #define VER_GREATER 2
101 #define VER_GREATER_EQUAL 3
103 #define VER_LESS_EQUAL 5
106 #define VER_CONDITION_MASK 7
107 #define VER_NUM_BITS_PER_CONDITION_MASK 3
112 #define TIME_ZONE_ID_UNKNOWN 0
113 #define TIME_ZONE_ID_STANDARD 1
114 #define TIME_ZONE_ID_DAYLIGHT 2
115 #define TIME_ZONE_ID_INVALID 0xFFFFFFFF
118 // RTL Lock Type (Critical Section or Resource)
120 #define RTL_CRITSECT_TYPE 0
121 #define RTL_RESOURCE_TYPE 1
123 #ifdef NTOS_MODE_USER
126 // String Hash Algorithms
128 #define HASH_STRING_ALGORITHM_DEFAULT 0
129 #define HASH_STRING_ALGORITHM_X65599 1
130 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
133 // RtlDuplicateString Flags
135 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
136 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
141 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
142 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
143 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
145 #define MAXIMUM_LEADBYTES 12
150 #define RTL_DEBUG_QUERY_MODULES 0x01
151 #define RTL_DEBUG_QUERY_BACKTRACES 0x02
152 #define RTL_DEBUG_QUERY_HEAPS 0x04
153 #define RTL_DEBUG_QUERY_HEAP_TAGS 0x08
154 #define RTL_DEBUG_QUERY_HEAP_BLOCKS 0x10
155 #define RTL_DEBUG_QUERY_LOCKS 0x20
160 #define RTL_HANDLE_VALID 0x1
165 #define RTL_ATOM_IS_PINNED 0x1
170 #ifdef NTOS_MODE_USER
171 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
172 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
175 // Constant String Macro
177 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
179 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
180 sizeof(__SOURCE_STRING__), \
181 (__SOURCE_STRING__) \
186 #ifdef NTOS_MODE_USER
189 // Table and Compare result types
191 typedef enum _TABLE_SEARCH_RESULT
197 } TABLE_SEARCH_RESULT
;
199 typedef enum _RTL_GENERIC_COMPARE_RESULTS
204 } RTL_GENERIC_COMPARE_RESULTS
;
209 // ACL Query Information Classes
211 typedef enum _ACL_INFORMATION_CLASS
213 AclRevisionInformation
= 1,
215 } ACL_INFORMATION_CLASS
;
222 typedef enum _RTL_PATH_TYPE
226 ABSOLUTE_DRIVE_PATH
, // "c:/foo"
227 RELATIVE_DRIVE_PATH
, // "c:foo"
228 ABSOLUTE_PATH
, // "/foo"
229 RELATIVE_PATH
, // "foo"
230 DEVICE_PATH
, // "//./foo"
231 UNC_DOT_PATH
// "//."
234 #ifndef NTOS_MODE_USER
237 // Callback function for RTL Timers or Registered Waits
240 (NTAPI
*WAITORTIMERCALLBACKFUNC
)(
242 BOOLEAN fTimerOrWaitFired
246 // Handler during Vectored RTL Exceptions
249 (NTAPI
*PVECTORED_EXCEPTION_HANDLER
)(
250 PEXCEPTION_POINTERS ExceptionPointers
256 // Handler during regular RTL Exceptions
258 typedef EXCEPTION_DISPOSITION
259 (NTAPI
*PEXCEPTION_ROUTINE
)(
260 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
261 IN PVOID EstablisherFrame
,
262 IN OUT
struct _CONTEXT
*ContextRecord
,
263 IN OUT PVOID DispatcherContext
269 // Callback for RTL Heap Enumeration
272 (*PHEAP_ENUMERATION_ROUTINE
)(
278 // Thread and Process Start Routines for RtlCreateUserThread/Process
280 typedef ULONG (NTAPI
*PTHREAD_START_ROUTINE
)(
285 (NTAPI
*PRTL_BASE_PROCESS_START_ROUTINE
)(
286 PTHREAD_START_ROUTINE StartAddress
,
291 // Declare empty structure definitions so that they may be referenced by
292 // routines before they are defined
294 struct _RTL_AVL_TABLE
;
295 struct _RTL_GENERIC_TABLE
;
297 typedef struct _COMPRESSED_DATA_INFO COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
300 // Routines and callbacks for the RTL AVL/Generic Table package
303 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
)(
304 struct _RTL_AVL_TABLE
*Table
,
309 typedef RTL_GENERIC_COMPARE_RESULTS
310 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
311 struct _RTL_AVL_TABLE
*Table
,
316 typedef RTL_GENERIC_COMPARE_RESULTS
317 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
318 struct _RTL_GENERIC_TABLE
*Table
,
324 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
325 struct _RTL_GENERIC_TABLE
*Table
,
330 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
331 struct _RTL_GENERIC_TABLE
*Table
,
336 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
337 struct _RTL_AVL_TABLE
*Table
,
342 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
343 struct _RTL_AVL_TABLE
*Table
,
348 // RTL Query Registry callback
351 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
355 IN ULONG ValueLength
,
357 IN PVOID EntryContext
361 // RTL Range List callbacks
363 #ifdef NTOS_MODE_USER
365 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
)(
367 struct _RTL_RANGE
*Range
371 // Custom Heap Commit Routine for RtlCreateHeap
374 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
)(
376 IN OUT PVOID
*CommitAddress
,
377 IN OUT PSIZE_T CommitSize
381 // Version Info redefinitions
383 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW
;
384 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW
;
385 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW
;
386 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW
;
389 // Simple pointer definitions
391 typedef ACL_REVISION_INFORMATION
*PACL_REVISION_INFORMATION
;
392 typedef ACL_SIZE_INFORMATION
*PACL_SIZE_INFORMATION
;
395 // Parameters for RtlCreateHeap
397 typedef struct _RTL_HEAP_PARAMETERS
400 SIZE_T SegmentReserve
;
401 SIZE_T SegmentCommit
;
402 SIZE_T DeCommitFreeBlockThreshold
;
403 SIZE_T DeCommitTotalFreeThreshold
;
404 SIZE_T MaximumAllocationSize
;
405 SIZE_T VirtualMemoryThreshold
;
406 SIZE_T InitialCommit
;
407 SIZE_T InitialReserve
;
408 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
410 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
413 // RTL Bitmap structures
415 typedef struct _RTL_BITMAP
419 } RTL_BITMAP
, *PRTL_BITMAP
;
421 typedef struct _RTL_BITMAP_RUN
425 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
428 // RtlGenerateXxxName context
430 typedef struct _GENERATE_NAME_CONTEXT
433 BOOLEAN CheckSumInserted
;
436 ULONG ExtensionLength
;
437 WCHAR ExtensionBuffer
[4];
438 ULONG LastIndexValue
;
439 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
442 // RTL Splay and Balanced Links structures
444 typedef struct _RTL_SPLAY_LINKS
446 struct _RTL_SPLAY_LINKS
*Parent
;
447 struct _RTL_SPLAY_LINKS
*LeftChild
;
448 struct _RTL_SPLAY_LINKS
*RightChild
;
449 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
451 typedef struct _RTL_BALANCED_LINKS
453 struct _RTL_BALANCED_LINKS
*Parent
;
454 struct _RTL_BALANCED_LINKS
*LeftChild
;
455 struct _RTL_BALANCED_LINKS
*RightChild
;
458 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
461 // RTL Avl/Generic Tables
463 typedef struct _RTL_GENERIC_TABLE
465 PRTL_SPLAY_LINKS TableRoot
;
466 LIST_ENTRY InsertOrderList
;
467 PLIST_ENTRY OrderedPointer
;
468 ULONG WhichOrderedElement
;
469 ULONG NumberGenericTableElements
;
470 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
471 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
472 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
474 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
476 typedef struct _RTL_AVL_TABLE
478 RTL_BALANCED_LINKS BalancedRoot
;
479 PVOID OrderedPointer
;
480 ULONG WhichOrderedElement
;
481 ULONG NumberGenericTableElements
;
483 PRTL_BALANCED_LINKS RestartKey
;
485 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
486 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
487 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
489 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
492 // RtlQueryRegistry Data
494 typedef struct _RTL_QUERY_REGISTRY_TABLE
496 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
503 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
506 // RTL Unicode Table Structures
508 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
512 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
513 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
514 RTL_SPLAY_LINKS Links
;
515 PUNICODE_STRING Prefix
;
516 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
518 typedef struct _UNICODE_PREFIX_TABLE
522 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
523 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
524 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
527 // Time Structure for RTL Time calls
529 typedef struct _TIME_FIELDS
539 } TIME_FIELDS
, *PTIME_FIELDS
;
548 ACCESS_MASK AccessMask
;
552 // Information Structures for RTL Debug Functions
554 typedef struct _RTL_PROCESS_MODULE_INFORMATION
563 USHORT ModuleNameOffset
;
565 } RTL_PROCESS_MODULE_INFORMATION
, *PRTL_PROCESS_MODULE_INFORMATION
;
567 typedef struct _RTL_PROCESS_MODULES
570 RTL_PROCESS_MODULE_INFORMATION ModuleEntry
[1];
571 } RTL_PROCESS_MODULES
, *PRTL_PROCESS_MODULES
;
573 typedef struct _RTL_PROCESS_HEAP_INFORMATION
586 } RTL_PROCESS_HEAP_INFORMATION
, *PRTL_PROCESS_HEAP_INFORMATION
;
588 typedef struct _RTL_PROCESS_HEAPS
591 RTL_PROCESS_HEAP_INFORMATION HeapEntry
[1];
592 } RTL_PROCESS_HEAPS
, *PRTL_PROCESS_HEAPS
;
594 typedef struct _RTL_PROCESS_LOCK_INFORMATION
598 USHORT CreatorBackTraceIndex
;
601 ULONG ContentionCount
;
603 ULONG RecursionCount
;
604 ULONG NumberOfSharedWaiters
;
605 ULONG NumberOfExclusiveWaiters
;
606 } RTL_PROCESS_LOCK_INFORMATION
, *PRTL_PROCESS_LOCK_INFORMATION
;
608 typedef struct _RTL_PROCESS_LOCKS
611 RTL_PROCESS_LOCK_INFORMATION LockEntry
[1];
612 } RTL_PROCESS_LOCKS
, *PRTL_PROCESS_LOCKS
;
614 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
618 } RTL_PROCESS_BACKTRACE_INFORMATION
, *PRTL_PROCESS_BACKTRACE_INFORMATION
;
620 typedef struct _RTL_PROCESS_BACKTRACES
622 ULONG BackTraceCount
;
623 RTL_PROCESS_BACKTRACE_INFORMATION BackTraceEntry
[1];
624 } RTL_PROCESS_BACKTRACES
, *PRTL_PROCESS_BACKTRACES
;
626 typedef struct _RTL_DEBUG_BUFFER
628 HANDLE SectionHandle
;
630 PVOID RemoteSectionBase
;
631 ULONG SectionBaseDelta
;
632 HANDLE EventPairHandle
;
634 HANDLE RemoteThreadHandle
;
639 PRTL_PROCESS_MODULES ModuleInformation
;
640 PRTL_PROCESS_BACKTRACES BackTraceInformation
;
641 PRTL_PROCESS_HEAPS HeapInformation
;
642 PRTL_PROCESS_LOCKS LockInformation
;
644 } RTL_DEBUG_BUFFER
, *PRTL_DEBUG_BUFFER
;
647 // RTL Handle Structures
649 typedef struct _RTL_HANDLE_TABLE_ENTRY
652 struct _RTL_HANDLE_TABLE_ENTRY
*NextFree
;
653 } RTL_HANDLE_TABLE_ENTRY
, *PRTL_HANDLE_TABLE_ENTRY
;
655 typedef struct _RTL_HANDLE_TABLE
657 ULONG MaximumNumberOfHandles
;
658 ULONG SizeOfHandleTableEntry
;
660 PRTL_HANDLE_TABLE_ENTRY FreeHandles
;
661 PRTL_HANDLE_TABLE_ENTRY CommittedHandles
;
662 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles
;
663 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles
;
664 } RTL_HANDLE_TABLE
, *PRTL_HANDLE_TABLE
;
669 typedef struct _EXCEPTION_REGISTRATION_RECORD
671 struct _EXCEPTION_REGISTRATION_RECORD
*Next
;
672 PEXCEPTION_HANDLER Handler
;
673 } EXCEPTION_REGISTRATION_RECORD
, *PEXCEPTION_REGISTRATION_RECORD
;
676 // Current Directory Structures
678 typedef struct _CURDIR
680 UNICODE_STRING DosPath
;
684 typedef struct RTL_DRIVE_LETTER_CURDIR
689 UNICODE_STRING DosPath
;
690 } RTL_DRIVE_LETTER_CURDIR
, *PRTL_DRIVE_LETTER_CURDIR
;
692 #ifndef NTOS_MODE_USER
695 // RTL Critical Section Structures
697 typedef struct _RTL_CRITICAL_SECTION_DEBUG
700 USHORT CreatorBackTraceIndex
;
701 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
702 LIST_ENTRY ProcessLocksList
;
704 ULONG ContentionCount
;
706 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
708 typedef struct _RTL_CRITICAL_SECTION
710 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
714 HANDLE LockSemaphore
;
716 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
721 // RTL Range List Structures
723 typedef struct _RTL_RANGE_LIST
729 } RTL_RANGE_LIST
, *PRTL_RANGE_LIST
;
731 typedef struct _RTL_RANGE
739 } RTL_RANGE
, *PRTL_RANGE
;
741 typedef struct _RANGE_LIST_ITERATOR
743 PLIST_ENTRY RangeListHead
;
744 PLIST_ENTRY MergedHead
;
747 } RTL_RANGE_LIST_ITERATOR
, *PRTL_RANGE_LIST_ITERATOR
;
754 typedef struct _RTL_RESOURCE
756 RTL_CRITICAL_SECTION Lock
;
757 HANDLE SharedSemaphore
;
759 HANDLE ExclusiveSemaphore
;
760 ULONG ExclusiveWaiters
;
765 } RTL_RESOURCE
, *PRTL_RESOURCE
;
768 // RTL Message Structures for PE Resources
770 typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
775 } RTL_MESSAGE_RESOURCE_ENTRY
, *PRTL_MESSAGE_RESOURCE_ENTRY
;
777 typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
781 ULONG OffsetToEntries
;
782 } RTL_MESSAGE_RESOURCE_BLOCK
, *PRTL_MESSAGE_RESOURCE_BLOCK
;
784 typedef struct _RTL_MESSAGE_RESOURCE_DATA
786 ULONG NumberOfBlocks
;
787 RTL_MESSAGE_RESOURCE_BLOCK Blocks
[1];
788 } RTL_MESSAGE_RESOURCE_DATA
, *PRTL_MESSAGE_RESOURCE_DATA
;
791 // Structures for RtlCreateUserProcess
793 typedef struct _RTL_USER_PROCESS_PARAMETERS
799 HANDLE ConsoleHandle
;
801 HANDLE StandardInput
;
802 HANDLE StandardOutput
;
803 HANDLE StandardError
;
804 CURDIR CurrentDirectory
;
805 UNICODE_STRING DllPath
;
806 UNICODE_STRING ImagePathName
;
807 UNICODE_STRING CommandLine
;
817 ULONG ShowWindowFlags
;
818 UNICODE_STRING WindowTitle
;
819 UNICODE_STRING DesktopInfo
;
820 UNICODE_STRING ShellInfo
;
821 UNICODE_STRING RuntimeData
;
822 RTL_DRIVE_LETTER_CURDIR CurrentDirectories
[32];
823 } RTL_USER_PROCESS_PARAMETERS
, *PRTL_USER_PROCESS_PARAMETERS
;
825 typedef struct _RTL_USER_PROCESS_INFORMATION
828 HANDLE ProcessHandle
;
831 SECTION_IMAGE_INFORMATION ImageInformation
;
832 } RTL_USER_PROCESS_INFORMATION
, *PRTL_USER_PROCESS_INFORMATION
;
835 // RTL Atom Table Structures
837 typedef struct _RTL_ATOM_TABLE_ENTRY
839 struct _RTL_ATOM_TABLE_ENTRY
*HashLink
;
842 USHORT ReferenceCount
;
846 } RTL_ATOM_TABLE_ENTRY
, *PRTL_ATOM_TABLE_ENTRY
;
848 typedef struct _RTL_ATOM_TABLE
853 #ifdef NTOS_MODE_USER
854 RTL_CRITICAL_SECTION CriticalSection
;
856 FAST_MUTEX FastMutex
;
861 #ifdef NTOS_MODE_USER
862 RTL_HANDLE_TABLE RtlHandleTable
;
864 PHANDLE_TABLE ExHandleTable
;
867 ULONG NumberOfBuckets
;
868 PRTL_ATOM_TABLE_ENTRY Buckets
[1];
869 } RTL_ATOM_TABLE
, *PRTL_ATOM_TABLE
;
871 #ifndef NTOS_MODE_USER
874 // System Time and Timezone Structures
876 typedef struct _SYSTEMTIME
885 USHORT wMilliseconds
;
886 } SYSTEMTIME
, *PSYSTEMTIME
, *LPSYSTEMTIME
;
888 typedef struct _TIME_ZONE_INFORMATION
891 WCHAR StandardName
[32];
892 SYSTEMTIME StandardDate
;
894 WCHAR DaylightName
[32];
895 SYSTEMTIME DaylightDate
;
897 } TIME_ZONE_INFORMATION
, *PTIME_ZONE_INFORMATION
, *LPTIME_ZONE_INFORMATION
;
902 // Header for NLS Files
904 typedef struct _NLS_FILE_HEADER
908 USHORT MaximumCharacterSize
;
910 USHORT UniDefaultChar
;
911 USHORT TransDefaultChar
;
912 USHORT TransUniDefaultChar
;
914 UCHAR LeadByte
[MAXIMUM_LEADBYTES
];
915 } NLS_FILE_HEADER
, *PNLS_FILE_HEADER
;