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 getting the current Process or Thread */
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
191 IN PLIST_ENTRY ListHead
)
193 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
199 IN PLIST_ENTRY ListHead
,
200 IN PLIST_ENTRY Entry
)
202 PLIST_ENTRY OldFlink
;
203 OldFlink
= ListHead
->Flink
;
204 Entry
->Flink
= OldFlink
;
205 Entry
->Blink
= ListHead
;
206 OldFlink
->Blink
= Entry
;
207 ListHead
->Flink
= Entry
;
213 IN PLIST_ENTRY ListHead
,
214 IN PLIST_ENTRY Entry
)
216 PLIST_ENTRY OldBlink
;
217 OldBlink
= ListHead
->Blink
;
218 Entry
->Flink
= ListHead
;
219 Entry
->Blink
= OldBlink
;
220 OldBlink
->Flink
= Entry
;
221 ListHead
->Blink
= Entry
;
224 #define IsListEmpty(ListHead) \
225 ((ListHead)->Flink == (ListHead))
227 #define PopEntryList(ListHead) \
230 PSINGLE_LIST_ENTRY _FirstEntry; \
231 _FirstEntry = (ListHead)->Next; \
232 if (_FirstEntry != NULL) \
233 (ListHead)->Next = _FirstEntry->Next; \
236 #define PushEntryList(_ListHead, _Entry) \
237 (_Entry)->Next = (_ListHead)->Next; \
238 (_ListHead)->Next = (_Entry); \
243 IN PLIST_ENTRY Entry
)
245 PLIST_ENTRY OldFlink
;
246 PLIST_ENTRY OldBlink
;
248 OldFlink
= Entry
->Flink
;
249 OldBlink
= Entry
->Blink
;
250 OldFlink
->Blink
= OldBlink
;
251 OldBlink
->Flink
= OldFlink
;
252 return (OldFlink
== OldBlink
);
258 IN PLIST_ENTRY ListHead
)
263 Entry
= ListHead
->Flink
;
264 Flink
= Entry
->Flink
;
265 ListHead
->Flink
= Flink
;
266 Flink
->Blink
= ListHead
;
273 IN PLIST_ENTRY ListHead
)
278 Entry
= ListHead
->Blink
;
279 Blink
= Entry
->Blink
;
280 ListHead
->Blink
= Blink
;
281 Blink
->Flink
= ListHead
;
285 #define IsFirstEntry(ListHead, Entry) \
286 ((ListHead)->Flink == Entry)
288 #define IsLastEntry(ListHead, Entry) \
289 ((ListHead)->Blink == Entry)
291 #define InsertAscendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\
293 PLIST_ENTRY current;\
295 current = (ListHead)->Flink;\
296 while (current != (ListHead))\
298 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >\
299 (NewEntry)->SortField)\
303 current = current->Flink;\
306 InsertTailList(current, &((NewEntry)->ListEntryField));\
309 #define InsertDescendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\
311 PLIST_ENTRY current;\
313 current = (ListHead)->Flink;\
314 while (current != (ListHead))\
316 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <\
317 (NewEntry)->SortField)\
321 current = current->Flink;\
324 InsertTailList(current, &((NewEntry)->ListEntryField));\
327 #define InsertAscendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
329 PLIST_ENTRY current;\
331 current = (ListHead)->Flink;\
332 while (current != (ListHead))\
334 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >=\
335 (NewEntry)->SortField)\
339 current = current->Flink;\
342 InsertTailList(current, &((NewEntry)->ListEntryField));\
345 #define InsertDescendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
347 PLIST_ENTRY current;\
349 current = (ListHead)->Flink;\
350 while (current != (ListHead))\
352 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <=\
353 (NewEntry)->SortField)\
357 current = current->Flink;\
360 InsertTailList(current, &((NewEntry)->ListEntryField));\
364 * Constant String Macro
366 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
368 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
369 sizeof(__SOURCE_STRING__), \
370 (__SOURCE_STRING__) \
373 /* ENUMERATIONS **************************************************************/
375 /* Kernel Shared Data Values */
376 typedef enum _NT_PRODUCT_TYPE
381 } NT_PRODUCT_TYPE
, *PNT_PRODUCT_TYPE
;
383 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
388 } ALTERNATIVE_ARCHITECTURE_TYPE
;
390 /* Run-Time Library (RTL) Enumerations */
391 typedef enum _TABLE_SEARCH_RESULT
397 } TABLE_SEARCH_RESULT
;
399 typedef enum _RTL_GENERIC_COMPARE_RESULTS
404 } RTL_GENERIC_COMPARE_RESULTS
;
406 /* Kernel or Native Enumerations used by Native API */
407 typedef enum _SECTION_INHERIT
413 typedef enum _POOL_TYPE
417 NonPagedPoolMustSucceed
,
419 NonPagedPoolCacheAligned
,
420 PagedPoolCacheAligned
,
421 NonPagedPoolCacheAlignedMustS
,
423 NonPagedPoolSession
= 32,
425 NonPagedPoolMustSucceedSession
,
426 DontUseThisTypeSession
,
427 NonPagedPoolCacheAlignedSession
,
428 PagedPoolCacheAlignedSession
,
429 NonPagedPoolCacheAlignedMustSSession
432 typedef enum _EVENT_TYPE
438 typedef enum _TIMER_TYPE
444 typedef enum _WAIT_TYPE
450 typedef enum _INTERFACE_TYPE
452 InterfaceTypeUndefined
= -1,
470 }INTERFACE_TYPE
, *PINTERFACE_TYPE
;
479 typedef enum _KWAIT_REASON
518 typedef enum _KPROFILE_SOURCE
521 ProfileAlignmentFixup
,
524 ProfileLoadInstructions
,
525 ProfilePipelineFrozen
,
526 ProfileBranchInstructions
,
527 ProfileTotalNonissues
,
531 ProfileBranchMispredictions
,
532 ProfileStoreInstructions
,
533 ProfileFpInstructions
,
534 ProfileIntegerInstructions
,
538 ProfileSpecialInstructions
,
541 ProfileDcacheAccesses
,
542 ProfileMemoryBarrierCycles
,
543 ProfileLoadLinkedIssues
,
547 /**** Information Classes ****/
552 typedef enum _FILE_INFORMATION_CLASS
554 FileDirectoryInformation
= 1,
555 FileFullDirectoryInformation
,
556 FileBothDirectoryInformation
,
557 FileBasicInformation
,
558 FileStandardInformation
,
559 FileInternalInformation
,
561 FileAccessInformation
,
563 FileRenameInformation
,
565 FileNamesInformation
,
566 FileDispositionInformation
,
567 FilePositionInformation
,
568 FileFullEaInformation
,
570 FileAlignmentInformation
,
572 FileAllocationInformation
,
573 FileEndOfFileInformation
,
574 FileAlternateNameInformation
,
575 FileStreamInformation
,
577 FilePipeLocalInformation
,
578 FilePipeRemoteInformation
,
579 FileMailslotQueryInformation
,
580 FileMailslotSetInformation
,
581 FileCompressionInformation
,
582 FileObjectIdInformation
,
583 FileCompletionInformation
,
584 FileMoveClusterInformation
,
585 FileQuotaInformation
,
586 FileReparsePointInformation
,
587 FileNetworkOpenInformation
,
588 FileAttributeTagInformation
,
589 FileTrackingInformation
,
590 FileIdBothDirectoryInformation
,
591 FileIdFullDirectoryInformation
,
592 FileValidDataLengthInformation
,
593 FileShortNameInformation
,
594 FileMaximumInformation
595 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
600 typedef enum _FSINFOCLASS
602 FileFsVolumeInformation
= 1,
603 FileFsLabelInformation
,
604 FileFsSizeInformation
,
605 FileFsDeviceInformation
,
606 FileFsAttributeInformation
,
607 FileFsControlInformation
,
608 FileFsFullSizeInformation
,
609 FileFsObjectIdInformation
,
610 FileFsDriverPathInformation
,
611 FileFsMaximumInformation
612 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
617 typedef enum _KEY_INFORMATION_CLASS
623 KeyCachedInformation
,
625 } KEY_INFORMATION_CLASS
;
630 typedef enum _KEY_VALUE_INFORMATION_CLASS
632 KeyValueBasicInformation
,
633 KeyValueFullInformation
,
634 KeyValuePartialInformation
,
635 KeyValueFullInformationAlign64
,
636 KeyValuePartialInformationAlign64
637 } KEY_VALUE_INFORMATION_CLASS
;
642 typedef enum _KEY_SET_INFORMATION_CLASS
644 KeyWriteTimeInformation
,
645 KeyUserFlagsInformation
,
647 } KEY_SET_INFORMATION_CLASS
;
652 typedef enum _PROCESSINFOCLASS
654 ProcessBasicInformation
,
660 ProcessRaisePriority
,
662 ProcessExceptionPort
,
664 ProcessLdtInformation
,
666 ProcessDefaultHardErrorMode
,
667 ProcessIoPortHandlers
,
668 ProcessPooledUsageAndLimits
,
669 ProcessWorkingSetWatch
,
671 ProcessEnableAlignmentFaultFixup
,
672 ProcessPriorityClass
,
673 ProcessWx86Information
,
676 ProcessPriorityBoost
,
678 ProcessSessionInformation
,
679 ProcessForegroundInformation
,
680 ProcessWow64Information
,
681 ProcessImageFileName
,
682 ProcessLUIDDeviceMapsEnabled
,
683 ProcessBreakOnTermination
,
684 ProcessDebugObjectHandle
,
686 ProcessHandleTracing
,
693 typedef enum _THREADINFOCLASS
695 ThreadBasicInformation
,
700 ThreadImpersonationToken
,
701 ThreadDescriptorTableEntry
,
702 ThreadEnableAlignmentFaultFixup
,
703 ThreadEventPair_Reusable
,
704 ThreadQuerySetWin32StartAddress
,
706 ThreadPerformanceCount
,
708 ThreadIdealProcessor
,
710 ThreadSetTlsArrayAddress
,
712 ThreadHideFromDebugger
,
713 ThreadBreakOnTermination
,
717 /* TYPES *********************************************************************/
719 /* Basic Types that aren't defined in User-Mode Headers */
720 typedef CONST
int CINT
;
721 typedef CONST
char *PCSZ
;
722 typedef short CSHORT
;
723 typedef CSHORT
*PCSHORT
;
724 typedef LARGE_INTEGER PHYSICAL_ADDRESS
, *PPHYSICAL_ADDRESS
;
726 /* Kernel Types used by Native APIs */
727 typedef LONG KPRIORITY
;
728 typedef LONG NTSTATUS
, *PNTSTATUS
;
729 typedef UCHAR KIRQL
, *PKIRQL
;
730 typedef ULONG KAFFINITY
, *PKAFFINITY
;
731 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
732 typedef struct _PEB
*PPEB
;
733 typedef ULONG KPROCESSOR_MODE
;
734 typedef struct _OBJECT_TYPE
*POBJECT_TYPE
;
736 struct _CSR_API_MESSAGE
;
737 struct _EVENT_TRACE_HEADER
; /* <--- We might want to declare this one */
738 typedef ULONG EXECUTION_STATE
;
741 #if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H)
742 typedef struct _UNICODE_STRING
745 USHORT MaximumLength
;
747 } UNICODE_STRING
, *PUNICODE_STRING
;
748 typedef const UNICODE_STRING
* PCUNICODE_STRING
;
750 typedef struct _STRING
753 USHORT MaximumLength
;
757 typedef struct _OBJECT_ATTRIBUTES
760 HANDLE RootDirectory
;
761 PUNICODE_STRING ObjectName
;
763 PVOID SecurityDescriptor
;
764 PVOID SecurityQualityOfService
;
765 } OBJECT_ATTRIBUTES
, *POBJECT_ATTRIBUTES
;
768 typedef STRING ANSI_STRING
;
769 typedef PSTRING PANSI_STRING
;
770 typedef STRING OEM_STRING
;
771 typedef PSTRING POEM_STRING
;
773 typedef struct _IO_STATUS_BLOCK
780 ULONG_PTR Information
;
781 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
786 IN PIO_STATUS_BLOCK IoStatusBlock
,
791 IN PVOID NormalContext
,
792 IN PVOID SystemArgument1
,
793 IN PVOID SystemArgument2
);
796 (*PTIMER_APC_ROUTINE
)(
797 IN PVOID TimerContext
,
798 IN ULONG TimerLowValue
,
799 IN LONG TimerHighValue
);
801 /* Kernel Types which are returned or used by Native API */
802 typedef struct _OBJECT_NAME_INFORMATION
805 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
807 typedef struct _CLIENT_ID
809 HANDLE UniqueProcess
;
811 } CLIENT_ID
, *PCLIENT_ID
;
813 typedef struct _KSYSTEM_TIME
818 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
820 typedef struct _TIME_FIELDS
830 } TIME_FIELDS
, *PTIME_FIELDS
;
832 typedef struct _VM_COUNTERS
834 SIZE_T PeakVirtualSize
;
836 ULONG PageFaultCount
;
837 SIZE_T PeakWorkingSetSize
;
838 SIZE_T WorkingSetSize
;
839 SIZE_T QuotaPeakPagedPoolUsage
;
840 SIZE_T QuotaPagedPoolUsage
;
841 SIZE_T QuotaPeakNonPagedPoolUsage
;
842 SIZE_T QuotaNonPagedPoolUsage
;
843 SIZE_T PagefileUsage
;
844 SIZE_T PeakPagefileUsage
;
845 } VM_COUNTERS
, *PVM_COUNTERS
;
847 typedef struct _VM_COUNTERS_EX
849 SIZE_T PeakVirtualSize
;
851 ULONG PageFaultCount
;
852 SIZE_T PeakWorkingSetSize
;
853 SIZE_T WorkingSetSize
;
854 SIZE_T QuotaPeakPagedPoolUsage
;
855 SIZE_T QuotaPagedPoolUsage
;
856 SIZE_T QuotaPeakNonPagedPoolUsage
;
857 SIZE_T QuotaNonPagedPoolUsage
;
858 SIZE_T PagefileUsage
;
859 SIZE_T PeakPagefileUsage
;
861 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
863 /**** Information Types ****/
870 typedef struct _KEY_WRITE_TIME_INFORMATION
872 LARGE_INTEGER LastWriteTime
;
873 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
876 typedef struct _KEY_USER_FLAGS_INFORMATION
879 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
881 typedef struct _KEY_FULL_INFORMATION
883 LARGE_INTEGER LastWriteTime
;
891 ULONG MaxValueNameLen
;
892 ULONG MaxValueDataLen
;
894 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
896 typedef struct _KEY_NODE_INFORMATION
898 LARGE_INTEGER LastWriteTime
;
904 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
911 typedef struct _FILE_BASIC_INFORMATION
913 LARGE_INTEGER CreationTime
;
914 LARGE_INTEGER LastAccessTime
;
915 LARGE_INTEGER LastWriteTime
;
916 LARGE_INTEGER ChangeTime
;
917 ULONG FileAttributes
;
918 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
921 typedef struct _FILE_STANDARD_INFORMATION
923 LARGE_INTEGER AllocationSize
;
924 LARGE_INTEGER EndOfFile
;
926 BOOLEAN DeletePending
;
928 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
930 typedef struct _FILE_NETWORK_OPEN_INFORMATION
932 LARGE_INTEGER CreationTime
;
933 LARGE_INTEGER LastAccessTime
;
934 LARGE_INTEGER LastWriteTime
;
935 LARGE_INTEGER ChangeTime
;
936 LARGE_INTEGER AllocationSize
;
937 LARGE_INTEGER EndOfFile
;
938 ULONG FileAttributes
;
939 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
941 typedef struct _FILE_ZERO_DATA_INFORMATION
943 LARGE_INTEGER FileOffset
;
944 LARGE_INTEGER BeyondFinalZero
;
945 } FILE_ZERO_DATA_INFORMATION
, *PFILE_ZERO_DATA_INFORMATION
;
947 typedef struct _FILE_EA_INFORMATION
950 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
952 typedef struct _FILE_COMPRESSION_INFORMATION
954 LARGE_INTEGER CompressedFileSize
;
955 USHORT CompressionFormat
;
956 UCHAR CompressionUnitShift
;
960 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
962 typedef struct _FILE_POSITION_INFORMATION
964 LARGE_INTEGER CurrentByteOffset
;
965 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
967 typedef struct _FILE_DISPOSITION_INFORMATION
970 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
972 typedef struct FILE_ALLOCATED_RANGE_BUFFER
974 LARGE_INTEGER FileOffset
;
975 LARGE_INTEGER Length
;
976 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
978 typedef struct _FILE_FULL_EA_INFORMATION
980 ULONG NextEntryOffset
;
983 USHORT EaValueLength
;
985 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
987 typedef struct _FILE_QUOTA_INFORMATION
989 ULONG NextEntryOffset
;
991 LARGE_INTEGER ChangeTime
;
992 LARGE_INTEGER QuotaUsed
;
993 LARGE_INTEGER QuotaThreshold
;
994 LARGE_INTEGER QuotaLimit
;
996 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
998 typedef struct _FILE_INTERNAL_INFORMATION
1000 LARGE_INTEGER IndexNumber
;
1001 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
1003 typedef struct _FILE_RENAME_INFORMATION
1005 BOOLEAN ReplaceIfExists
;
1006 HANDLE RootDirectory
;
1007 ULONG FileNameLength
;
1009 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
1011 typedef struct _FILE_PIPE_INFORMATION
1014 ULONG CompletionMode
;
1015 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
1017 typedef struct _FILE_PIPE_LOCAL_INFORMATION
1019 ULONG NamedPipeType
;
1020 ULONG NamedPipeConfiguration
;
1021 ULONG MaximumInstances
;
1022 ULONG CurrentInstances
;
1024 ULONG ReadDataAvailable
;
1025 ULONG OutboundQuota
;
1026 ULONG WriteQuotaAvailable
;
1027 ULONG NamedPipeState
;
1029 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
1031 typedef struct _FILE_PIPE_REMOTE_INFORMATION
1033 LARGE_INTEGER CollectDataTime
;
1034 ULONG MaximumCollectionCount
;
1035 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
1037 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
1039 ULONG MaximumMessageSize
;
1040 ULONG MailslotQuota
;
1041 ULONG NextMessageSize
;
1042 ULONG MessagesAvailable
;
1043 LARGE_INTEGER ReadTimeout
;
1044 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
1046 typedef struct _FILE_MAILSLOT_SET_INFORMATION
1048 LARGE_INTEGER ReadTimeout
;
1049 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
1051 typedef struct _FILE_BOTH_DIR_INFORMATION
1053 ULONG NextEntryOffset
;
1055 LARGE_INTEGER CreationTime
;
1056 LARGE_INTEGER LastAccessTime
;
1057 LARGE_INTEGER LastWriteTime
;
1058 LARGE_INTEGER ChangeTime
;
1059 LARGE_INTEGER EndOfFile
;
1060 LARGE_INTEGER AllocationSize
;
1061 ULONG FileAttributes
;
1062 ULONG FileNameLength
;
1064 CCHAR ShortNameLength
;
1065 WCHAR ShortName
[12];
1067 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
1069 typedef struct _FILE_COMPLETION_INFORMATION
1073 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
1075 typedef struct _FILE_LINK_INFORMATION
1077 BOOLEAN ReplaceIfExists
;
1078 HANDLE RootDirectory
;
1079 ULONG FileNameLength
;
1081 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
1083 typedef struct _FILE_NAME_INFORMATION
1085 ULONG FileNameLength
;
1087 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1089 typedef struct _FILE_ALLOCATION_INFORMATION
1091 LARGE_INTEGER AllocationSize
;
1092 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
1094 typedef struct _FILE_END_OF_FILE_INFORMATION
1096 LARGE_INTEGER EndOfFile
;
1097 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1099 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
1101 LARGE_INTEGER ValidDataLength
;
1102 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1107 typedef struct _FILE_FS_DEVICE_INFORMATION
1109 DEVICE_TYPE DeviceType
;
1110 ULONG Characteristics
;
1111 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1113 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
1115 ULONG FileSystemAttributes
;
1116 ULONG MaximumComponentNameLength
;
1117 ULONG FileSystemNameLength
;
1118 WCHAR FileSystemName
[1];
1119 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
1121 typedef struct _FILE_FS_SIZE_INFORMATION
1123 LARGE_INTEGER TotalAllocationUnits
;
1124 LARGE_INTEGER AvailableAllocationUnits
;
1125 ULONG SectorsPerAllocationUnit
;
1126 ULONG BytesPerSector
;
1127 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1129 typedef struct _FILE_FS_LABEL_INFORMATION
1131 ULONG VolumeLabelLength
;
1132 WCHAR VolumeLabel
[1];
1133 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1135 typedef struct _FILE_FS_VOLUME_INFORMATION
1137 LARGE_INTEGER VolumeCreationTime
;
1138 ULONG VolumeSerialNumber
;
1139 ULONG VolumeLabelLength
;
1140 BOOLEAN SupportsObjects
;
1141 WCHAR VolumeLabel
[1];
1142 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1145 * Registry Key Value
1149 typedef struct _KEY_VALUE_ENTRY
1151 PUNICODE_STRING ValueName
;
1155 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
1158 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
1164 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
1167 typedef struct _KEY_VALUE_BASIC_INFORMATION
1173 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
1176 typedef struct _KEY_VALUE_FULL_INFORMATION
1184 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
1191 typedef struct _KEY_BASIC_INFORMATION
1193 LARGE_INTEGER LastWriteTime
;
1197 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
1199 /* File Pipe Structures for the FSCTLs */
1200 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
1202 LARGE_INTEGER Timeout
;
1204 BOOLEAN TimeoutSpecified
;
1206 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
1208 typedef struct _FILE_PIPE_PEEK_BUFFER
1210 ULONG NamedPipeState
;
1211 ULONG ReadDataAvailable
;
1212 ULONG NumberOfMessages
;
1213 ULONG MessageLength
;
1215 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
1217 /* The Kerner/User Shared Data Structure */
1218 typedef struct _KUSER_SHARED_DATA
1220 ULONG TickCountLowDeprecated
;
1221 ULONG TickCountMultiplier
;
1222 volatile KSYSTEM_TIME InterruptTime
;
1223 volatile KSYSTEM_TIME SystemTime
;
1224 volatile KSYSTEM_TIME TimeZoneBias
;
1225 USHORT ImageNumberLow
;
1226 USHORT ImageNumberHigh
;
1227 WCHAR NtSystemRoot
[260];
1228 ULONG MaxStackTraceDepth
;
1229 ULONG CryptoExponent
;
1231 ULONG LargePageMinimum
;
1233 NT_PRODUCT_TYPE NtProductType
;
1234 BOOLEAN ProductTypeIsValid
;
1235 ULONG NtMajorVersion
;
1236 ULONG NtMinorVersion
;
1237 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1240 volatile ULONG TimeSlip
;
1241 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1242 LARGE_INTEGER SystemExpirationDate
;
1244 BOOLEAN KdDebuggerEnabled
;
1245 volatile ULONG ActiveConsoleId
;
1246 volatile ULONG DismountCount
;
1247 ULONG ComPlusPackage
;
1248 ULONG LastSystemRITEventTickCount
;
1249 ULONG NumberOfPhysicalPages
;
1250 BOOLEAN SafeBootMode
;
1253 ULONGLONG SystemCall
[4];
1255 volatile KSYSTEM_TIME TickCount
;
1256 volatile ULONG64 TickCountQuad
;
1258 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1260 /* Run-Time Library (RTL) Types */
1261 typedef struct _RTL_BITMAP
1265 } RTL_BITMAP
, *PRTL_BITMAP
;
1267 typedef struct _RTL_BITMAP_RUN
1269 ULONG StartingIndex
;
1271 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
1273 typedef struct _COMPRESSED_DATA_INFO
1275 USHORT CompressionFormatAndEngine
;
1276 UCHAR CompressionUnitShift
;
1280 USHORT NumberOfChunks
;
1281 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
1282 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
1284 typedef struct _GENERATE_NAME_CONTEXT
1287 BOOLEAN CheckSumInserted
;
1289 WCHAR NameBuffer
[8];
1290 ULONG ExtensionLength
;
1291 WCHAR ExtensionBuffer
[4];
1292 ULONG LastIndexValue
;
1293 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
1295 typedef struct _RTL_SPLAY_LINKS
1297 struct _RTL_SPLAY_LINKS
*Parent
;
1298 struct _RTL_SPLAY_LINKS
*LeftChild
;
1299 struct _RTL_SPLAY_LINKS
*RightChild
;
1300 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
1302 struct _RTL_AVL_TABLE
;
1303 struct _RTL_GENERIC_TABLE
;
1305 typedef NTSTATUS STDCALL
1306 (*PRTL_AVL_MATCH_FUNCTION
)(
1307 struct _RTL_AVL_TABLE
*Table
,
1312 typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
1313 (*PRTL_AVL_COMPARE_ROUTINE
) (
1314 struct _RTL_AVL_TABLE
*Table
,
1319 typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
1320 (*PRTL_GENERIC_COMPARE_ROUTINE
) (
1321 struct _RTL_GENERIC_TABLE
*Table
,
1326 typedef PVOID STDCALL
1327 (*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
1328 struct _RTL_GENERIC_TABLE
*Table
,
1332 typedef VOID STDCALL
1333 (*PRTL_GENERIC_FREE_ROUTINE
) (
1334 struct _RTL_GENERIC_TABLE
*Table
,
1338 typedef VOID STDCALL
1339 (*PRTL_AVL_ALLOCATE_ROUTINE
) (
1340 struct _RTL_AVL_TABLE
*Table
,
1344 typedef VOID STDCALL
1345 (*PRTL_AVL_FREE_ROUTINE
) (
1346 struct _RTL_AVL_TABLE
*Table
,
1350 typedef struct _RTL_GENERIC_TABLE
1352 PRTL_SPLAY_LINKS TableRoot
;
1353 LIST_ENTRY InsertOrderList
;
1354 PLIST_ENTRY OrderedPointer
;
1355 ULONG WhichOrderedElement
;
1356 ULONG NumberGenericTableElements
;
1357 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
1358 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
1359 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
1361 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
1363 typedef struct _RTL_BALANCED_LINKS
1365 struct _RTL_BALANCED_LINKS
*Parent
;
1366 struct _RTL_BALANCED_LINKS
*LeftChild
;
1367 struct _RTL_BALANCED_LINKS
*RightChild
;
1370 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
1372 typedef struct _RTL_AVL_TABLE
1374 RTL_BALANCED_LINKS BalancedRoot
;
1375 PVOID OrderedPointer
;
1376 ULONG WhichOrderedElement
;
1377 ULONG NumberGenericTableElements
;
1379 PRTL_BALANCED_LINKS RestartKey
;
1381 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
1382 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
1383 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
1385 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
1387 typedef NTSTATUS STDCALL
1388 (*PRTL_QUERY_REGISTRY_ROUTINE
)(
1392 IN ULONG ValueLength
,
1394 IN PVOID EntryContext
1397 typedef struct _RTL_QUERY_REGISTRY_TABLE
1399 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
1405 ULONG DefaultLength
;
1406 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
1408 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
1410 CSHORT NodeTypeCode
;
1412 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
1413 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
1414 RTL_SPLAY_LINKS Links
;
1415 PUNICODE_STRING Prefix
;
1416 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
1418 typedef struct _UNICODE_PREFIX_TABLE
1420 CSHORT NodeTypeCode
;
1422 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
1423 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
1424 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
1426 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW
;
1427 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW
;
1428 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW
;
1429 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW
;