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
187 /* ENUMERATIONS **************************************************************/
189 /* Kernel Shared Data Values */
190 typedef enum _NT_PRODUCT_TYPE
195 } NT_PRODUCT_TYPE
, *PNT_PRODUCT_TYPE
;
197 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
202 } ALTERNATIVE_ARCHITECTURE_TYPE
;
204 /* Run-Time Library (RTL) Enumerations */
205 typedef enum _TABLE_SEARCH_RESULT
211 } TABLE_SEARCH_RESULT
;
213 typedef enum _RTL_GENERIC_COMPARE_RESULTS
218 } RTL_GENERIC_COMPARE_RESULTS
;
220 /* Kernel or Native Enumerations used by Native API */
221 typedef enum _SECTION_INHERIT
227 typedef enum _POOL_TYPE
231 NonPagedPoolMustSucceed
,
233 NonPagedPoolCacheAligned
,
234 PagedPoolCacheAligned
,
235 NonPagedPoolCacheAlignedMustS
,
237 NonPagedPoolSession
= 32,
239 NonPagedPoolMustSucceedSession
,
240 DontUseThisTypeSession
,
241 NonPagedPoolCacheAlignedSession
,
242 PagedPoolCacheAlignedSession
,
243 NonPagedPoolCacheAlignedMustSSession
246 typedef enum _EVENT_TYPE
252 typedef enum _TIMER_TYPE
258 typedef enum _WAIT_TYPE
264 typedef enum _INTERFACE_TYPE
266 InterfaceTypeUndefined
= -1,
284 }INTERFACE_TYPE
, *PINTERFACE_TYPE
;
286 typedef enum _PNP_VETO_TYPE
289 PNP_VetoLegacyDevice
,
290 PNP_VetoPendingClose
,
292 PNP_VetoWindowsService
,
293 PNP_VetoOutstandingOpen
,
296 PNP_VetoIllegalDeviceRequest
,
297 PNP_VetoInsufficientPower
,
298 PNP_VetoNonDisableable
,
299 PNP_VetoLegacyDriver
,
300 PNP_VetoInsufficientRights
301 } PNP_VETO_TYPE
, *PPNP_VETO_TYPE
;
310 typedef enum _KWAIT_REASON
349 typedef enum _KPROFILE_SOURCE
352 ProfileAlignmentFixup
,
355 ProfileLoadInstructions
,
356 ProfilePipelineFrozen
,
357 ProfileBranchInstructions
,
358 ProfileTotalNonissues
,
362 ProfileBranchMispredictions
,
363 ProfileStoreInstructions
,
364 ProfileFpInstructions
,
365 ProfileIntegerInstructions
,
369 ProfileSpecialInstructions
,
372 ProfileDcacheAccesses
,
373 ProfileMemoryBarrierCycles
,
374 ProfileLoadLinkedIssues
,
378 /**** Information Classes ****/
383 typedef enum _FILE_INFORMATION_CLASS
385 FileDirectoryInformation
= 1,
386 FileFullDirectoryInformation
,
387 FileBothDirectoryInformation
,
388 FileBasicInformation
,
389 FileStandardInformation
,
390 FileInternalInformation
,
392 FileAccessInformation
,
394 FileRenameInformation
,
396 FileNamesInformation
,
397 FileDispositionInformation
,
398 FilePositionInformation
,
399 FileFullEaInformation
,
401 FileAlignmentInformation
,
403 FileAllocationInformation
,
404 FileEndOfFileInformation
,
405 FileAlternateNameInformation
,
406 FileStreamInformation
,
408 FilePipeLocalInformation
,
409 FilePipeRemoteInformation
,
410 FileMailslotQueryInformation
,
411 FileMailslotSetInformation
,
412 FileCompressionInformation
,
413 FileObjectIdInformation
,
414 FileCompletionInformation
,
415 FileMoveClusterInformation
,
416 FileQuotaInformation
,
417 FileReparsePointInformation
,
418 FileNetworkOpenInformation
,
419 FileAttributeTagInformation
,
420 FileTrackingInformation
,
421 FileIdBothDirectoryInformation
,
422 FileIdFullDirectoryInformation
,
423 FileValidDataLengthInformation
,
424 FileShortNameInformation
,
425 FileMaximumInformation
426 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
431 typedef enum _FSINFOCLASS
433 FileFsVolumeInformation
= 1,
434 FileFsLabelInformation
,
435 FileFsSizeInformation
,
436 FileFsDeviceInformation
,
437 FileFsAttributeInformation
,
438 FileFsControlInformation
,
439 FileFsFullSizeInformation
,
440 FileFsObjectIdInformation
,
441 FileFsDriverPathInformation
,
442 FileFsMaximumInformation
443 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
448 typedef enum _KEY_INFORMATION_CLASS
454 KeyCachedInformation
,
456 } KEY_INFORMATION_CLASS
;
461 typedef enum _KEY_VALUE_INFORMATION_CLASS
463 KeyValueBasicInformation
,
464 KeyValueFullInformation
,
465 KeyValuePartialInformation
,
466 KeyValueFullInformationAlign64
,
467 KeyValuePartialInformationAlign64
468 } KEY_VALUE_INFORMATION_CLASS
;
473 typedef enum _KEY_SET_INFORMATION_CLASS
475 KeyWriteTimeInformation
,
476 KeyUserFlagsInformation
,
478 } KEY_SET_INFORMATION_CLASS
;
483 typedef enum _PROCESSINFOCLASS
485 ProcessBasicInformation
,
491 ProcessRaisePriority
,
493 ProcessExceptionPort
,
495 ProcessLdtInformation
,
497 ProcessDefaultHardErrorMode
,
498 ProcessIoPortHandlers
,
499 ProcessPooledUsageAndLimits
,
500 ProcessWorkingSetWatch
,
502 ProcessEnableAlignmentFaultFixup
,
503 ProcessPriorityClass
,
504 ProcessWx86Information
,
507 ProcessPriorityBoost
,
509 ProcessSessionInformation
,
510 ProcessForegroundInformation
,
511 ProcessWow64Information
,
512 ProcessImageFileName
,
513 ProcessLUIDDeviceMapsEnabled
,
514 ProcessBreakOnTermination
,
515 ProcessDebugObjectHandle
,
517 ProcessHandleTracing
,
524 typedef enum _THREADINFOCLASS
526 ThreadBasicInformation
,
531 ThreadImpersonationToken
,
532 ThreadDescriptorTableEntry
,
533 ThreadEnableAlignmentFaultFixup
,
534 ThreadEventPair_Reusable
,
535 ThreadQuerySetWin32StartAddress
,
537 ThreadPerformanceCount
,
539 ThreadIdealProcessor
,
541 ThreadSetTlsArrayAddress
,
543 ThreadHideFromDebugger
,
544 ThreadBreakOnTermination
,
548 /* TYPES *********************************************************************/
550 /* Basic Types that aren't defined in User-Mode Headers */
551 typedef CONST
int CINT
;
552 typedef CONST
char *PCSZ
;
553 typedef short CSHORT
;
554 typedef CSHORT
*PCSHORT
;
555 typedef LARGE_INTEGER PHYSICAL_ADDRESS
, *PPHYSICAL_ADDRESS
;
557 /* Kernel Types used by Native APIs */
558 typedef LONG KPRIORITY
;
559 typedef LONG NTSTATUS
, *PNTSTATUS
;
560 typedef UCHAR KIRQL
, *PKIRQL
;
561 typedef ULONG KAFFINITY
, *PKAFFINITY
;
562 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
563 typedef struct _PEB
*PPEB
;
564 typedef ULONG KPROCESSOR_MODE
;
565 typedef struct _OBJECT_TYPE
*POBJECT_TYPE
;
567 struct _EVENT_TRACE_HEADER
; /* <--- We might want to declare this one */
568 typedef ULONG EXECUTION_STATE
;
571 #if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H)
572 typedef struct _UNICODE_STRING
575 USHORT MaximumLength
;
577 } UNICODE_STRING
, *PUNICODE_STRING
;
578 typedef const UNICODE_STRING
* PCUNICODE_STRING
;
580 typedef struct _STRING
583 USHORT MaximumLength
;
587 typedef struct _OBJECT_ATTRIBUTES
590 HANDLE RootDirectory
;
591 PUNICODE_STRING ObjectName
;
593 PVOID SecurityDescriptor
;
594 PVOID SecurityQualityOfService
;
595 } OBJECT_ATTRIBUTES
, *POBJECT_ATTRIBUTES
;
598 typedef STRING ANSI_STRING
;
599 typedef PSTRING PANSI_STRING
;
600 typedef STRING OEM_STRING
;
601 typedef PSTRING POEM_STRING
;
603 typedef struct _IO_STATUS_BLOCK
610 ULONG_PTR Information
;
611 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
616 IN PIO_STATUS_BLOCK IoStatusBlock
,
621 IN PVOID NormalContext
,
622 IN PVOID SystemArgument1
,
623 IN PVOID SystemArgument2
);
626 (*PTIMER_APC_ROUTINE
)(
627 IN PVOID TimerContext
,
628 IN ULONG TimerLowValue
,
629 IN LONG TimerHighValue
);
631 /* Kernel Types which are returned or used by Native API */
632 typedef struct _OBJECT_NAME_INFORMATION
635 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
637 typedef struct _CLIENT_ID
639 HANDLE UniqueProcess
;
641 } CLIENT_ID
, *PCLIENT_ID
;
643 typedef struct _KSYSTEM_TIME
648 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
650 typedef struct _TIME_FIELDS
660 } TIME_FIELDS
, *PTIME_FIELDS
;
662 typedef struct _VM_COUNTERS
664 SIZE_T PeakVirtualSize
;
666 ULONG PageFaultCount
;
667 SIZE_T PeakWorkingSetSize
;
668 SIZE_T WorkingSetSize
;
669 SIZE_T QuotaPeakPagedPoolUsage
;
670 SIZE_T QuotaPagedPoolUsage
;
671 SIZE_T QuotaPeakNonPagedPoolUsage
;
672 SIZE_T QuotaNonPagedPoolUsage
;
673 SIZE_T PagefileUsage
;
674 SIZE_T PeakPagefileUsage
;
675 } VM_COUNTERS
, *PVM_COUNTERS
;
677 typedef struct _VM_COUNTERS_EX
679 SIZE_T PeakVirtualSize
;
681 ULONG PageFaultCount
;
682 SIZE_T PeakWorkingSetSize
;
683 SIZE_T WorkingSetSize
;
684 SIZE_T QuotaPeakPagedPoolUsage
;
685 SIZE_T QuotaPagedPoolUsage
;
686 SIZE_T QuotaPeakNonPagedPoolUsage
;
687 SIZE_T QuotaNonPagedPoolUsage
;
688 SIZE_T PagefileUsage
;
689 SIZE_T PeakPagefileUsage
;
691 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
693 /**** Information Types ****/
700 typedef struct _KEY_WRITE_TIME_INFORMATION
702 LARGE_INTEGER LastWriteTime
;
703 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
706 typedef struct _KEY_USER_FLAGS_INFORMATION
709 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
711 typedef struct _KEY_FULL_INFORMATION
713 LARGE_INTEGER LastWriteTime
;
721 ULONG MaxValueNameLen
;
722 ULONG MaxValueDataLen
;
724 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
726 typedef struct _KEY_NODE_INFORMATION
728 LARGE_INTEGER LastWriteTime
;
734 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
741 typedef struct _FILE_BASIC_INFORMATION
743 LARGE_INTEGER CreationTime
;
744 LARGE_INTEGER LastAccessTime
;
745 LARGE_INTEGER LastWriteTime
;
746 LARGE_INTEGER ChangeTime
;
747 ULONG FileAttributes
;
748 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
751 typedef struct _FILE_STANDARD_INFORMATION
753 LARGE_INTEGER AllocationSize
;
754 LARGE_INTEGER EndOfFile
;
756 BOOLEAN DeletePending
;
758 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
760 typedef struct _FILE_NETWORK_OPEN_INFORMATION
762 LARGE_INTEGER CreationTime
;
763 LARGE_INTEGER LastAccessTime
;
764 LARGE_INTEGER LastWriteTime
;
765 LARGE_INTEGER ChangeTime
;
766 LARGE_INTEGER AllocationSize
;
767 LARGE_INTEGER EndOfFile
;
768 ULONG FileAttributes
;
769 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
771 typedef struct _FILE_ZERO_DATA_INFORMATION
773 LARGE_INTEGER FileOffset
;
774 LARGE_INTEGER BeyondFinalZero
;
775 } FILE_ZERO_DATA_INFORMATION
, *PFILE_ZERO_DATA_INFORMATION
;
777 typedef struct _FILE_EA_INFORMATION
780 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
782 typedef struct _FILE_COMPRESSION_INFORMATION
784 LARGE_INTEGER CompressedFileSize
;
785 USHORT CompressionFormat
;
786 UCHAR CompressionUnitShift
;
790 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
792 typedef struct _FILE_POSITION_INFORMATION
794 LARGE_INTEGER CurrentByteOffset
;
795 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
797 typedef struct _FILE_DISPOSITION_INFORMATION
800 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
802 typedef struct FILE_ALLOCATED_RANGE_BUFFER
804 LARGE_INTEGER FileOffset
;
805 LARGE_INTEGER Length
;
806 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
808 typedef struct _FILE_QUOTA_INFORMATION
810 ULONG NextEntryOffset
;
812 LARGE_INTEGER ChangeTime
;
813 LARGE_INTEGER QuotaUsed
;
814 LARGE_INTEGER QuotaThreshold
;
815 LARGE_INTEGER QuotaLimit
;
817 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
819 typedef struct _FILE_INTERNAL_INFORMATION
821 LARGE_INTEGER IndexNumber
;
822 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
824 typedef struct _FILE_RENAME_INFORMATION
826 BOOLEAN ReplaceIfExists
;
827 HANDLE RootDirectory
;
828 ULONG FileNameLength
;
830 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
832 typedef struct _FILE_PIPE_INFORMATION
835 ULONG CompletionMode
;
836 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
838 typedef struct _FILE_PIPE_LOCAL_INFORMATION
841 ULONG NamedPipeConfiguration
;
842 ULONG MaximumInstances
;
843 ULONG CurrentInstances
;
845 ULONG ReadDataAvailable
;
847 ULONG WriteQuotaAvailable
;
848 ULONG NamedPipeState
;
850 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
852 typedef struct _FILE_PIPE_REMOTE_INFORMATION
854 LARGE_INTEGER CollectDataTime
;
855 ULONG MaximumCollectionCount
;
856 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
858 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
860 ULONG MaximumMessageSize
;
862 ULONG NextMessageSize
;
863 ULONG MessagesAvailable
;
864 LARGE_INTEGER ReadTimeout
;
865 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
867 typedef struct _FILE_MAILSLOT_SET_INFORMATION
869 LARGE_INTEGER ReadTimeout
;
870 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
872 typedef struct _FILE_BOTH_DIR_INFORMATION
874 ULONG NextEntryOffset
;
876 LARGE_INTEGER CreationTime
;
877 LARGE_INTEGER LastAccessTime
;
878 LARGE_INTEGER LastWriteTime
;
879 LARGE_INTEGER ChangeTime
;
880 LARGE_INTEGER EndOfFile
;
881 LARGE_INTEGER AllocationSize
;
882 ULONG FileAttributes
;
883 ULONG FileNameLength
;
885 CCHAR ShortNameLength
;
888 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
890 typedef struct _FILE_COMPLETION_INFORMATION
894 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
896 typedef struct _FILE_LINK_INFORMATION
898 BOOLEAN ReplaceIfExists
;
899 HANDLE RootDirectory
;
900 ULONG FileNameLength
;
902 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
904 typedef struct _FILE_NAME_INFORMATION
906 ULONG FileNameLength
;
908 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
910 typedef struct _FILE_ALLOCATION_INFORMATION
912 LARGE_INTEGER AllocationSize
;
913 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
915 typedef struct _FILE_END_OF_FILE_INFORMATION
917 LARGE_INTEGER EndOfFile
;
918 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
920 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
922 LARGE_INTEGER ValidDataLength
;
923 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
928 typedef struct _FILE_FS_DEVICE_INFORMATION
930 DEVICE_TYPE DeviceType
;
931 ULONG Characteristics
;
932 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
934 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
936 ULONG FileSystemAttributes
;
937 ULONG MaximumComponentNameLength
;
938 ULONG FileSystemNameLength
;
939 WCHAR FileSystemName
[1];
940 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
942 typedef struct _FILE_FS_SIZE_INFORMATION
944 LARGE_INTEGER TotalAllocationUnits
;
945 LARGE_INTEGER AvailableAllocationUnits
;
946 ULONG SectorsPerAllocationUnit
;
947 ULONG BytesPerSector
;
948 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
950 typedef struct _FILE_FS_LABEL_INFORMATION
952 ULONG VolumeLabelLength
;
953 WCHAR VolumeLabel
[1];
954 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
956 typedef struct _FILE_FS_VOLUME_INFORMATION
958 LARGE_INTEGER VolumeCreationTime
;
959 ULONG VolumeSerialNumber
;
960 ULONG VolumeLabelLength
;
961 BOOLEAN SupportsObjects
;
962 WCHAR VolumeLabel
[1];
963 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
970 typedef struct _KEY_VALUE_ENTRY
972 PUNICODE_STRING ValueName
;
976 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
979 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
985 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
988 typedef struct _KEY_VALUE_BASIC_INFORMATION
994 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
997 typedef struct _KEY_VALUE_FULL_INFORMATION
1005 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
1012 typedef struct _KEY_BASIC_INFORMATION
1014 LARGE_INTEGER LastWriteTime
;
1018 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
1020 /* File Pipe Structures for the FSCTLs */
1021 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
1023 LARGE_INTEGER Timeout
;
1025 BOOLEAN TimeoutSpecified
;
1027 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
1029 typedef struct _FILE_PIPE_PEEK_BUFFER
1031 ULONG NamedPipeState
;
1032 ULONG ReadDataAvailable
;
1033 ULONG NumberOfMessages
;
1034 ULONG MessageLength
;
1036 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
1038 /* The Kerner/User Shared Data Structure */
1039 typedef struct _KUSER_SHARED_DATA
1041 ULONG TickCountLowDeprecated
;
1042 ULONG TickCountMultiplier
;
1043 volatile KSYSTEM_TIME InterruptTime
;
1044 volatile KSYSTEM_TIME SystemTime
;
1045 volatile KSYSTEM_TIME TimeZoneBias
;
1046 USHORT ImageNumberLow
;
1047 USHORT ImageNumberHigh
;
1048 WCHAR NtSystemRoot
[260];
1049 ULONG MaxStackTraceDepth
;
1050 ULONG CryptoExponent
;
1052 ULONG LargePageMinimum
;
1054 NT_PRODUCT_TYPE NtProductType
;
1055 BOOLEAN ProductTypeIsValid
;
1056 ULONG NtMajorVersion
;
1057 ULONG NtMinorVersion
;
1058 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1061 volatile ULONG TimeSlip
;
1062 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1063 LARGE_INTEGER SystemExpirationDate
;
1065 BOOLEAN KdDebuggerEnabled
;
1066 volatile ULONG ActiveConsoleId
;
1067 volatile ULONG DismountCount
;
1068 ULONG ComPlusPackage
;
1069 ULONG LastSystemRITEventTickCount
;
1070 ULONG NumberOfPhysicalPages
;
1071 BOOLEAN SafeBootMode
;
1074 ULONGLONG SystemCall
[4];
1076 volatile KSYSTEM_TIME TickCount
;
1077 volatile ULONG64 TickCountQuad
;
1079 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1081 /* Run-Time Library (RTL) Types */
1082 typedef struct _RTL_BITMAP
1086 } RTL_BITMAP
, *PRTL_BITMAP
;
1088 typedef struct _RTL_BITMAP_RUN
1090 ULONG StartingIndex
;
1092 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
1094 typedef struct _COMPRESSED_DATA_INFO
1096 USHORT CompressionFormatAndEngine
;
1097 UCHAR CompressionUnitShift
;
1101 USHORT NumberOfChunks
;
1102 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
1103 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
1105 typedef struct _GENERATE_NAME_CONTEXT
1108 BOOLEAN CheckSumInserted
;
1110 WCHAR NameBuffer
[8];
1111 ULONG ExtensionLength
;
1112 WCHAR ExtensionBuffer
[4];
1113 ULONG LastIndexValue
;
1114 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
1116 typedef struct _RTL_SPLAY_LINKS
1118 struct _RTL_SPLAY_LINKS
*Parent
;
1119 struct _RTL_SPLAY_LINKS
*LeftChild
;
1120 struct _RTL_SPLAY_LINKS
*RightChild
;
1121 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
1123 struct _RTL_AVL_TABLE
;
1124 struct _RTL_GENERIC_TABLE
;
1126 typedef NTSTATUS STDCALL
1127 (*PRTL_AVL_MATCH_FUNCTION
)(
1128 struct _RTL_AVL_TABLE
*Table
,
1133 typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
1134 (*PRTL_AVL_COMPARE_ROUTINE
) (
1135 struct _RTL_AVL_TABLE
*Table
,
1140 typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
1141 (*PRTL_GENERIC_COMPARE_ROUTINE
) (
1142 struct _RTL_GENERIC_TABLE
*Table
,
1147 typedef PVOID STDCALL
1148 (*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
1149 struct _RTL_GENERIC_TABLE
*Table
,
1153 typedef VOID STDCALL
1154 (*PRTL_GENERIC_FREE_ROUTINE
) (
1155 struct _RTL_GENERIC_TABLE
*Table
,
1159 typedef VOID STDCALL
1160 (*PRTL_AVL_ALLOCATE_ROUTINE
) (
1161 struct _RTL_AVL_TABLE
*Table
,
1165 typedef VOID STDCALL
1166 (*PRTL_AVL_FREE_ROUTINE
) (
1167 struct _RTL_AVL_TABLE
*Table
,
1171 typedef struct _RTL_GENERIC_TABLE
1173 PRTL_SPLAY_LINKS TableRoot
;
1174 LIST_ENTRY InsertOrderList
;
1175 PLIST_ENTRY OrderedPointer
;
1176 ULONG WhichOrderedElement
;
1177 ULONG NumberGenericTableElements
;
1178 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
1179 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
1180 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
1182 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
1184 typedef struct _RTL_BALANCED_LINKS
1186 struct _RTL_BALANCED_LINKS
*Parent
;
1187 struct _RTL_BALANCED_LINKS
*LeftChild
;
1188 struct _RTL_BALANCED_LINKS
*RightChild
;
1191 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
1193 typedef struct _RTL_AVL_TABLE
1195 RTL_BALANCED_LINKS BalancedRoot
;
1196 PVOID OrderedPointer
;
1197 ULONG WhichOrderedElement
;
1198 ULONG NumberGenericTableElements
;
1200 PRTL_BALANCED_LINKS RestartKey
;
1202 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
1203 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
1204 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
1206 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
1208 typedef NTSTATUS STDCALL
1209 (*PRTL_QUERY_REGISTRY_ROUTINE
)(
1213 IN ULONG ValueLength
,
1215 IN PVOID EntryContext
1218 typedef struct _RTL_QUERY_REGISTRY_TABLE
1220 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
1226 ULONG DefaultLength
;
1227 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
1229 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
1231 CSHORT NodeTypeCode
;
1233 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
1234 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
1235 RTL_SPLAY_LINKS Links
;
1236 PUNICODE_STRING Prefix
;
1237 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
1239 typedef struct _UNICODE_PREFIX_TABLE
1241 CSHORT NodeTypeCode
;
1243 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
1244 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
1245 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
1247 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW
;
1248 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW
;
1249 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW
;
1250 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW
;