2 * PROJECT: ReactOS Native Headers
3 * FILE: include/ndk/umtypes.h
4 * PURPOSE: Definitions needed for Native Headers if target is not Kernel-Mode.
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
13 /* DEPENDENCIES **************************************************************/
16 #include <ddk/ntnls.h>
19 /* EXPORTED DATA *************************************************************/
21 /* CONSTANTS *****************************************************************/
23 /* NTAPI/NTOSAPI Define */
24 #define NTAPI __stdcall
27 /* Definitions for Object Creation -- winternl.h */
28 #define OBJ_INHERIT 2L
29 #define OBJ_PERMANENT 16L
30 #define OBJ_EXCLUSIVE 32L
31 #define OBJ_CASE_INSENSITIVE 64L
32 #define OBJ_OPENIF 128L
33 #define OBJ_OPENLINK 256L
34 #define OBJ_VALID_ATTRIBUTES 498L
35 #define InitializeObjectAttributes(p,n,a,r,s) { \
36 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
37 (p)->RootDirectory = (r); \
38 (p)->Attributes = (a); \
39 (p)->ObjectName = (n); \
40 (p)->SecurityDescriptor = (s); \
41 (p)->SecurityQualityOfService = NULL; \
44 /* Native API Return Value Macros */
45 #define NT_SUCCESS(x) ((x)>=0)
46 #define NT_WARNING(x) ((ULONG)(x)>>30==2)
47 #define NT_ERROR(x) ((ULONG)(x)>>30==3)
49 /* Object Access Rights FIXME: Some are in w32api's psdk..,is that normal ?*/
50 #define DIRECTORY_QUERY (0x0001)
51 #define DIRECTORY_TRAVERSE (0x0002)
52 #define DIRECTORY_CREATE_OBJECT (0x0004)
53 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
54 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
55 #define EVENT_QUERY_STATE (0x0001)
56 #define SEMAPHORE_QUERY_STATE (0x0001)
57 #define SYMBOLIC_LINK_QUERY 0x0001
58 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
60 /* I/O Control Codes for communicating with Mailslots */
61 #define FSCTL_MAILSLOT_PEEK \
62 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
64 /* I/O Control Codes for communicating with Pipes */
65 #define FSCTL_PIPE_ASSIGN_EVENT \
66 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
68 #define FSCTL_PIPE_DISCONNECT \
69 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
71 #define FSCTL_PIPE_LISTEN \
72 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
74 #define FSCTL_PIPE_PEEK \
75 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
77 #define FSCTL_PIPE_QUERY_EVENT \
78 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
80 #define FSCTL_PIPE_TRANSCEIVE \
81 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
83 #define FSCTL_PIPE_WAIT \
84 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
86 #define FSCTL_PIPE_IMPERSONATE \
87 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
89 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
90 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
92 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
93 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
95 #define FSCTL_PIPE_INTERNAL_READ \
96 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
98 #define FSCTL_PIPE_INTERNAL_WRITE \
99 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
101 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
102 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
104 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
105 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
107 /* Macros for current Process/Thread built-in 'special' ID */
108 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
109 #define ZwCurrentProcess() NtCurrentProcess()
110 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
111 #define ZwCurrentThread() NtCurrentThread()
113 /* Kernel Shared Data Constants */
114 #define PROCESSOR_FEATURE_MAX 64
115 #define SharedUserData ((KUSER_SHARED_DATA * CONST) USER_SHARED_DATA)
117 /* Paging Values on x86 */
118 #define PAGE_SIZE 0x1000
119 #define PAGE_SHIFT 12L
121 /* Run-Time Library (RTL) Registry Constants */
122 #define RTL_REGISTRY_ABSOLUTE 0
123 #define RTL_REGISTRY_SERVICES 1
124 #define RTL_REGISTRY_CONTROL 2
125 #define RTL_REGISTRY_WINDOWS_NT 3
126 #define RTL_REGISTRY_DEVICEMAP 4
127 #define RTL_REGISTRY_USER 5
128 #define RTL_REGISTRY_MAXIMUM 6
129 #define RTL_REGISTRY_HANDLE 0x40000000
130 #define RTL_REGISTRY_OPTIONAL 0x80000000
131 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
132 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
133 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
134 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
135 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
136 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
137 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
139 /* File Result Flags */
140 #define FILE_SUPERSEDED 0x00000000
141 #define FILE_OPENED 0x00000001
142 #define FILE_CREATED 0x00000002
143 #define FILE_OVERWRITTEN 0x00000003
144 #define FILE_EXISTS 0x00000004
145 #define FILE_DOES_NOT_EXIST 0x00000005
148 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
149 #define FILE_PIPE_MESSAGE_MODE 0x00000001
150 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
151 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
152 #define FILE_PIPE_INBOUND 0x00000000
153 #define FILE_PIPE_OUTBOUND 0x00000001
154 #define FILE_PIPE_FULL_DUPLEX 0x00000002
155 #define FILE_PIPE_CLIENT_END 0x00000000
156 #define FILE_PIPE_SERVER_END 0x00000001
158 /* Device Charactertics */
159 #define FILE_REMOVABLE_MEDIA 0x00000001
160 #define FILE_REMOTE_DEVICE 0x00000010
163 #define SID_MAX_SUB_AUTHORITIES 15
165 /* Version Constants */
166 #define VER_MINORVERSION 0x0000001
167 #define VER_MAJORVERSION 0x0000002
168 #define VER_BUILDNUMBER 0x0000004
169 #define VER_PLATFORMID 0x0000008
170 #define VER_SERVICEPACKMINOR 0x0000010
171 #define VER_SERVICEPACKMAJOR 0x0000020
172 #define VER_SUITENAME 0x0000040
173 #define VER_PRODUCT_TYPE 0x0000080
174 #define VER_PLATFORM_WIN32s 0
175 #define VER_PLATFORM_WIN32_WINDOWS 1
176 #define VER_PLATFORM_WIN32_NT 2
178 #define VER_GREATER 2
179 #define VER_GREATER_EQUAL 3
181 #define VER_LESS_EQUAL 5
184 #define VER_CONDITION_MASK 7
185 #define VER_NUM_BITS_PER_CONDITION_MASK 3
187 /* RTL String Hash Algorithms */
188 #define HASH_STRING_ALGORITHM_DEFAULT 0
189 #define HASH_STRING_ALGORITHM_X65599 1
190 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
196 IN PLIST_ENTRY ListHead
)
198 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
204 IN PLIST_ENTRY ListHead
,
205 IN PLIST_ENTRY Entry
)
207 PLIST_ENTRY OldFlink
;
208 OldFlink
= ListHead
->Flink
;
209 Entry
->Flink
= OldFlink
;
210 Entry
->Blink
= ListHead
;
211 OldFlink
->Blink
= Entry
;
212 ListHead
->Flink
= Entry
;
218 IN PLIST_ENTRY ListHead
,
219 IN PLIST_ENTRY Entry
)
221 PLIST_ENTRY OldBlink
;
222 OldBlink
= ListHead
->Blink
;
223 Entry
->Flink
= ListHead
;
224 Entry
->Blink
= OldBlink
;
225 OldBlink
->Flink
= Entry
;
226 ListHead
->Blink
= Entry
;
229 #define IsListEmpty(ListHead) \
230 ((ListHead)->Flink == (ListHead))
232 #define PopEntryList(ListHead) \
235 PSINGLE_LIST_ENTRY _FirstEntry; \
236 _FirstEntry = (ListHead)->Next; \
237 if (_FirstEntry != NULL) \
238 (ListHead)->Next = _FirstEntry->Next; \
241 #define PushEntryList(_ListHead, _Entry) \
242 (_Entry)->Next = (_ListHead)->Next; \
243 (_ListHead)->Next = (_Entry); \
248 IN PLIST_ENTRY Entry
)
250 PLIST_ENTRY OldFlink
;
251 PLIST_ENTRY OldBlink
;
253 OldFlink
= Entry
->Flink
;
254 OldBlink
= Entry
->Blink
;
255 OldFlink
->Blink
= OldBlink
;
256 OldBlink
->Flink
= OldFlink
;
257 return (OldFlink
== OldBlink
);
263 IN PLIST_ENTRY ListHead
)
268 Entry
= ListHead
->Flink
;
269 Flink
= Entry
->Flink
;
270 ListHead
->Flink
= Flink
;
271 Flink
->Blink
= ListHead
;
278 IN PLIST_ENTRY ListHead
)
283 Entry
= ListHead
->Blink
;
284 Blink
= Entry
->Blink
;
285 ListHead
->Blink
= Blink
;
286 Blink
->Flink
= ListHead
;
290 #define IsFirstEntry(ListHead, Entry) \
291 ((ListHead)->Flink == Entry)
293 #define IsLastEntry(ListHead, Entry) \
294 ((ListHead)->Blink == Entry)
297 * Constant String Macro
299 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
301 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
302 sizeof(__SOURCE_STRING__), \
303 (__SOURCE_STRING__) \
306 /* ENUMERATIONS **************************************************************/
308 /* Kernel Shared Data Values */
309 typedef enum _NT_PRODUCT_TYPE
314 } NT_PRODUCT_TYPE
, *PNT_PRODUCT_TYPE
;
316 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
321 } ALTERNATIVE_ARCHITECTURE_TYPE
;
323 /* Run-Time Library (RTL) Enumerations */
324 typedef enum _TABLE_SEARCH_RESULT
330 } TABLE_SEARCH_RESULT
;
332 typedef enum _RTL_GENERIC_COMPARE_RESULTS
337 } RTL_GENERIC_COMPARE_RESULTS
;
339 /* Kernel or Native Enumerations used by Native API */
340 typedef enum _SECTION_INHERIT
346 typedef enum _POOL_TYPE
350 NonPagedPoolMustSucceed
,
352 NonPagedPoolCacheAligned
,
353 PagedPoolCacheAligned
,
354 NonPagedPoolCacheAlignedMustS
,
356 NonPagedPoolSession
= 32,
358 NonPagedPoolMustSucceedSession
,
359 DontUseThisTypeSession
,
360 NonPagedPoolCacheAlignedSession
,
361 PagedPoolCacheAlignedSession
,
362 NonPagedPoolCacheAlignedMustSSession
365 typedef enum _EVENT_TYPE
371 typedef enum _TIMER_TYPE
377 typedef enum _WAIT_TYPE
383 typedef enum _INTERFACE_TYPE
385 InterfaceTypeUndefined
= -1,
403 }INTERFACE_TYPE
, *PINTERFACE_TYPE
;
412 typedef enum _KWAIT_REASON
451 typedef enum _KPROFILE_SOURCE
454 ProfileAlignmentFixup
,
457 ProfileLoadInstructions
,
458 ProfilePipelineFrozen
,
459 ProfileBranchInstructions
,
460 ProfileTotalNonissues
,
464 ProfileBranchMispredictions
,
465 ProfileStoreInstructions
,
466 ProfileFpInstructions
,
467 ProfileIntegerInstructions
,
471 ProfileSpecialInstructions
,
474 ProfileDcacheAccesses
,
475 ProfileMemoryBarrierCycles
,
476 ProfileLoadLinkedIssues
,
480 /**** Information Classes ****/
485 typedef enum _FILE_INFORMATION_CLASS
487 FileDirectoryInformation
= 1,
488 FileFullDirectoryInformation
,
489 FileBothDirectoryInformation
,
490 FileBasicInformation
,
491 FileStandardInformation
,
492 FileInternalInformation
,
494 FileAccessInformation
,
496 FileRenameInformation
,
498 FileNamesInformation
,
499 FileDispositionInformation
,
500 FilePositionInformation
,
501 FileFullEaInformation
,
503 FileAlignmentInformation
,
505 FileAllocationInformation
,
506 FileEndOfFileInformation
,
507 FileAlternateNameInformation
,
508 FileStreamInformation
,
510 FilePipeLocalInformation
,
511 FilePipeRemoteInformation
,
512 FileMailslotQueryInformation
,
513 FileMailslotSetInformation
,
514 FileCompressionInformation
,
515 FileObjectIdInformation
,
516 FileCompletionInformation
,
517 FileMoveClusterInformation
,
518 FileQuotaInformation
,
519 FileReparsePointInformation
,
520 FileNetworkOpenInformation
,
521 FileAttributeTagInformation
,
522 FileTrackingInformation
,
523 FileIdBothDirectoryInformation
,
524 FileIdFullDirectoryInformation
,
525 FileValidDataLengthInformation
,
526 FileShortNameInformation
,
527 FileMaximumInformation
528 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
533 typedef enum _FSINFOCLASS
535 FileFsVolumeInformation
= 1,
536 FileFsLabelInformation
,
537 FileFsSizeInformation
,
538 FileFsDeviceInformation
,
539 FileFsAttributeInformation
,
540 FileFsControlInformation
,
541 FileFsFullSizeInformation
,
542 FileFsObjectIdInformation
,
543 FileFsDriverPathInformation
,
544 FileFsMaximumInformation
545 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
550 typedef enum _KEY_INFORMATION_CLASS
556 KeyCachedInformation
,
558 } KEY_INFORMATION_CLASS
;
563 typedef enum _KEY_VALUE_INFORMATION_CLASS
565 KeyValueBasicInformation
,
566 KeyValueFullInformation
,
567 KeyValuePartialInformation
,
568 KeyValueFullInformationAlign64
,
569 KeyValuePartialInformationAlign64
570 } KEY_VALUE_INFORMATION_CLASS
;
575 typedef enum _KEY_SET_INFORMATION_CLASS
577 KeyWriteTimeInformation
,
578 KeyUserFlagsInformation
,
580 } KEY_SET_INFORMATION_CLASS
;
585 typedef enum _PROCESSINFOCLASS
587 ProcessBasicInformation
,
593 ProcessRaisePriority
,
595 ProcessExceptionPort
,
597 ProcessLdtInformation
,
599 ProcessDefaultHardErrorMode
,
600 ProcessIoPortHandlers
,
601 ProcessPooledUsageAndLimits
,
602 ProcessWorkingSetWatch
,
604 ProcessEnableAlignmentFaultFixup
,
605 ProcessPriorityClass
,
606 ProcessWx86Information
,
609 ProcessPriorityBoost
,
611 ProcessSessionInformation
,
612 ProcessForegroundInformation
,
613 ProcessWow64Information
,
614 ProcessImageFileName
,
615 ProcessLUIDDeviceMapsEnabled
,
616 ProcessBreakOnTermination
,
617 ProcessDebugObjectHandle
,
619 ProcessHandleTracing
,
626 typedef enum _THREADINFOCLASS
628 ThreadBasicInformation
,
633 ThreadImpersonationToken
,
634 ThreadDescriptorTableEntry
,
635 ThreadEnableAlignmentFaultFixup
,
636 ThreadEventPair_Reusable
,
637 ThreadQuerySetWin32StartAddress
,
639 ThreadPerformanceCount
,
641 ThreadIdealProcessor
,
643 ThreadSetTlsArrayAddress
,
645 ThreadHideFromDebugger
,
646 ThreadBreakOnTermination
,
650 /* TYPES *********************************************************************/
652 /* Basic Types that aren't defined in User-Mode Headers */
653 typedef CONST
int CINT
;
654 typedef CONST
char *PCSZ
;
655 typedef short CSHORT
;
656 typedef CSHORT
*PCSHORT
;
657 typedef LARGE_INTEGER PHYSICAL_ADDRESS
, *PPHYSICAL_ADDRESS
;
659 /* Kernel Types used by Native APIs */
660 typedef LONG KPRIORITY
;
661 typedef LONG NTSTATUS
, *PNTSTATUS
;
662 typedef UCHAR KIRQL
, *PKIRQL
;
663 typedef ULONG KAFFINITY
, *PKAFFINITY
;
664 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
665 typedef struct _PEB
*PPEB
;
666 typedef ULONG KPROCESSOR_MODE
;
667 typedef struct _OBJECT_TYPE
*POBJECT_TYPE
;
669 struct _CSR_API_MESSAGE
;
670 typedef ULONG EXECUTION_STATE
;
673 #if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H)
674 typedef struct _UNICODE_STRING
677 USHORT MaximumLength
;
679 } UNICODE_STRING
, *PUNICODE_STRING
;
680 typedef const UNICODE_STRING
* PCUNICODE_STRING
;
682 typedef struct _STRING
685 USHORT MaximumLength
;
689 typedef struct _OBJECT_ATTRIBUTES
692 HANDLE RootDirectory
;
693 PUNICODE_STRING ObjectName
;
695 PVOID SecurityDescriptor
;
696 PVOID SecurityQualityOfService
;
697 } OBJECT_ATTRIBUTES
, *POBJECT_ATTRIBUTES
;
700 typedef STRING ANSI_STRING
;
701 typedef PSTRING PANSI_STRING
;
702 typedef STRING OEM_STRING
;
703 typedef PSTRING POEM_STRING
;
705 typedef struct _IO_STATUS_BLOCK
712 ULONG_PTR Information
;
713 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
718 IN PIO_STATUS_BLOCK IoStatusBlock
,
723 IN PVOID NormalContext
,
724 IN PVOID SystemArgument1
,
725 IN PVOID SystemArgument2
);
728 (*PTIMER_APC_ROUTINE
)(
729 IN PVOID TimerContext
,
730 IN ULONG TimerLowValue
,
731 IN LONG TimerHighValue
);
733 /* Kernel Types which are returned or used by Native API */
734 typedef struct _OBJECT_NAME_INFORMATION
737 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
739 typedef struct _IO_ERROR_LOG_PACKET
741 UCHAR MajorFunctionCode
;
744 USHORT NumberOfStrings
;
746 USHORT EventCategory
;
748 ULONG UniqueErrorValue
;
749 NTSTATUS FinalStatus
;
750 ULONG SequenceNumber
;
752 LARGE_INTEGER DeviceOffset
;
754 }IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
756 typedef struct _IO_ERROR_LOG_MESSAGE
760 USHORT DriverNameLength
;
761 LARGE_INTEGER TimeStamp
;
762 ULONG DriverNameOffset
;
763 IO_ERROR_LOG_PACKET EntryData
;
764 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
766 typedef struct _CLIENT_ID
768 HANDLE UniqueProcess
;
770 } CLIENT_ID
, *PCLIENT_ID
;
772 typedef struct _KSYSTEM_TIME
777 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
779 typedef struct _TIME_FIELDS
789 } TIME_FIELDS
, *PTIME_FIELDS
;
791 typedef struct _VM_COUNTERS
793 SIZE_T PeakVirtualSize
;
795 ULONG PageFaultCount
;
796 SIZE_T PeakWorkingSetSize
;
797 SIZE_T WorkingSetSize
;
798 SIZE_T QuotaPeakPagedPoolUsage
;
799 SIZE_T QuotaPagedPoolUsage
;
800 SIZE_T QuotaPeakNonPagedPoolUsage
;
801 SIZE_T QuotaNonPagedPoolUsage
;
802 SIZE_T PagefileUsage
;
803 SIZE_T PeakPagefileUsage
;
804 } VM_COUNTERS
, *PVM_COUNTERS
;
806 typedef struct _VM_COUNTERS_EX
808 SIZE_T PeakVirtualSize
;
810 ULONG PageFaultCount
;
811 SIZE_T PeakWorkingSetSize
;
812 SIZE_T WorkingSetSize
;
813 SIZE_T QuotaPeakPagedPoolUsage
;
814 SIZE_T QuotaPagedPoolUsage
;
815 SIZE_T QuotaPeakNonPagedPoolUsage
;
816 SIZE_T QuotaNonPagedPoolUsage
;
817 SIZE_T PagefileUsage
;
818 SIZE_T PeakPagefileUsage
;
820 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
822 /**** Information Types ****/
829 typedef struct _KEY_WRITE_TIME_INFORMATION
831 LARGE_INTEGER LastWriteTime
;
832 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
835 typedef struct _KEY_USER_FLAGS_INFORMATION
838 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
840 typedef struct _KEY_FULL_INFORMATION
842 LARGE_INTEGER LastWriteTime
;
850 ULONG MaxValueNameLen
;
851 ULONG MaxValueDataLen
;
853 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
855 typedef struct _KEY_NODE_INFORMATION
857 LARGE_INTEGER LastWriteTime
;
863 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
870 typedef struct _FILE_BASIC_INFORMATION
872 LARGE_INTEGER CreationTime
;
873 LARGE_INTEGER LastAccessTime
;
874 LARGE_INTEGER LastWriteTime
;
875 LARGE_INTEGER ChangeTime
;
876 ULONG FileAttributes
;
877 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
880 typedef struct _FILE_STANDARD_INFORMATION
882 LARGE_INTEGER AllocationSize
;
883 LARGE_INTEGER EndOfFile
;
885 BOOLEAN DeletePending
;
887 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
889 typedef struct _FILE_NETWORK_OPEN_INFORMATION
891 LARGE_INTEGER CreationTime
;
892 LARGE_INTEGER LastAccessTime
;
893 LARGE_INTEGER LastWriteTime
;
894 LARGE_INTEGER ChangeTime
;
895 LARGE_INTEGER AllocationSize
;
896 LARGE_INTEGER EndOfFile
;
897 ULONG FileAttributes
;
898 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
900 typedef struct _FILE_ZERO_DATA_INFORMATION
902 LARGE_INTEGER FileOffset
;
903 LARGE_INTEGER BeyondFinalZero
;
904 } FILE_ZERO_DATA_INFORMATION
, *PFILE_ZERO_DATA_INFORMATION
;
906 typedef struct _FILE_EA_INFORMATION
909 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
911 typedef struct _FILE_COMPRESSION_INFORMATION
913 LARGE_INTEGER CompressedFileSize
;
914 USHORT CompressionFormat
;
915 UCHAR CompressionUnitShift
;
919 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
921 typedef struct _FILE_POSITION_INFORMATION
923 LARGE_INTEGER CurrentByteOffset
;
924 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
926 typedef struct _FILE_DISPOSITION_INFORMATION
929 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
931 typedef struct FILE_ALLOCATED_RANGE_BUFFER
933 LARGE_INTEGER FileOffset
;
934 LARGE_INTEGER Length
;
935 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
937 typedef struct _FILE_FULL_EA_INFORMATION
939 ULONG NextEntryOffset
;
942 USHORT EaValueLength
;
944 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
946 typedef struct _FILE_QUOTA_INFORMATION
948 ULONG NextEntryOffset
;
950 LARGE_INTEGER ChangeTime
;
951 LARGE_INTEGER QuotaUsed
;
952 LARGE_INTEGER QuotaThreshold
;
953 LARGE_INTEGER QuotaLimit
;
955 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
957 typedef struct _FILE_INTERNAL_INFORMATION
959 LARGE_INTEGER IndexNumber
;
960 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
962 typedef struct _FILE_RENAME_INFORMATION
964 BOOLEAN ReplaceIfExists
;
965 HANDLE RootDirectory
;
966 ULONG FileNameLength
;
968 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
970 typedef struct _FILE_PIPE_INFORMATION
973 ULONG CompletionMode
;
974 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
976 typedef struct _FILE_PIPE_LOCAL_INFORMATION
979 ULONG NamedPipeConfiguration
;
980 ULONG MaximumInstances
;
981 ULONG CurrentInstances
;
983 ULONG ReadDataAvailable
;
985 ULONG WriteQuotaAvailable
;
986 ULONG NamedPipeState
;
988 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
990 typedef struct _FILE_PIPE_REMOTE_INFORMATION
992 LARGE_INTEGER CollectDataTime
;
993 ULONG MaximumCollectionCount
;
994 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
996 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
998 ULONG MaximumMessageSize
;
1000 ULONG NextMessageSize
;
1001 ULONG MessagesAvailable
;
1002 LARGE_INTEGER ReadTimeout
;
1003 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
1005 typedef struct _FILE_MAILSLOT_SET_INFORMATION
1007 LARGE_INTEGER ReadTimeout
;
1008 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
1010 typedef struct _FILE_BOTH_DIR_INFORMATION
1012 ULONG NextEntryOffset
;
1014 LARGE_INTEGER CreationTime
;
1015 LARGE_INTEGER LastAccessTime
;
1016 LARGE_INTEGER LastWriteTime
;
1017 LARGE_INTEGER ChangeTime
;
1018 LARGE_INTEGER EndOfFile
;
1019 LARGE_INTEGER AllocationSize
;
1020 ULONG FileAttributes
;
1021 ULONG FileNameLength
;
1023 CCHAR ShortNameLength
;
1024 WCHAR ShortName
[12];
1026 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
1028 typedef struct _FILE_COMPLETION_INFORMATION
1032 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
1034 typedef struct _FILE_LINK_INFORMATION
1036 BOOLEAN ReplaceIfExists
;
1037 HANDLE RootDirectory
;
1038 ULONG FileNameLength
;
1040 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
1042 typedef struct _FILE_NAME_INFORMATION
1044 ULONG FileNameLength
;
1046 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1048 typedef struct _FILE_ALLOCATION_INFORMATION
1050 LARGE_INTEGER AllocationSize
;
1051 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
1053 typedef struct _FILE_END_OF_FILE_INFORMATION
1055 LARGE_INTEGER EndOfFile
;
1056 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1058 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
1060 LARGE_INTEGER ValidDataLength
;
1061 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1066 typedef struct _FILE_FS_DEVICE_INFORMATION
1068 DEVICE_TYPE DeviceType
;
1069 ULONG Characteristics
;
1070 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1072 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
1074 ULONG FileSystemAttributes
;
1075 ULONG MaximumComponentNameLength
;
1076 ULONG FileSystemNameLength
;
1077 WCHAR FileSystemName
[1];
1078 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
1080 typedef struct _FILE_FS_SIZE_INFORMATION
1082 LARGE_INTEGER TotalAllocationUnits
;
1083 LARGE_INTEGER AvailableAllocationUnits
;
1084 ULONG SectorsPerAllocationUnit
;
1085 ULONG BytesPerSector
;
1086 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1088 typedef struct _FILE_FS_LABEL_INFORMATION
1090 ULONG VolumeLabelLength
;
1091 WCHAR VolumeLabel
[1];
1092 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1094 typedef struct _FILE_FS_VOLUME_INFORMATION
1096 LARGE_INTEGER VolumeCreationTime
;
1097 ULONG VolumeSerialNumber
;
1098 ULONG VolumeLabelLength
;
1099 BOOLEAN SupportsObjects
;
1100 WCHAR VolumeLabel
[1];
1101 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1104 * Registry Key Value
1108 typedef struct _KEY_VALUE_ENTRY
1110 PUNICODE_STRING ValueName
;
1114 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
1117 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
1123 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
1126 typedef struct _KEY_VALUE_BASIC_INFORMATION
1132 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
1135 typedef struct _KEY_VALUE_FULL_INFORMATION
1143 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
1150 typedef struct _KEY_BASIC_INFORMATION
1152 LARGE_INTEGER LastWriteTime
;
1156 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
1158 /* File Pipe Structures for the FSCTLs */
1159 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
1161 LARGE_INTEGER Timeout
;
1163 BOOLEAN TimeoutSpecified
;
1165 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
1167 typedef struct _FILE_PIPE_PEEK_BUFFER
1169 ULONG NamedPipeState
;
1170 ULONG ReadDataAvailable
;
1171 ULONG NumberOfMessages
;
1172 ULONG MessageLength
;
1174 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
1176 /* The Kerner/User Shared Data Structure */
1177 typedef struct _KUSER_SHARED_DATA
1179 ULONG TickCountLowDeprecated
;
1180 ULONG TickCountMultiplier
;
1181 volatile KSYSTEM_TIME InterruptTime
;
1182 volatile KSYSTEM_TIME SystemTime
;
1183 volatile KSYSTEM_TIME TimeZoneBias
;
1184 USHORT ImageNumberLow
;
1185 USHORT ImageNumberHigh
;
1186 WCHAR NtSystemRoot
[260];
1187 ULONG MaxStackTraceDepth
;
1188 ULONG CryptoExponent
;
1190 ULONG LargePageMinimum
;
1192 NT_PRODUCT_TYPE NtProductType
;
1193 BOOLEAN ProductTypeIsValid
;
1194 ULONG NtMajorVersion
;
1195 ULONG NtMinorVersion
;
1196 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1199 volatile ULONG TimeSlip
;
1200 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1201 LARGE_INTEGER SystemExpirationDate
;
1203 BOOLEAN KdDebuggerEnabled
;
1204 volatile ULONG ActiveConsoleId
;
1205 volatile ULONG DismountCount
;
1206 ULONG ComPlusPackage
;
1207 ULONG LastSystemRITEventTickCount
;
1208 ULONG NumberOfPhysicalPages
;
1209 BOOLEAN SafeBootMode
;
1212 ULONGLONG SystemCall
[4];
1214 volatile KSYSTEM_TIME TickCount
;
1215 volatile ULONG64 TickCountQuad
;
1217 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1219 /* Run-Time Library (RTL) Types */
1220 typedef struct _RTL_BITMAP
1224 } RTL_BITMAP
, *PRTL_BITMAP
;
1226 typedef struct _RTL_BITMAP_RUN
1228 ULONG StartingIndex
;
1230 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
1232 typedef struct _COMPRESSED_DATA_INFO
1234 USHORT CompressionFormatAndEngine
;
1235 UCHAR CompressionUnitShift
;
1239 USHORT NumberOfChunks
;
1240 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
1241 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
1243 typedef struct _GENERATE_NAME_CONTEXT
1246 BOOLEAN CheckSumInserted
;
1248 WCHAR NameBuffer
[8];
1249 ULONG ExtensionLength
;
1250 WCHAR ExtensionBuffer
[4];
1251 ULONG LastIndexValue
;
1252 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
1254 typedef struct _RTL_SPLAY_LINKS
1256 struct _RTL_SPLAY_LINKS
*Parent
;
1257 struct _RTL_SPLAY_LINKS
*LeftChild
;
1258 struct _RTL_SPLAY_LINKS
*RightChild
;
1259 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
1261 struct _RTL_AVL_TABLE
;
1262 struct _RTL_GENERIC_TABLE
;
1264 typedef NTSTATUS STDCALL
1265 (*PRTL_AVL_MATCH_FUNCTION
)(
1266 struct _RTL_AVL_TABLE
*Table
,
1271 typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
1272 (*PRTL_AVL_COMPARE_ROUTINE
) (
1273 struct _RTL_AVL_TABLE
*Table
,
1278 typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
1279 (*PRTL_GENERIC_COMPARE_ROUTINE
) (
1280 struct _RTL_GENERIC_TABLE
*Table
,
1285 typedef PVOID STDCALL
1286 (*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
1287 struct _RTL_GENERIC_TABLE
*Table
,
1291 typedef VOID STDCALL
1292 (*PRTL_GENERIC_FREE_ROUTINE
) (
1293 struct _RTL_GENERIC_TABLE
*Table
,
1297 typedef VOID STDCALL
1298 (*PRTL_AVL_ALLOCATE_ROUTINE
) (
1299 struct _RTL_AVL_TABLE
*Table
,
1303 typedef VOID STDCALL
1304 (*PRTL_AVL_FREE_ROUTINE
) (
1305 struct _RTL_AVL_TABLE
*Table
,
1309 typedef struct _RTL_GENERIC_TABLE
1311 PRTL_SPLAY_LINKS TableRoot
;
1312 LIST_ENTRY InsertOrderList
;
1313 PLIST_ENTRY OrderedPointer
;
1314 ULONG WhichOrderedElement
;
1315 ULONG NumberGenericTableElements
;
1316 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
1317 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
1318 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
1320 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
1322 typedef struct _RTL_BALANCED_LINKS
1324 struct _RTL_BALANCED_LINKS
*Parent
;
1325 struct _RTL_BALANCED_LINKS
*LeftChild
;
1326 struct _RTL_BALANCED_LINKS
*RightChild
;
1329 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
1331 typedef struct _RTL_AVL_TABLE
1333 RTL_BALANCED_LINKS BalancedRoot
;
1334 PVOID OrderedPointer
;
1335 ULONG WhichOrderedElement
;
1336 ULONG NumberGenericTableElements
;
1338 PRTL_BALANCED_LINKS RestartKey
;
1340 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
1341 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
1342 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
1344 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
1346 typedef NTSTATUS STDCALL
1347 (*PRTL_QUERY_REGISTRY_ROUTINE
)(
1351 IN ULONG ValueLength
,
1353 IN PVOID EntryContext
1356 typedef struct _RTL_QUERY_REGISTRY_TABLE
1358 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
1364 ULONG DefaultLength
;
1365 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
1367 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
1369 CSHORT NodeTypeCode
;
1371 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
1372 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
1373 RTL_SPLAY_LINKS Links
;
1374 PUNICODE_STRING Prefix
;
1375 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
1377 typedef struct _UNICODE_PREFIX_TABLE
1379 CSHORT NodeTypeCode
;
1381 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
1382 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
1383 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
1385 /* FIXME - need FAST_MUTEX and PHANDLE_TABLE for RTL_ATOM_TABLE in umode! */
1386 typedef void *FAST_MUTEX
;
1387 typedef void *PHANDLE_TABLE
;
1389 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW
;
1390 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW
;
1391 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW
;
1392 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW
;