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 **************************************************************/
19 /* EXPORTED DATA *************************************************************/
21 /* CONSTANTS *****************************************************************/
23 /* NTAPI/NTOSAPI Define */
24 #define NTAPI __stdcall
26 #define FASTCALL __fastcall
27 #define STDCALL __stdcall
29 /* Definitions for Object Creation -- winternl.h */
30 #define OBJ_INHERIT 2L
31 #define OBJ_PERMANENT 16L
32 #define OBJ_EXCLUSIVE 32L
33 #define OBJ_CASE_INSENSITIVE 64L
34 #define OBJ_OPENIF 128L
35 #define OBJ_OPENLINK 256L
36 #define OBJ_VALID_ATTRIBUTES 498L
37 #define InitializeObjectAttributes(p,n,a,r,s) { \
38 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
39 (p)->RootDirectory = (r); \
40 (p)->Attributes = (a); \
41 (p)->ObjectName = (n); \
42 (p)->SecurityDescriptor = (s); \
43 (p)->SecurityQualityOfService = NULL; \
46 /* Native API Return Value Macros */
47 #define NT_SUCCESS(x) ((x)>=0)
48 #define NT_WARNING(x) ((ULONG)(x)>>30==2)
49 #define NT_ERROR(x) ((ULONG)(x)>>30==3)
51 /* Object Access Rights */
52 #define DIRECTORY_QUERY (0x0001)
53 #define DIRECTORY_TRAVERSE (0x0002)
54 #define DIRECTORY_CREATE_OBJECT (0x0004)
55 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
56 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
57 #define EVENT_QUERY_STATE (0x0001)
58 #define SEMAPHORE_QUERY_STATE (0x0001)
59 #define SYMBOLIC_LINK_QUERY 0x0001
60 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
62 /* Duplication Flags */
63 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
65 /* I/O Control Codes for communicating with Mailslots */
66 #define FSCTL_MAILSLOT_PEEK \
67 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
69 /* I/O Control Codes for communicating with Pipes */
70 #define FSCTL_PIPE_ASSIGN_EVENT \
71 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
72 #define FSCTL_PIPE_DISCONNECT \
73 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
74 #define FSCTL_PIPE_LISTEN \
75 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
76 #define FSCTL_PIPE_PEEK \
77 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
78 #define FSCTL_PIPE_QUERY_EVENT \
79 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)
82 #define FSCTL_PIPE_WAIT \
83 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
84 #define FSCTL_PIPE_IMPERSONATE \
85 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
86 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
87 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
88 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
89 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
90 #define FSCTL_PIPE_INTERNAL_READ \
91 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
92 #define FSCTL_PIPE_INTERNAL_WRITE \
93 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
94 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
95 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
96 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
97 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
99 /* I/O Control Codes for Communicating with Tapes */
100 #define IOCTL_TAPE_ERASE \
101 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
102 #define IOCTL_TAPE_PREPARE \
103 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
104 #define IOCTL_TAPE_WRITE_MARKS \
105 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
106 #define IOCTL_TAPE_GET_POSITION \
107 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
108 #define IOCTL_TAPE_SET_POSITION \
109 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
110 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
111 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
112 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
113 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
114 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
115 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
116 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
117 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
118 #define IOCTL_TAPE_GET_STATUS \
119 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
120 #define IOCTL_TAPE_CREATE_PARTITION \
121 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
123 /* Macros for current Process/Thread built-in 'special' ID */
124 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
125 #define ZwCurrentProcess() NtCurrentProcess()
126 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
127 #define ZwCurrentThread() NtCurrentThread()
129 /* Kernel Shared Data Constants */
130 #define PROCESSOR_FEATURE_MAX 64
131 #define SharedUserData ((KUSER_SHARED_DATA * CONST) USER_SHARED_DATA)
133 /* Paging Values on x86 */
134 #define PAGE_SIZE 0x1000
135 #define PAGE_SHIFT 12L
137 /* Run-Time Library (RTL) Registry Constants */
138 #define RTL_REGISTRY_ABSOLUTE 0
139 #define RTL_REGISTRY_SERVICES 1
140 #define RTL_REGISTRY_CONTROL 2
141 #define RTL_REGISTRY_WINDOWS_NT 3
142 #define RTL_REGISTRY_DEVICEMAP 4
143 #define RTL_REGISTRY_USER 5
144 #define RTL_REGISTRY_MAXIMUM 6
145 #define RTL_REGISTRY_HANDLE 0x40000000
146 #define RTL_REGISTRY_OPTIONAL 0x80000000
147 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
148 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
149 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
150 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
151 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
152 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
153 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
155 /* File Result Flags */
156 #define FILE_SUPERSEDED 0x00000000
157 #define FILE_OPENED 0x00000001
158 #define FILE_CREATED 0x00000002
159 #define FILE_OVERWRITTEN 0x00000003
160 #define FILE_EXISTS 0x00000004
161 #define FILE_DOES_NOT_EXIST 0x00000005
164 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
165 #define FILE_PIPE_MESSAGE_MODE 0x00000001
166 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
167 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
168 #define FILE_PIPE_INBOUND 0x00000000
169 #define FILE_PIPE_OUTBOUND 0x00000001
170 #define FILE_PIPE_FULL_DUPLEX 0x00000002
171 #define FILE_PIPE_CLIENT_END 0x00000000
172 #define FILE_PIPE_SERVER_END 0x00000001
174 /* File Attributes */
175 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
176 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
179 #define FILE_SUPERSEDE 0x00000000
180 #define FILE_OPEN 0x00000001
181 #define FILE_CREATE 0x00000002
182 #define FILE_OPEN_IF 0x00000003
183 #define FILE_OVERWRITE 0x00000004
184 #define FILE_OVERWRITE_IF 0x00000005
185 #define FILE_MAXIMUM_DISPOSITION 0x00000005
188 #define FILE_DIRECTORY_FILE 0x00000001
189 #define FILE_WRITE_THROUGH 0x00000002
190 #define FILE_SEQUENTIAL_ONLY 0x00000004
191 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
192 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
193 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
194 #define FILE_NON_DIRECTORY_FILE 0x00000040
195 #define FILE_CREATE_TREE_CONNECTION 0x00000080
196 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
197 #define FILE_NO_EA_KNOWLEDGE 0x00000200
198 #define FILE_OPEN_FOR_RECOVERY 0x00000400
199 #define FILE_RANDOM_ACCESS 0x00000800
200 #define FILE_DELETE_ON_CLOSE 0x00001000
201 #define FILE_OPEN_BY_FILE_ID 0x00002000
202 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
203 #define FILE_NO_COMPRESSION 0x00008000
204 #define FILE_RESERVE_OPFILTER 0x00100000
205 #define FILE_OPEN_REPARSE_POINT 0x00200000
206 #define FILE_OPEN_NO_RECALL 0x00400000
207 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
209 /* Device Charactertics */
210 #define FILE_REMOVABLE_MEDIA 0x00000001
211 #define FILE_REMOTE_DEVICE 0x00000010
213 /* Version Constants */
214 #define VER_MINORVERSION 0x0000001
215 #define VER_MAJORVERSION 0x0000002
216 #define VER_BUILDNUMBER 0x0000004
217 #define VER_PLATFORMID 0x0000008
218 #define VER_SERVICEPACKMINOR 0x0000010
219 #define VER_SERVICEPACKMAJOR 0x0000020
220 #define VER_SUITENAME 0x0000040
221 #define VER_PRODUCT_TYPE 0x0000080
222 #define VER_PLATFORM_WIN32s 0
223 #define VER_PLATFORM_WIN32_WINDOWS 1
224 #define VER_PLATFORM_WIN32_NT 2
226 #define VER_GREATER 2
227 #define VER_GREATER_EQUAL 3
229 #define VER_LESS_EQUAL 5
232 #define VER_CONDITION_MASK 7
233 #define VER_NUM_BITS_PER_CONDITION_MASK 3
235 /* RTL String Hash Algorithms */
236 #define HASH_STRING_ALGORITHM_DEFAULT 0
237 #define HASH_STRING_ALGORITHM_X65599 1
238 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
244 IN PLIST_ENTRY ListHead
)
246 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
252 IN PLIST_ENTRY ListHead
,
253 IN PLIST_ENTRY Entry
)
255 PLIST_ENTRY OldFlink
;
256 OldFlink
= ListHead
->Flink
;
257 Entry
->Flink
= OldFlink
;
258 Entry
->Blink
= ListHead
;
259 OldFlink
->Blink
= Entry
;
260 ListHead
->Flink
= Entry
;
266 IN PLIST_ENTRY ListHead
,
267 IN PLIST_ENTRY Entry
)
269 PLIST_ENTRY OldBlink
;
270 OldBlink
= ListHead
->Blink
;
271 Entry
->Flink
= ListHead
;
272 Entry
->Blink
= OldBlink
;
273 OldBlink
->Flink
= Entry
;
274 ListHead
->Blink
= Entry
;
277 #define IsListEmpty(ListHead) \
278 ((ListHead)->Flink == (ListHead))
280 #define PopEntryList(ListHead) \
283 PSINGLE_LIST_ENTRY _FirstEntry; \
284 _FirstEntry = (ListHead)->Next; \
285 if (_FirstEntry != NULL) \
286 (ListHead)->Next = _FirstEntry->Next; \
289 #define PushEntryList(_ListHead, _Entry) \
290 (_Entry)->Next = (_ListHead)->Next; \
291 (_ListHead)->Next = (_Entry); \
296 IN PLIST_ENTRY Entry
)
298 PLIST_ENTRY OldFlink
;
299 PLIST_ENTRY OldBlink
;
301 OldFlink
= Entry
->Flink
;
302 OldBlink
= Entry
->Blink
;
303 OldFlink
->Blink
= OldBlink
;
304 OldBlink
->Flink
= OldFlink
;
305 return (OldFlink
== OldBlink
);
311 IN PLIST_ENTRY ListHead
)
316 Entry
= ListHead
->Flink
;
317 Flink
= Entry
->Flink
;
318 ListHead
->Flink
= Flink
;
319 Flink
->Blink
= ListHead
;
326 IN PLIST_ENTRY ListHead
)
331 Entry
= ListHead
->Blink
;
332 Blink
= Entry
->Blink
;
333 ListHead
->Blink
= Blink
;
334 Blink
->Flink
= ListHead
;
338 #define IsFirstEntry(ListHead, Entry) \
339 ((ListHead)->Flink == Entry)
341 #define IsLastEntry(ListHead, Entry) \
342 ((ListHead)->Blink == Entry)
345 * Constant String Macro
347 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
349 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
350 sizeof(__SOURCE_STRING__), \
351 (__SOURCE_STRING__) \
354 /* ENUMERATIONS **************************************************************/
356 /* Kernel Shared Data Values */
357 typedef enum _NT_PRODUCT_TYPE
362 } NT_PRODUCT_TYPE
, *PNT_PRODUCT_TYPE
;
364 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
369 } ALTERNATIVE_ARCHITECTURE_TYPE
;
371 /* Run-Time Library (RTL) Enumerations */
372 typedef enum _TABLE_SEARCH_RESULT
378 } TABLE_SEARCH_RESULT
;
380 typedef enum _RTL_GENERIC_COMPARE_RESULTS
385 } RTL_GENERIC_COMPARE_RESULTS
;
387 /* Kernel or Native Enumerations used by Native API */
388 typedef enum _SECTION_INHERIT
394 typedef enum _POOL_TYPE
398 NonPagedPoolMustSucceed
,
400 NonPagedPoolCacheAligned
,
401 PagedPoolCacheAligned
,
402 NonPagedPoolCacheAlignedMustS
,
404 NonPagedPoolSession
= 32,
406 NonPagedPoolMustSucceedSession
,
407 DontUseThisTypeSession
,
408 NonPagedPoolCacheAlignedSession
,
409 PagedPoolCacheAlignedSession
,
410 NonPagedPoolCacheAlignedMustSSession
413 typedef enum _EVENT_TYPE
419 typedef enum _TIMER_TYPE
425 typedef enum _WAIT_TYPE
431 typedef enum _INTERFACE_TYPE
433 InterfaceTypeUndefined
= -1,
451 }INTERFACE_TYPE
, *PINTERFACE_TYPE
;
460 typedef enum _KWAIT_REASON
499 typedef enum _KPROFILE_SOURCE
502 ProfileAlignmentFixup
,
505 ProfileLoadInstructions
,
506 ProfilePipelineFrozen
,
507 ProfileBranchInstructions
,
508 ProfileTotalNonissues
,
512 ProfileBranchMispredictions
,
513 ProfileStoreInstructions
,
514 ProfileFpInstructions
,
515 ProfileIntegerInstructions
,
519 ProfileSpecialInstructions
,
522 ProfileDcacheAccesses
,
523 ProfileMemoryBarrierCycles
,
524 ProfileLoadLinkedIssues
,
528 /**** Information Classes ****/
533 typedef enum _FILE_INFORMATION_CLASS
535 FileDirectoryInformation
= 1,
536 FileFullDirectoryInformation
,
537 FileBothDirectoryInformation
,
538 FileBasicInformation
,
539 FileStandardInformation
,
540 FileInternalInformation
,
542 FileAccessInformation
,
544 FileRenameInformation
,
546 FileNamesInformation
,
547 FileDispositionInformation
,
548 FilePositionInformation
,
549 FileFullEaInformation
,
551 FileAlignmentInformation
,
553 FileAllocationInformation
,
554 FileEndOfFileInformation
,
555 FileAlternateNameInformation
,
556 FileStreamInformation
,
558 FilePipeLocalInformation
,
559 FilePipeRemoteInformation
,
560 FileMailslotQueryInformation
,
561 FileMailslotSetInformation
,
562 FileCompressionInformation
,
563 FileObjectIdInformation
,
564 FileCompletionInformation
,
565 FileMoveClusterInformation
,
566 FileQuotaInformation
,
567 FileReparsePointInformation
,
568 FileNetworkOpenInformation
,
569 FileAttributeTagInformation
,
570 FileTrackingInformation
,
571 FileIdBothDirectoryInformation
,
572 FileIdFullDirectoryInformation
,
573 FileValidDataLengthInformation
,
574 FileShortNameInformation
,
575 FileMaximumInformation
576 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
581 typedef enum _FSINFOCLASS
583 FileFsVolumeInformation
= 1,
584 FileFsLabelInformation
,
585 FileFsSizeInformation
,
586 FileFsDeviceInformation
,
587 FileFsAttributeInformation
,
588 FileFsControlInformation
,
589 FileFsFullSizeInformation
,
590 FileFsObjectIdInformation
,
591 FileFsDriverPathInformation
,
592 FileFsMaximumInformation
593 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
598 typedef enum _KEY_INFORMATION_CLASS
604 KeyCachedInformation
,
606 } KEY_INFORMATION_CLASS
;
611 typedef enum _KEY_VALUE_INFORMATION_CLASS
613 KeyValueBasicInformation
,
614 KeyValueFullInformation
,
615 KeyValuePartialInformation
,
616 KeyValueFullInformationAlign64
,
617 KeyValuePartialInformationAlign64
618 } KEY_VALUE_INFORMATION_CLASS
;
623 typedef enum _KEY_SET_INFORMATION_CLASS
625 KeyWriteTimeInformation
,
626 KeyUserFlagsInformation
,
628 } KEY_SET_INFORMATION_CLASS
;
633 typedef enum _PROCESSINFOCLASS
635 ProcessBasicInformation
,
641 ProcessRaisePriority
,
643 ProcessExceptionPort
,
645 ProcessLdtInformation
,
647 ProcessDefaultHardErrorMode
,
648 ProcessIoPortHandlers
,
649 ProcessPooledUsageAndLimits
,
650 ProcessWorkingSetWatch
,
652 ProcessEnableAlignmentFaultFixup
,
653 ProcessPriorityClass
,
654 ProcessWx86Information
,
657 ProcessPriorityBoost
,
659 ProcessSessionInformation
,
660 ProcessForegroundInformation
,
661 ProcessWow64Information
,
662 ProcessImageFileName
,
663 ProcessLUIDDeviceMapsEnabled
,
664 ProcessBreakOnTermination
,
665 ProcessDebugObjectHandle
,
667 ProcessHandleTracing
,
674 typedef enum _THREADINFOCLASS
676 ThreadBasicInformation
,
681 ThreadImpersonationToken
,
682 ThreadDescriptorTableEntry
,
683 ThreadEnableAlignmentFaultFixup
,
684 ThreadEventPair_Reusable
,
685 ThreadQuerySetWin32StartAddress
,
687 ThreadPerformanceCount
,
689 ThreadIdealProcessor
,
691 ThreadSetTlsArrayAddress
,
693 ThreadHideFromDebugger
,
694 ThreadBreakOnTermination
,
698 /* TYPES *********************************************************************/
700 /* Basic Types that aren't defined in User-Mode Headers */
701 typedef CONST
int CINT
;
702 typedef CONST
char *PCSZ
;
703 typedef short CSHORT
;
704 typedef CSHORT
*PCSHORT
;
705 typedef LARGE_INTEGER PHYSICAL_ADDRESS
, *PPHYSICAL_ADDRESS
;
707 /* Kernel Types used by Native APIs */
708 typedef LONG KPRIORITY
;
709 typedef LONG NTSTATUS
, *PNTSTATUS
;
710 typedef UCHAR KIRQL
, *PKIRQL
;
711 typedef ULONG KAFFINITY
, *PKAFFINITY
;
712 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
713 typedef struct _PEB
*PPEB
;
714 typedef ULONG KPROCESSOR_MODE
;
715 typedef struct _OBJECT_TYPE
*POBJECT_TYPE
;
717 struct _CSR_API_MESSAGE
;
718 typedef ULONG EXECUTION_STATE
;
721 #if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H)
722 typedef struct _UNICODE_STRING
725 USHORT MaximumLength
;
727 } UNICODE_STRING
, *PUNICODE_STRING
;
728 typedef const UNICODE_STRING
* PCUNICODE_STRING
;
730 typedef struct _STRING
733 USHORT MaximumLength
;
737 typedef struct _OBJECT_ATTRIBUTES
740 HANDLE RootDirectory
;
741 PUNICODE_STRING ObjectName
;
743 PVOID SecurityDescriptor
;
744 PVOID SecurityQualityOfService
;
745 } OBJECT_ATTRIBUTES
, *POBJECT_ATTRIBUTES
;
748 typedef STRING ANSI_STRING
;
749 typedef PSTRING PANSI_STRING
;
750 typedef STRING OEM_STRING
;
751 typedef PSTRING POEM_STRING
;
753 typedef struct _IO_STATUS_BLOCK
760 ULONG_PTR Information
;
761 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
764 (NTAPI
*PIO_APC_ROUTINE
)(
766 IN PIO_STATUS_BLOCK IoStatusBlock
,
770 (NTAPI
*PKNORMAL_ROUTINE
)(
771 IN PVOID NormalContext
,
772 IN PVOID SystemArgument1
,
773 IN PVOID SystemArgument2
);
776 (NTAPI
*PTIMER_APC_ROUTINE
)(
777 IN PVOID TimerContext
,
778 IN ULONG TimerLowValue
,
779 IN LONG TimerHighValue
);
781 /* Kernel Types which are returned or used by Native API */
782 typedef struct _OBJECT_NAME_INFORMATION
785 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
787 typedef struct _IO_ERROR_LOG_PACKET
789 UCHAR MajorFunctionCode
;
792 USHORT NumberOfStrings
;
794 USHORT EventCategory
;
796 ULONG UniqueErrorValue
;
797 NTSTATUS FinalStatus
;
798 ULONG SequenceNumber
;
800 LARGE_INTEGER DeviceOffset
;
802 }IO_ERROR_LOG_PACKET
, *PIO_ERROR_LOG_PACKET
;
804 typedef struct _IO_ERROR_LOG_MESSAGE
808 USHORT DriverNameLength
;
809 LARGE_INTEGER TimeStamp
;
810 ULONG DriverNameOffset
;
811 IO_ERROR_LOG_PACKET EntryData
;
812 } IO_ERROR_LOG_MESSAGE
, *PIO_ERROR_LOG_MESSAGE
;
814 typedef struct _CLIENT_ID
816 HANDLE UniqueProcess
;
818 } CLIENT_ID
, *PCLIENT_ID
;
820 typedef struct _KSYSTEM_TIME
825 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
827 typedef struct _TIME_FIELDS
837 } TIME_FIELDS
, *PTIME_FIELDS
;
839 typedef struct _VM_COUNTERS
841 SIZE_T PeakVirtualSize
;
843 ULONG PageFaultCount
;
844 SIZE_T PeakWorkingSetSize
;
845 SIZE_T WorkingSetSize
;
846 SIZE_T QuotaPeakPagedPoolUsage
;
847 SIZE_T QuotaPagedPoolUsage
;
848 SIZE_T QuotaPeakNonPagedPoolUsage
;
849 SIZE_T QuotaNonPagedPoolUsage
;
850 SIZE_T PagefileUsage
;
851 SIZE_T PeakPagefileUsage
;
852 } VM_COUNTERS
, *PVM_COUNTERS
;
854 typedef struct _VM_COUNTERS_EX
856 SIZE_T PeakVirtualSize
;
858 ULONG PageFaultCount
;
859 SIZE_T PeakWorkingSetSize
;
860 SIZE_T WorkingSetSize
;
861 SIZE_T QuotaPeakPagedPoolUsage
;
862 SIZE_T QuotaPagedPoolUsage
;
863 SIZE_T QuotaPeakNonPagedPoolUsage
;
864 SIZE_T QuotaNonPagedPoolUsage
;
865 SIZE_T PagefileUsage
;
866 SIZE_T PeakPagefileUsage
;
868 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
870 /**** Information Types ****/
877 typedef struct _KEY_WRITE_TIME_INFORMATION
879 LARGE_INTEGER LastWriteTime
;
880 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
883 typedef struct _KEY_USER_FLAGS_INFORMATION
886 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
888 typedef struct _KEY_FULL_INFORMATION
890 LARGE_INTEGER LastWriteTime
;
898 ULONG MaxValueNameLen
;
899 ULONG MaxValueDataLen
;
901 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
903 typedef struct _KEY_NODE_INFORMATION
905 LARGE_INTEGER LastWriteTime
;
911 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
918 typedef struct _FILE_BASIC_INFORMATION
920 LARGE_INTEGER CreationTime
;
921 LARGE_INTEGER LastAccessTime
;
922 LARGE_INTEGER LastWriteTime
;
923 LARGE_INTEGER ChangeTime
;
924 ULONG FileAttributes
;
925 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
928 typedef struct _FILE_STANDARD_INFORMATION
930 LARGE_INTEGER AllocationSize
;
931 LARGE_INTEGER EndOfFile
;
933 BOOLEAN DeletePending
;
935 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
937 typedef struct _FILE_NETWORK_OPEN_INFORMATION
939 LARGE_INTEGER CreationTime
;
940 LARGE_INTEGER LastAccessTime
;
941 LARGE_INTEGER LastWriteTime
;
942 LARGE_INTEGER ChangeTime
;
943 LARGE_INTEGER AllocationSize
;
944 LARGE_INTEGER EndOfFile
;
945 ULONG FileAttributes
;
946 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
948 typedef struct _FILE_EA_INFORMATION
951 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
953 typedef struct _FILE_COMPRESSION_INFORMATION
955 LARGE_INTEGER CompressedFileSize
;
956 USHORT CompressionFormat
;
957 UCHAR CompressionUnitShift
;
961 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
963 typedef struct _FILE_POSITION_INFORMATION
965 LARGE_INTEGER CurrentByteOffset
;
966 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
968 typedef struct _FILE_DISPOSITION_INFORMATION
971 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
973 typedef struct _FILE_FULL_EA_INFORMATION
975 ULONG NextEntryOffset
;
978 USHORT EaValueLength
;
980 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
982 typedef struct _FILE_QUOTA_INFORMATION
984 ULONG NextEntryOffset
;
986 LARGE_INTEGER ChangeTime
;
987 LARGE_INTEGER QuotaUsed
;
988 LARGE_INTEGER QuotaThreshold
;
989 LARGE_INTEGER QuotaLimit
;
991 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
993 typedef struct _FILE_INTERNAL_INFORMATION
995 LARGE_INTEGER IndexNumber
;
996 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
998 typedef struct _FILE_RENAME_INFORMATION
1000 BOOLEAN ReplaceIfExists
;
1001 HANDLE RootDirectory
;
1002 ULONG FileNameLength
;
1004 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
1006 typedef struct _FILE_PIPE_INFORMATION
1009 ULONG CompletionMode
;
1010 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
1012 typedef struct _FILE_PIPE_LOCAL_INFORMATION
1014 ULONG NamedPipeType
;
1015 ULONG NamedPipeConfiguration
;
1016 ULONG MaximumInstances
;
1017 ULONG CurrentInstances
;
1019 ULONG ReadDataAvailable
;
1020 ULONG OutboundQuota
;
1021 ULONG WriteQuotaAvailable
;
1022 ULONG NamedPipeState
;
1024 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
1026 typedef struct _FILE_PIPE_REMOTE_INFORMATION
1028 LARGE_INTEGER CollectDataTime
;
1029 ULONG MaximumCollectionCount
;
1030 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
1032 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
1034 ULONG MaximumMessageSize
;
1035 ULONG MailslotQuota
;
1036 ULONG NextMessageSize
;
1037 ULONG MessagesAvailable
;
1038 LARGE_INTEGER ReadTimeout
;
1039 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
1041 typedef struct _FILE_MAILSLOT_SET_INFORMATION
1043 LARGE_INTEGER ReadTimeout
;
1044 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
1046 typedef struct _FILE_BOTH_DIR_INFORMATION
1048 ULONG NextEntryOffset
;
1050 LARGE_INTEGER CreationTime
;
1051 LARGE_INTEGER LastAccessTime
;
1052 LARGE_INTEGER LastWriteTime
;
1053 LARGE_INTEGER ChangeTime
;
1054 LARGE_INTEGER EndOfFile
;
1055 LARGE_INTEGER AllocationSize
;
1056 ULONG FileAttributes
;
1057 ULONG FileNameLength
;
1059 CCHAR ShortNameLength
;
1060 WCHAR ShortName
[12];
1062 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
1064 typedef struct _FILE_COMPLETION_INFORMATION
1068 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
1070 typedef struct _FILE_LINK_INFORMATION
1072 BOOLEAN ReplaceIfExists
;
1073 HANDLE RootDirectory
;
1074 ULONG FileNameLength
;
1076 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
1078 typedef struct _FILE_NAME_INFORMATION
1080 ULONG FileNameLength
;
1082 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1084 typedef struct _FILE_ALLOCATION_INFORMATION
1086 LARGE_INTEGER AllocationSize
;
1087 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
1089 typedef struct _FILE_END_OF_FILE_INFORMATION
1091 LARGE_INTEGER EndOfFile
;
1092 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1094 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
1096 LARGE_INTEGER ValidDataLength
;
1097 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1102 typedef struct _FILE_FS_DEVICE_INFORMATION
1104 DEVICE_TYPE DeviceType
;
1105 ULONG Characteristics
;
1106 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1108 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
1110 ULONG FileSystemAttributes
;
1111 ULONG MaximumComponentNameLength
;
1112 ULONG FileSystemNameLength
;
1113 WCHAR FileSystemName
[1];
1114 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
1116 typedef struct _FILE_FS_SIZE_INFORMATION
1118 LARGE_INTEGER TotalAllocationUnits
;
1119 LARGE_INTEGER AvailableAllocationUnits
;
1120 ULONG SectorsPerAllocationUnit
;
1121 ULONG BytesPerSector
;
1122 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1124 typedef struct _FILE_FS_LABEL_INFORMATION
1126 ULONG VolumeLabelLength
;
1127 WCHAR VolumeLabel
[1];
1128 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1130 typedef struct _FILE_FS_VOLUME_INFORMATION
1132 LARGE_INTEGER VolumeCreationTime
;
1133 ULONG VolumeSerialNumber
;
1134 ULONG VolumeLabelLength
;
1135 BOOLEAN SupportsObjects
;
1136 WCHAR VolumeLabel
[1];
1137 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1140 * Registry Key Value
1144 typedef struct _KEY_VALUE_ENTRY
1146 PUNICODE_STRING ValueName
;
1150 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
1153 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
1159 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
1162 typedef struct _KEY_VALUE_BASIC_INFORMATION
1168 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
1171 typedef struct _KEY_VALUE_FULL_INFORMATION
1179 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
1186 typedef struct _KEY_BASIC_INFORMATION
1188 LARGE_INTEGER LastWriteTime
;
1192 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
1194 /* File Pipe Structures for the FSCTLs */
1195 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
1197 LARGE_INTEGER Timeout
;
1199 BOOLEAN TimeoutSpecified
;
1201 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
1203 typedef struct _FILE_PIPE_PEEK_BUFFER
1205 ULONG NamedPipeState
;
1206 ULONG ReadDataAvailable
;
1207 ULONG NumberOfMessages
;
1208 ULONG MessageLength
;
1210 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
1212 /* The Kerner/User Shared Data Structure */
1213 typedef struct _KUSER_SHARED_DATA
1215 ULONG TickCountLowDeprecated
;
1216 ULONG TickCountMultiplier
;
1217 volatile KSYSTEM_TIME InterruptTime
;
1218 volatile KSYSTEM_TIME SystemTime
;
1219 volatile KSYSTEM_TIME TimeZoneBias
;
1220 USHORT ImageNumberLow
;
1221 USHORT ImageNumberHigh
;
1222 WCHAR NtSystemRoot
[260];
1223 ULONG MaxStackTraceDepth
;
1224 ULONG CryptoExponent
;
1226 ULONG LargePageMinimum
;
1228 NT_PRODUCT_TYPE NtProductType
;
1229 BOOLEAN ProductTypeIsValid
;
1230 ULONG NtMajorVersion
;
1231 ULONG NtMinorVersion
;
1232 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1235 volatile ULONG TimeSlip
;
1236 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1237 LARGE_INTEGER SystemExpirationDate
;
1239 BOOLEAN KdDebuggerEnabled
;
1240 volatile ULONG ActiveConsoleId
;
1241 volatile ULONG DismountCount
;
1242 ULONG ComPlusPackage
;
1243 ULONG LastSystemRITEventTickCount
;
1244 ULONG NumberOfPhysicalPages
;
1245 BOOLEAN SafeBootMode
;
1248 ULONGLONG SystemCall
[4];
1250 volatile KSYSTEM_TIME TickCount
;
1251 volatile ULONG64 TickCountQuad
;
1253 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1255 /* Run-Time Library (RTL) Types */
1256 typedef struct _RTL_BITMAP
1260 } RTL_BITMAP
, *PRTL_BITMAP
;
1262 typedef struct _RTL_BITMAP_RUN
1264 ULONG StartingIndex
;
1266 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
1268 typedef struct _COMPRESSED_DATA_INFO
1270 USHORT CompressionFormatAndEngine
;
1271 UCHAR CompressionUnitShift
;
1275 USHORT NumberOfChunks
;
1276 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
1277 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
1279 typedef struct _GENERATE_NAME_CONTEXT
1282 BOOLEAN CheckSumInserted
;
1284 WCHAR NameBuffer
[8];
1285 ULONG ExtensionLength
;
1286 WCHAR ExtensionBuffer
[4];
1287 ULONG LastIndexValue
;
1288 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
1290 typedef struct _RTL_SPLAY_LINKS
1292 struct _RTL_SPLAY_LINKS
*Parent
;
1293 struct _RTL_SPLAY_LINKS
*LeftChild
;
1294 struct _RTL_SPLAY_LINKS
*RightChild
;
1295 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
1297 struct _RTL_AVL_TABLE
;
1298 struct _RTL_GENERIC_TABLE
;
1301 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
)(
1302 struct _RTL_AVL_TABLE
*Table
,
1307 typedef RTL_GENERIC_COMPARE_RESULTS
1308 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
1309 struct _RTL_AVL_TABLE
*Table
,
1314 typedef RTL_GENERIC_COMPARE_RESULTS
1315 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
1316 struct _RTL_GENERIC_TABLE
*Table
,
1322 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
1323 struct _RTL_GENERIC_TABLE
*Table
,
1328 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
1329 struct _RTL_GENERIC_TABLE
*Table
,
1334 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
1335 struct _RTL_AVL_TABLE
*Table
,
1340 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
1341 struct _RTL_AVL_TABLE
*Table
,
1345 typedef struct _RTL_GENERIC_TABLE
1347 PRTL_SPLAY_LINKS TableRoot
;
1348 LIST_ENTRY InsertOrderList
;
1349 PLIST_ENTRY OrderedPointer
;
1350 ULONG WhichOrderedElement
;
1351 ULONG NumberGenericTableElements
;
1352 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
1353 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
1354 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
1356 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
1358 typedef struct _RTL_BALANCED_LINKS
1360 struct _RTL_BALANCED_LINKS
*Parent
;
1361 struct _RTL_BALANCED_LINKS
*LeftChild
;
1362 struct _RTL_BALANCED_LINKS
*RightChild
;
1365 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
1367 typedef struct _RTL_AVL_TABLE
1369 RTL_BALANCED_LINKS BalancedRoot
;
1370 PVOID OrderedPointer
;
1371 ULONG WhichOrderedElement
;
1372 ULONG NumberGenericTableElements
;
1374 PRTL_BALANCED_LINKS RestartKey
;
1376 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
1377 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
1378 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
1380 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
1383 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
1387 IN ULONG ValueLength
,
1389 IN PVOID EntryContext
1392 typedef struct _RTL_QUERY_REGISTRY_TABLE
1394 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
1400 ULONG DefaultLength
;
1401 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
1403 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
1405 CSHORT NodeTypeCode
;
1407 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
1408 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
1409 RTL_SPLAY_LINKS Links
;
1410 PUNICODE_STRING Prefix
;
1411 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
1413 typedef struct _UNICODE_PREFIX_TABLE
1415 CSHORT NodeTypeCode
;
1417 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
1418 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
1419 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
1422 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
)(
1424 IN OUT PVOID
*CommitAddress
,
1425 IN OUT PSIZE_T CommitSize
1428 typedef struct _RTL_HEAP_PARAMETERS
1431 SIZE_T SegmentReserve
;
1432 SIZE_T SegmentCommit
;
1433 SIZE_T DeCommitFreeBlockThreshold
;
1434 SIZE_T DeCommitTotalFreeThreshold
;
1435 SIZE_T MaximumAllocationSize
;
1436 SIZE_T VirtualMemoryThreshold
;
1437 SIZE_T InitialCommit
;
1438 SIZE_T InitialReserve
;
1439 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
1441 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
1443 typedef void *FAST_MUTEX
;
1444 typedef void *PHANDLE_TABLE
;
1446 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW
;
1447 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW
;
1448 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW
;
1449 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW
;