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 _CLIENT_ID
741 HANDLE UniqueProcess
;
743 } CLIENT_ID
, *PCLIENT_ID
;
745 typedef struct _KSYSTEM_TIME
750 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
752 typedef struct _TIME_FIELDS
762 } TIME_FIELDS
, *PTIME_FIELDS
;
764 typedef struct _VM_COUNTERS
766 SIZE_T PeakVirtualSize
;
768 ULONG PageFaultCount
;
769 SIZE_T PeakWorkingSetSize
;
770 SIZE_T WorkingSetSize
;
771 SIZE_T QuotaPeakPagedPoolUsage
;
772 SIZE_T QuotaPagedPoolUsage
;
773 SIZE_T QuotaPeakNonPagedPoolUsage
;
774 SIZE_T QuotaNonPagedPoolUsage
;
775 SIZE_T PagefileUsage
;
776 SIZE_T PeakPagefileUsage
;
777 } VM_COUNTERS
, *PVM_COUNTERS
;
779 typedef struct _VM_COUNTERS_EX
781 SIZE_T PeakVirtualSize
;
783 ULONG PageFaultCount
;
784 SIZE_T PeakWorkingSetSize
;
785 SIZE_T WorkingSetSize
;
786 SIZE_T QuotaPeakPagedPoolUsage
;
787 SIZE_T QuotaPagedPoolUsage
;
788 SIZE_T QuotaPeakNonPagedPoolUsage
;
789 SIZE_T QuotaNonPagedPoolUsage
;
790 SIZE_T PagefileUsage
;
791 SIZE_T PeakPagefileUsage
;
793 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
795 /**** Information Types ****/
802 typedef struct _KEY_WRITE_TIME_INFORMATION
804 LARGE_INTEGER LastWriteTime
;
805 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
808 typedef struct _KEY_USER_FLAGS_INFORMATION
811 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
813 typedef struct _KEY_FULL_INFORMATION
815 LARGE_INTEGER LastWriteTime
;
823 ULONG MaxValueNameLen
;
824 ULONG MaxValueDataLen
;
826 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
828 typedef struct _KEY_NODE_INFORMATION
830 LARGE_INTEGER LastWriteTime
;
836 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
843 typedef struct _FILE_BASIC_INFORMATION
845 LARGE_INTEGER CreationTime
;
846 LARGE_INTEGER LastAccessTime
;
847 LARGE_INTEGER LastWriteTime
;
848 LARGE_INTEGER ChangeTime
;
849 ULONG FileAttributes
;
850 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
853 typedef struct _FILE_STANDARD_INFORMATION
855 LARGE_INTEGER AllocationSize
;
856 LARGE_INTEGER EndOfFile
;
858 BOOLEAN DeletePending
;
860 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
862 typedef struct _FILE_NETWORK_OPEN_INFORMATION
864 LARGE_INTEGER CreationTime
;
865 LARGE_INTEGER LastAccessTime
;
866 LARGE_INTEGER LastWriteTime
;
867 LARGE_INTEGER ChangeTime
;
868 LARGE_INTEGER AllocationSize
;
869 LARGE_INTEGER EndOfFile
;
870 ULONG FileAttributes
;
871 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
873 typedef struct _FILE_ZERO_DATA_INFORMATION
875 LARGE_INTEGER FileOffset
;
876 LARGE_INTEGER BeyondFinalZero
;
877 } FILE_ZERO_DATA_INFORMATION
, *PFILE_ZERO_DATA_INFORMATION
;
879 typedef struct _FILE_EA_INFORMATION
882 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
884 typedef struct _FILE_COMPRESSION_INFORMATION
886 LARGE_INTEGER CompressedFileSize
;
887 USHORT CompressionFormat
;
888 UCHAR CompressionUnitShift
;
892 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
894 typedef struct _FILE_POSITION_INFORMATION
896 LARGE_INTEGER CurrentByteOffset
;
897 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
899 typedef struct _FILE_DISPOSITION_INFORMATION
902 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
904 typedef struct FILE_ALLOCATED_RANGE_BUFFER
906 LARGE_INTEGER FileOffset
;
907 LARGE_INTEGER Length
;
908 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
910 typedef struct _FILE_FULL_EA_INFORMATION
912 ULONG NextEntryOffset
;
915 USHORT EaValueLength
;
917 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
919 typedef struct _FILE_QUOTA_INFORMATION
921 ULONG NextEntryOffset
;
923 LARGE_INTEGER ChangeTime
;
924 LARGE_INTEGER QuotaUsed
;
925 LARGE_INTEGER QuotaThreshold
;
926 LARGE_INTEGER QuotaLimit
;
928 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
930 typedef struct _FILE_INTERNAL_INFORMATION
932 LARGE_INTEGER IndexNumber
;
933 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
935 typedef struct _FILE_RENAME_INFORMATION
937 BOOLEAN ReplaceIfExists
;
938 HANDLE RootDirectory
;
939 ULONG FileNameLength
;
941 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
943 typedef struct _FILE_PIPE_INFORMATION
946 ULONG CompletionMode
;
947 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
949 typedef struct _FILE_PIPE_LOCAL_INFORMATION
952 ULONG NamedPipeConfiguration
;
953 ULONG MaximumInstances
;
954 ULONG CurrentInstances
;
956 ULONG ReadDataAvailable
;
958 ULONG WriteQuotaAvailable
;
959 ULONG NamedPipeState
;
961 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
963 typedef struct _FILE_PIPE_REMOTE_INFORMATION
965 LARGE_INTEGER CollectDataTime
;
966 ULONG MaximumCollectionCount
;
967 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
969 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
971 ULONG MaximumMessageSize
;
973 ULONG NextMessageSize
;
974 ULONG MessagesAvailable
;
975 LARGE_INTEGER ReadTimeout
;
976 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
978 typedef struct _FILE_MAILSLOT_SET_INFORMATION
980 LARGE_INTEGER ReadTimeout
;
981 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
983 typedef struct _FILE_BOTH_DIR_INFORMATION
985 ULONG NextEntryOffset
;
987 LARGE_INTEGER CreationTime
;
988 LARGE_INTEGER LastAccessTime
;
989 LARGE_INTEGER LastWriteTime
;
990 LARGE_INTEGER ChangeTime
;
991 LARGE_INTEGER EndOfFile
;
992 LARGE_INTEGER AllocationSize
;
993 ULONG FileAttributes
;
994 ULONG FileNameLength
;
996 CCHAR ShortNameLength
;
999 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
1001 typedef struct _FILE_COMPLETION_INFORMATION
1005 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
1007 typedef struct _FILE_LINK_INFORMATION
1009 BOOLEAN ReplaceIfExists
;
1010 HANDLE RootDirectory
;
1011 ULONG FileNameLength
;
1013 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
1015 typedef struct _FILE_NAME_INFORMATION
1017 ULONG FileNameLength
;
1019 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1021 typedef struct _FILE_ALLOCATION_INFORMATION
1023 LARGE_INTEGER AllocationSize
;
1024 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
1026 typedef struct _FILE_END_OF_FILE_INFORMATION
1028 LARGE_INTEGER EndOfFile
;
1029 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1031 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
1033 LARGE_INTEGER ValidDataLength
;
1034 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1039 typedef struct _FILE_FS_DEVICE_INFORMATION
1041 DEVICE_TYPE DeviceType
;
1042 ULONG Characteristics
;
1043 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1045 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
1047 ULONG FileSystemAttributes
;
1048 ULONG MaximumComponentNameLength
;
1049 ULONG FileSystemNameLength
;
1050 WCHAR FileSystemName
[1];
1051 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
1053 typedef struct _FILE_FS_SIZE_INFORMATION
1055 LARGE_INTEGER TotalAllocationUnits
;
1056 LARGE_INTEGER AvailableAllocationUnits
;
1057 ULONG SectorsPerAllocationUnit
;
1058 ULONG BytesPerSector
;
1059 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1061 typedef struct _FILE_FS_LABEL_INFORMATION
1063 ULONG VolumeLabelLength
;
1064 WCHAR VolumeLabel
[1];
1065 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1067 typedef struct _FILE_FS_VOLUME_INFORMATION
1069 LARGE_INTEGER VolumeCreationTime
;
1070 ULONG VolumeSerialNumber
;
1071 ULONG VolumeLabelLength
;
1072 BOOLEAN SupportsObjects
;
1073 WCHAR VolumeLabel
[1];
1074 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1077 * Registry Key Value
1081 typedef struct _KEY_VALUE_ENTRY
1083 PUNICODE_STRING ValueName
;
1087 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
1090 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
1096 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
1099 typedef struct _KEY_VALUE_BASIC_INFORMATION
1105 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
1108 typedef struct _KEY_VALUE_FULL_INFORMATION
1116 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
1123 typedef struct _KEY_BASIC_INFORMATION
1125 LARGE_INTEGER LastWriteTime
;
1129 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
1131 /* File Pipe Structures for the FSCTLs */
1132 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
1134 LARGE_INTEGER Timeout
;
1136 BOOLEAN TimeoutSpecified
;
1138 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
1140 typedef struct _FILE_PIPE_PEEK_BUFFER
1142 ULONG NamedPipeState
;
1143 ULONG ReadDataAvailable
;
1144 ULONG NumberOfMessages
;
1145 ULONG MessageLength
;
1147 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
1149 /* The Kerner/User Shared Data Structure */
1150 typedef struct _KUSER_SHARED_DATA
1152 ULONG TickCountLowDeprecated
;
1153 ULONG TickCountMultiplier
;
1154 volatile KSYSTEM_TIME InterruptTime
;
1155 volatile KSYSTEM_TIME SystemTime
;
1156 volatile KSYSTEM_TIME TimeZoneBias
;
1157 USHORT ImageNumberLow
;
1158 USHORT ImageNumberHigh
;
1159 WCHAR NtSystemRoot
[260];
1160 ULONG MaxStackTraceDepth
;
1161 ULONG CryptoExponent
;
1163 ULONG LargePageMinimum
;
1165 NT_PRODUCT_TYPE NtProductType
;
1166 BOOLEAN ProductTypeIsValid
;
1167 ULONG NtMajorVersion
;
1168 ULONG NtMinorVersion
;
1169 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1172 volatile ULONG TimeSlip
;
1173 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1174 LARGE_INTEGER SystemExpirationDate
;
1176 BOOLEAN KdDebuggerEnabled
;
1177 volatile ULONG ActiveConsoleId
;
1178 volatile ULONG DismountCount
;
1179 ULONG ComPlusPackage
;
1180 ULONG LastSystemRITEventTickCount
;
1181 ULONG NumberOfPhysicalPages
;
1182 BOOLEAN SafeBootMode
;
1185 ULONGLONG SystemCall
[4];
1187 volatile KSYSTEM_TIME TickCount
;
1188 volatile ULONG64 TickCountQuad
;
1190 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1192 /* Run-Time Library (RTL) Types */
1193 typedef struct _RTL_BITMAP
1197 } RTL_BITMAP
, *PRTL_BITMAP
;
1199 typedef struct _RTL_BITMAP_RUN
1201 ULONG StartingIndex
;
1203 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
1205 typedef struct _COMPRESSED_DATA_INFO
1207 USHORT CompressionFormatAndEngine
;
1208 UCHAR CompressionUnitShift
;
1212 USHORT NumberOfChunks
;
1213 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
1214 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
1216 typedef struct _GENERATE_NAME_CONTEXT
1219 BOOLEAN CheckSumInserted
;
1221 WCHAR NameBuffer
[8];
1222 ULONG ExtensionLength
;
1223 WCHAR ExtensionBuffer
[4];
1224 ULONG LastIndexValue
;
1225 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
1227 typedef struct _RTL_SPLAY_LINKS
1229 struct _RTL_SPLAY_LINKS
*Parent
;
1230 struct _RTL_SPLAY_LINKS
*LeftChild
;
1231 struct _RTL_SPLAY_LINKS
*RightChild
;
1232 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
1234 struct _RTL_AVL_TABLE
;
1235 struct _RTL_GENERIC_TABLE
;
1237 typedef NTSTATUS STDCALL
1238 (*PRTL_AVL_MATCH_FUNCTION
)(
1239 struct _RTL_AVL_TABLE
*Table
,
1244 typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
1245 (*PRTL_AVL_COMPARE_ROUTINE
) (
1246 struct _RTL_AVL_TABLE
*Table
,
1251 typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
1252 (*PRTL_GENERIC_COMPARE_ROUTINE
) (
1253 struct _RTL_GENERIC_TABLE
*Table
,
1258 typedef PVOID STDCALL
1259 (*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
1260 struct _RTL_GENERIC_TABLE
*Table
,
1264 typedef VOID STDCALL
1265 (*PRTL_GENERIC_FREE_ROUTINE
) (
1266 struct _RTL_GENERIC_TABLE
*Table
,
1270 typedef VOID STDCALL
1271 (*PRTL_AVL_ALLOCATE_ROUTINE
) (
1272 struct _RTL_AVL_TABLE
*Table
,
1276 typedef VOID STDCALL
1277 (*PRTL_AVL_FREE_ROUTINE
) (
1278 struct _RTL_AVL_TABLE
*Table
,
1282 typedef struct _RTL_GENERIC_TABLE
1284 PRTL_SPLAY_LINKS TableRoot
;
1285 LIST_ENTRY InsertOrderList
;
1286 PLIST_ENTRY OrderedPointer
;
1287 ULONG WhichOrderedElement
;
1288 ULONG NumberGenericTableElements
;
1289 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
1290 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
1291 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
1293 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
1295 typedef struct _RTL_BALANCED_LINKS
1297 struct _RTL_BALANCED_LINKS
*Parent
;
1298 struct _RTL_BALANCED_LINKS
*LeftChild
;
1299 struct _RTL_BALANCED_LINKS
*RightChild
;
1302 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
1304 typedef struct _RTL_AVL_TABLE
1306 RTL_BALANCED_LINKS BalancedRoot
;
1307 PVOID OrderedPointer
;
1308 ULONG WhichOrderedElement
;
1309 ULONG NumberGenericTableElements
;
1311 PRTL_BALANCED_LINKS RestartKey
;
1313 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
1314 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
1315 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
1317 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
1319 typedef NTSTATUS STDCALL
1320 (*PRTL_QUERY_REGISTRY_ROUTINE
)(
1324 IN ULONG ValueLength
,
1326 IN PVOID EntryContext
1329 typedef struct _RTL_QUERY_REGISTRY_TABLE
1331 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
1337 ULONG DefaultLength
;
1338 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
1340 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
1342 CSHORT NodeTypeCode
;
1344 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
1345 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
1346 RTL_SPLAY_LINKS Links
;
1347 PUNICODE_STRING Prefix
;
1348 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
1350 typedef struct _UNICODE_PREFIX_TABLE
1352 CSHORT NodeTypeCode
;
1354 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
1355 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
1356 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
1358 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW
;
1359 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW
;
1360 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW
;
1361 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW
;