-/*
- * PROJECT: ReactOS Native Headers
- * FILE: include/ndk/umtypes.h
- * PURPOSE: Definitions needed for Native Headers if target is not Kernel-Mode.
- * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
- * UPDATE HISTORY:
- * Created 06/10/04
- */
-
-#ifndef _UMTYPES_H
-#define _UMTYPES_H
-
-/* DEPENDENCIES **************************************************************/
-#include <winioctl.h>
-#include <ntstatus.h>
-#include <ddk/ntnls.h>
-#define STATIC static
-
-/* EXPORTED DATA *************************************************************/
-
-/* CONSTANTS *****************************************************************/
-
-/* NTAPI/NTOSAPI Define */
-#define NTAPI __stdcall
-#define NTOSAPI
-
-/* Definitions for Object Creation -- winternl.h */
-#define OBJ_INHERIT 2L
-#define OBJ_PERMANENT 16L
-#define OBJ_EXCLUSIVE 32L
-#define OBJ_CASE_INSENSITIVE 64L
-#define OBJ_OPENIF 128L
-#define OBJ_OPENLINK 256L
-#define OBJ_VALID_ATTRIBUTES 498L
-#define InitializeObjectAttributes(p,n,a,r,s) { \
- (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
- (p)->RootDirectory = (r); \
- (p)->Attributes = (a); \
- (p)->ObjectName = (n); \
- (p)->SecurityDescriptor = (s); \
- (p)->SecurityQualityOfService = NULL; \
-}
-
-/* Native API Return Value Macros */
-#define NT_SUCCESS(x) ((x)>=0)
-#define NT_WARNING(x) ((ULONG)(x)>>30==2)
-#define NT_ERROR(x) ((ULONG)(x)>>30==3)
-
-/* Object Access Rights FIXME: Some are in w32api's psdk..,is that normal ?*/
-#define DIRECTORY_QUERY (0x0001)
-#define DIRECTORY_TRAVERSE (0x0002)
-#define DIRECTORY_CREATE_OBJECT (0x0004)
-#define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
-#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
-#define EVENT_QUERY_STATE (0x0001)
-#define SEMAPHORE_QUERY_STATE (0x0001)
-#define SYMBOLIC_LINK_QUERY 0x0001
-#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
-
-/* I/O Control Codes for communicating with Mailslots */
-#define FSCTL_MAILSLOT_PEEK \
- CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
-
-/* I/O Control Codes for communicating with Pipes */
-#define FSCTL_PIPE_ASSIGN_EVENT \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
-
-#define FSCTL_PIPE_DISCONNECT \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
-
-#define FSCTL_PIPE_LISTEN \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
-
-#define FSCTL_PIPE_PEEK \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
-
-#define FSCTL_PIPE_QUERY_EVENT \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
-
-#define FSCTL_PIPE_TRANSCEIVE \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
-
-#define FSCTL_PIPE_WAIT \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
-
-#define FSCTL_PIPE_IMPERSONATE \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
-
-#define FSCTL_PIPE_SET_CLIENT_PROCESS \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
-
-#define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
-
-#define FSCTL_PIPE_INTERNAL_READ \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
-
-#define FSCTL_PIPE_INTERNAL_WRITE \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
-
-#define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
-
-#define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
- CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
-
-/* Macros for current Process/Thread built-in 'special' ID */
-#define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
-#define ZwCurrentProcess() NtCurrentProcess()
-#define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
-#define ZwCurrentThread() NtCurrentThread()
-
-/* Kernel Shared Data Constants */
-#define PROCESSOR_FEATURE_MAX 64
-#define SharedUserData ((KUSER_SHARED_DATA * CONST) USER_SHARED_DATA)
-
-/* Paging Values on x86 */
-#define PAGE_SIZE 0x1000
-#define PAGE_SHIFT 12L
-
-/* Run-Time Library (RTL) Registry Constants */
-#define RTL_REGISTRY_ABSOLUTE 0
-#define RTL_REGISTRY_SERVICES 1
-#define RTL_REGISTRY_CONTROL 2
-#define RTL_REGISTRY_WINDOWS_NT 3
-#define RTL_REGISTRY_DEVICEMAP 4
-#define RTL_REGISTRY_USER 5
-#define RTL_REGISTRY_MAXIMUM 6
-#define RTL_REGISTRY_HANDLE 0x40000000
-#define RTL_REGISTRY_OPTIONAL 0x80000000
-#define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
-#define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
-#define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
-#define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
-#define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
-#define RTL_QUERY_REGISTRY_DIRECT 0x00000020
-#define RTL_QUERY_REGISTRY_DELETE 0x00000040
-
-/* File Result Flags */
-#define FILE_SUPERSEDED 0x00000000
-#define FILE_OPENED 0x00000001
-#define FILE_CREATED 0x00000002
-#define FILE_OVERWRITTEN 0x00000003
-#define FILE_EXISTS 0x00000004
-#define FILE_DOES_NOT_EXIST 0x00000005
-
-/* Pipe Flags */
-#define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
-#define FILE_PIPE_MESSAGE_MODE 0x00000001
-#define FILE_PIPE_QUEUE_OPERATION 0x00000000
-#define FILE_PIPE_COMPLETE_OPERATION 0x00000001
-#define FILE_PIPE_INBOUND 0x00000000
-#define FILE_PIPE_OUTBOUND 0x00000001
-#define FILE_PIPE_FULL_DUPLEX 0x00000002
-#define FILE_PIPE_CLIENT_END 0x00000000
-#define FILE_PIPE_SERVER_END 0x00000001
-
-/* Device Charactertics */
-#define FILE_REMOVABLE_MEDIA 0x00000001
-#define FILE_REMOTE_DEVICE 0x00000010
-
-/* SID Constants */
-#define SID_MAX_SUB_AUTHORITIES 15
-
-/* Version Constants */
-#define VER_MINORVERSION 0x0000001
-#define VER_MAJORVERSION 0x0000002
-#define VER_BUILDNUMBER 0x0000004
-#define VER_PLATFORMID 0x0000008
-#define VER_SERVICEPACKMINOR 0x0000010
-#define VER_SERVICEPACKMAJOR 0x0000020
-#define VER_SUITENAME 0x0000040
-#define VER_PRODUCT_TYPE 0x0000080
-#define VER_PLATFORM_WIN32s 0
-#define VER_PLATFORM_WIN32_WINDOWS 1
-#define VER_PLATFORM_WIN32_NT 2
-#define VER_EQUAL 1
-#define VER_GREATER 2
-#define VER_GREATER_EQUAL 3
-#define VER_LESS 4
-#define VER_LESS_EQUAL 5
-#define VER_AND 6
-#define VER_OR 7
-#define VER_CONDITION_MASK 7
-#define VER_NUM_BITS_PER_CONDITION_MASK 3
-
-/* RTL String Hash Algorithms */
-#define HASH_STRING_ALGORITHM_DEFAULT 0
-#define HASH_STRING_ALGORITHM_X65599 1
-#define HASH_STRING_ALGORITHM_INVALID 0xffffffff
-
-/* List Macros */
-static __inline
-VOID
-InitializeListHead(
- IN PLIST_ENTRY ListHead)
-{
- ListHead->Flink = ListHead->Blink = ListHead;
-}
-
-static __inline
-VOID
-InsertHeadList(
- IN PLIST_ENTRY ListHead,
- IN PLIST_ENTRY Entry)
-{
- PLIST_ENTRY OldFlink;
- OldFlink = ListHead->Flink;
- Entry->Flink = OldFlink;
- Entry->Blink = ListHead;
- OldFlink->Blink = Entry;
- ListHead->Flink = Entry;
-}
-
-static __inline
-VOID
-InsertTailList(
- IN PLIST_ENTRY ListHead,
- IN PLIST_ENTRY Entry)
-{
- PLIST_ENTRY OldBlink;
- OldBlink = ListHead->Blink;
- Entry->Flink = ListHead;
- Entry->Blink = OldBlink;
- OldBlink->Flink = Entry;
- ListHead->Blink = Entry;
-}
-
-#define IsListEmpty(ListHead) \
- ((ListHead)->Flink == (ListHead))
-
-#define PopEntryList(ListHead) \
- (ListHead)->Next; \
- { \
- PSINGLE_LIST_ENTRY _FirstEntry; \
- _FirstEntry = (ListHead)->Next; \
- if (_FirstEntry != NULL) \
- (ListHead)->Next = _FirstEntry->Next; \
- }
-
-#define PushEntryList(_ListHead, _Entry) \
- (_Entry)->Next = (_ListHead)->Next; \
- (_ListHead)->Next = (_Entry); \
-
-static __inline
-BOOLEAN
-RemoveEntryList(
- IN PLIST_ENTRY Entry)
-{
- PLIST_ENTRY OldFlink;
- PLIST_ENTRY OldBlink;
-
- OldFlink = Entry->Flink;
- OldBlink = Entry->Blink;
- OldFlink->Blink = OldBlink;
- OldBlink->Flink = OldFlink;
- return (OldFlink == OldBlink);
-}
-
-static __inline
-PLIST_ENTRY
-RemoveHeadList(
- IN PLIST_ENTRY ListHead)
-{
- PLIST_ENTRY Flink;
- PLIST_ENTRY Entry;
-
- Entry = ListHead->Flink;
- Flink = Entry->Flink;
- ListHead->Flink = Flink;
- Flink->Blink = ListHead;
- return Entry;
-}
-
-static __inline
-PLIST_ENTRY
-RemoveTailList(
- IN PLIST_ENTRY ListHead)
-{
- PLIST_ENTRY Blink;
- PLIST_ENTRY Entry;
-
- Entry = ListHead->Blink;
- Blink = Entry->Blink;
- ListHead->Blink = Blink;
- Blink->Flink = ListHead;
- return Entry;
-}
-
-#define IsFirstEntry(ListHead, Entry) \
- ((ListHead)->Flink == Entry)
-
-#define IsLastEntry(ListHead, Entry) \
- ((ListHead)->Blink == Entry)
-
-/*
- * Constant String Macro
- */
-#define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
-{ \
- sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
- sizeof(__SOURCE_STRING__), \
- (__SOURCE_STRING__) \
-}
-
-/* ENUMERATIONS **************************************************************/
-
-/* Kernel Shared Data Values */
-typedef enum _NT_PRODUCT_TYPE
-{
- NtProductWinNt = 1,
- NtProductLanManNt,
- NtProductServer
-} NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
-
-typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
-{
- StandardDesign,
- NEC98x86,
- EndAlternatives
-} ALTERNATIVE_ARCHITECTURE_TYPE;
-
-/* Run-Time Library (RTL) Enumerations */
-typedef enum _TABLE_SEARCH_RESULT
-{
- TableEmptyTree,
- TableFoundNode,
- TableInsertAsLeft,
- TableInsertAsRight
-} TABLE_SEARCH_RESULT;
-
-typedef enum _RTL_GENERIC_COMPARE_RESULTS
-{
- GenericLessThan,
- GenericGreaterThan,
- GenericEqual
-} RTL_GENERIC_COMPARE_RESULTS;
-
-/* Kernel or Native Enumerations used by Native API */
-typedef enum _SECTION_INHERIT
-{
- ViewShare = 1,
- ViewUnmap = 2
-} SECTION_INHERIT;
-
-typedef enum _POOL_TYPE
-{
- NonPagedPool,
- PagedPool,
- NonPagedPoolMustSucceed,
- DontUseThisType,
- NonPagedPoolCacheAligned,
- PagedPoolCacheAligned,
- NonPagedPoolCacheAlignedMustS,
- MaxPoolType,
- NonPagedPoolSession = 32,
- PagedPoolSession,
- NonPagedPoolMustSucceedSession,
- DontUseThisTypeSession,
- NonPagedPoolCacheAlignedSession,
- PagedPoolCacheAlignedSession,
- NonPagedPoolCacheAlignedMustSSession
-} POOL_TYPE;
-
-typedef enum _EVENT_TYPE
-{
- NotificationEvent,
- SynchronizationEvent
-} EVENT_TYPE;
-
-typedef enum _TIMER_TYPE
-{
- NotificationTimer,
- SynchronizationTimer
-} TIMER_TYPE;
-
-typedef enum _WAIT_TYPE
-{
- WaitAll,
- WaitAny
-} WAIT_TYPE;
-
-typedef enum _INTERFACE_TYPE
-{
- InterfaceTypeUndefined = -1,
- Internal,
- Isa,
- Eisa,
- MicroChannel,
- TurboChannel,
- PCIBus,
- VMEBus,
- NuBus,
- PCMCIABus,
- CBus,
- MPIBus,
- MPSABus,
- ProcessorInternal,
- InternalPowerBus,
- PNPISABus,
- PNPBus,
- MaximumInterfaceType
-}INTERFACE_TYPE, *PINTERFACE_TYPE;
-
-typedef enum _MODE
-{
- KernelMode,
- UserMode,
- MaximumMode
-} MODE;
-
-typedef enum _KWAIT_REASON
-{
- Executive,
- FreePage,
- PageIn,
- PoolAllocation,
- DelayExecution,
- Suspended,
- UserRequest,
- WrExecutive,
- WrFreePage,
- WrPageIn,
- WrPoolAllocation,
- WrDelayExecution,
- WrSuspended,
- WrUserRequest,
- WrEventPair,
- WrQueue,
- WrLpcReceive,
- WrLpcReply,
- WrVirtualMemory,
- WrPageOut,
- WrRendezvous,
- Spare2,
- WrGuardedMutex,
- Spare4,
- Spare5,
- Spare6,
- WrKernel,
- WrResource,
- WrPushLock,
- WrMutex,
- WrQuantumEnd,
- WrDispatchInt,
- WrPreempted,
- WrYieldExecution,
- MaximumWaitReason
-} KWAIT_REASON;
-
-typedef enum _KPROFILE_SOURCE
-{
- ProfileTime,
- ProfileAlignmentFixup,
- ProfileTotalIssues,
- ProfilePipelineDry,
- ProfileLoadInstructions,
- ProfilePipelineFrozen,
- ProfileBranchInstructions,
- ProfileTotalNonissues,
- ProfileDcacheMisses,
- ProfileIcacheMisses,
- ProfileCacheMisses,
- ProfileBranchMispredictions,
- ProfileStoreInstructions,
- ProfileFpInstructions,
- ProfileIntegerInstructions,
- Profile2Issue,
- Profile3Issue,
- Profile4Issue,
- ProfileSpecialInstructions,
- ProfileTotalCycles,
- ProfileIcacheIssues,
- ProfileDcacheAccesses,
- ProfileMemoryBarrierCycles,
- ProfileLoadLinkedIssues,
- ProfileMaximum
-} KPROFILE_SOURCE;
-
-/**** Information Classes ****/
-
-/*
- * File
- */
-typedef enum _FILE_INFORMATION_CLASS
-{
- FileDirectoryInformation = 1,
- FileFullDirectoryInformation,
- FileBothDirectoryInformation,
- FileBasicInformation,
- FileStandardInformation,
- FileInternalInformation,
- FileEaInformation,
- FileAccessInformation,
- FileNameInformation,
- FileRenameInformation,
- FileLinkInformation,
- FileNamesInformation,
- FileDispositionInformation,
- FilePositionInformation,
- FileFullEaInformation,
- FileModeInformation,
- FileAlignmentInformation,
- FileAllInformation,
- FileAllocationInformation,
- FileEndOfFileInformation,
- FileAlternateNameInformation,
- FileStreamInformation,
- FilePipeInformation,
- FilePipeLocalInformation,
- FilePipeRemoteInformation,
- FileMailslotQueryInformation,
- FileMailslotSetInformation,
- FileCompressionInformation,
- FileObjectIdInformation,
- FileCompletionInformation,
- FileMoveClusterInformation,
- FileQuotaInformation,
- FileReparsePointInformation,
- FileNetworkOpenInformation,
- FileAttributeTagInformation,
- FileTrackingInformation,
- FileIdBothDirectoryInformation,
- FileIdFullDirectoryInformation,
- FileValidDataLengthInformation,
- FileShortNameInformation,
- FileMaximumInformation
-} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
-
-/*
- * File System
- */
-typedef enum _FSINFOCLASS
-{
- FileFsVolumeInformation = 1,
- FileFsLabelInformation,
- FileFsSizeInformation,
- FileFsDeviceInformation,
- FileFsAttributeInformation,
- FileFsControlInformation,
- FileFsFullSizeInformation,
- FileFsObjectIdInformation,
- FileFsDriverPathInformation,
- FileFsMaximumInformation
-} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
-
-/*
- * Registry Key
- */
-typedef enum _KEY_INFORMATION_CLASS
-{
- KeyBasicInformation,
- KeyNodeInformation,
- KeyFullInformation,
- KeyNameInformation,
- KeyCachedInformation,
- KeyFlagsInformation
-} KEY_INFORMATION_CLASS;
-
-/*
- * Registry Key Value
- */
-typedef enum _KEY_VALUE_INFORMATION_CLASS
-{
- KeyValueBasicInformation,
- KeyValueFullInformation,
- KeyValuePartialInformation,
- KeyValueFullInformationAlign64,
- KeyValuePartialInformationAlign64
-} KEY_VALUE_INFORMATION_CLASS;
-
-/*
- * Registry Key Set
- */
-typedef enum _KEY_SET_INFORMATION_CLASS
-{
- KeyWriteTimeInformation,
- KeyUserFlagsInformation,
- MaxKeySetInfoClass
-} KEY_SET_INFORMATION_CLASS;
-
-/*
- * Process
- */
-typedef enum _PROCESSINFOCLASS
-{
- ProcessBasicInformation,
- ProcessQuotaLimits,
- ProcessIoCounters,
- ProcessVmCounters,
- ProcessTimes,
- ProcessBasePriority,
- ProcessRaisePriority,
- ProcessDebugPort,
- ProcessExceptionPort,
- ProcessAccessToken,
- ProcessLdtInformation,
- ProcessLdtSize,
- ProcessDefaultHardErrorMode,
- ProcessIoPortHandlers,
- ProcessPooledUsageAndLimits,
- ProcessWorkingSetWatch,
- ProcessUserModeIOPL,
- ProcessEnableAlignmentFaultFixup,
- ProcessPriorityClass,
- ProcessWx86Information,
- ProcessHandleCount,
- ProcessAffinityMask,
- ProcessPriorityBoost,
- ProcessDeviceMap,
- ProcessSessionInformation,
- ProcessForegroundInformation,
- ProcessWow64Information,
- ProcessImageFileName,
- ProcessLUIDDeviceMapsEnabled,
- ProcessBreakOnTermination,
- ProcessDebugObjectHandle,
- ProcessDebugFlags,
- ProcessHandleTracing,
- MaxProcessInfoClass
-} PROCESSINFOCLASS;
-
-/*
- * Thread
- */
-typedef enum _THREADINFOCLASS
-{
- ThreadBasicInformation,
- ThreadTimes,
- ThreadPriority,
- ThreadBasePriority,
- ThreadAffinityMask,
- ThreadImpersonationToken,
- ThreadDescriptorTableEntry,
- ThreadEnableAlignmentFaultFixup,
- ThreadEventPair_Reusable,
- ThreadQuerySetWin32StartAddress,
- ThreadZeroTlsCell,
- ThreadPerformanceCount,
- ThreadAmILastThread,
- ThreadIdealProcessor,
- ThreadPriorityBoost,
- ThreadSetTlsArrayAddress,
- ThreadIsIoPending,
- ThreadHideFromDebugger,
- ThreadBreakOnTermination,
- MaxThreadInfoClass
-} THREADINFOCLASS;
-
-/* TYPES *********************************************************************/
-
-/* Basic Types that aren't defined in User-Mode Headers */
-typedef CONST int CINT;
-typedef CONST char *PCSZ;
-typedef short CSHORT;
-typedef CSHORT *PCSHORT;
-typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
-
-/* Kernel Types used by Native APIs */
-typedef LONG KPRIORITY;
-typedef LONG NTSTATUS, *PNTSTATUS;
-typedef UCHAR KIRQL, *PKIRQL;
-typedef ULONG KAFFINITY, *PKAFFINITY;
-typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
-typedef struct _PEB *PPEB;
-typedef ULONG KPROCESSOR_MODE;
-typedef struct _OBJECT_TYPE *POBJECT_TYPE;
-struct _ETHREAD;
-struct _CSR_API_MESSAGE;
-typedef ULONG EXECUTION_STATE;
-
-/* Basic NT Types */
-#if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H)
-typedef struct _UNICODE_STRING
-{
- USHORT Length;
- USHORT MaximumLength;
- PWSTR Buffer;
-} UNICODE_STRING, *PUNICODE_STRING;
-typedef const UNICODE_STRING* PCUNICODE_STRING;
-
-typedef struct _STRING
-{
- USHORT Length;
- USHORT MaximumLength;
- PCHAR Buffer;
-} STRING, *PSTRING;
-
-typedef struct _OBJECT_ATTRIBUTES
-{
- ULONG Length;
- HANDLE RootDirectory;
- PUNICODE_STRING ObjectName;
- ULONG Attributes;
- PVOID SecurityDescriptor;
- PVOID SecurityQualityOfService;
-} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
-#endif
-
-typedef STRING ANSI_STRING;
-typedef PSTRING PANSI_STRING;
-typedef STRING OEM_STRING;
-typedef PSTRING POEM_STRING;
-
-typedef struct _IO_STATUS_BLOCK
-{
- union
- {
- NTSTATUS Status;
- PVOID Pointer;
- };
- ULONG_PTR Information;
-} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
-
-typedef VOID NTAPI
-(*PIO_APC_ROUTINE)(
- IN PVOID ApcContext,
- IN PIO_STATUS_BLOCK IoStatusBlock,
- IN ULONG Reserved);
-
-typedef VOID NTAPI
-(*PKNORMAL_ROUTINE)(
- IN PVOID NormalContext,
- IN PVOID SystemArgument1,
- IN PVOID SystemArgument2);
-
-typedef VOID NTAPI
-(*PTIMER_APC_ROUTINE)(
- IN PVOID TimerContext,
- IN ULONG TimerLowValue,
- IN LONG TimerHighValue);
-
-/* Kernel Types which are returned or used by Native API */
-typedef struct _OBJECT_NAME_INFORMATION
-{
- UNICODE_STRING Name;
-} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
-
-typedef struct _IO_ERROR_LOG_PACKET
-{
- UCHAR MajorFunctionCode;
- UCHAR RetryCount;
- USHORT DumpDataSize;
- USHORT NumberOfStrings;
- USHORT StringOffset;
- USHORT EventCategory;
- NTSTATUS ErrorCode;
- ULONG UniqueErrorValue;
- NTSTATUS FinalStatus;
- ULONG SequenceNumber;
- ULONG IoControlCode;
- LARGE_INTEGER DeviceOffset;
- ULONG DumpData[1];
-}IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
-
-typedef struct _IO_ERROR_LOG_MESSAGE
-{
- USHORT Type;
- USHORT Size;
- USHORT DriverNameLength;
- LARGE_INTEGER TimeStamp;
- ULONG DriverNameOffset;
- IO_ERROR_LOG_PACKET EntryData;
-} IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
-
-typedef struct _CLIENT_ID
-{
- HANDLE UniqueProcess;
- HANDLE UniqueThread;
-} CLIENT_ID, *PCLIENT_ID;
-
-typedef struct _KSYSTEM_TIME
-{
- ULONG LowPart;
- LONG High1Time;
- LONG High2Time;
-} KSYSTEM_TIME, *PKSYSTEM_TIME;
-
-typedef struct _TIME_FIELDS
-{
- CSHORT Year;
- CSHORT Month;
- CSHORT Day;
- CSHORT Hour;
- CSHORT Minute;
- CSHORT Second;
- CSHORT Milliseconds;
- CSHORT Weekday;
-} TIME_FIELDS, *PTIME_FIELDS;
-
-typedef struct _VM_COUNTERS
-{
- SIZE_T PeakVirtualSize;
- SIZE_T VirtualSize;
- ULONG PageFaultCount;
- SIZE_T PeakWorkingSetSize;
- SIZE_T WorkingSetSize;
- SIZE_T QuotaPeakPagedPoolUsage;
- SIZE_T QuotaPagedPoolUsage;
- SIZE_T QuotaPeakNonPagedPoolUsage;
- SIZE_T QuotaNonPagedPoolUsage;
- SIZE_T PagefileUsage;
- SIZE_T PeakPagefileUsage;
-} VM_COUNTERS, *PVM_COUNTERS;
-
-typedef struct _VM_COUNTERS_EX
-{
- SIZE_T PeakVirtualSize;
- SIZE_T VirtualSize;
- ULONG PageFaultCount;
- SIZE_T PeakWorkingSetSize;
- SIZE_T WorkingSetSize;
- SIZE_T QuotaPeakPagedPoolUsage;
- SIZE_T QuotaPagedPoolUsage;
- SIZE_T QuotaPeakNonPagedPoolUsage;
- SIZE_T QuotaNonPagedPoolUsage;
- SIZE_T PagefileUsage;
- SIZE_T PeakPagefileUsage;
- SIZE_T PrivateUsage;
-} VM_COUNTERS_EX, *PVM_COUNTERS_EX;
-
-/**** Information Types ****/
-
-/*
- * Registry Key Set
- */
-
-/* Class 0 */
-typedef struct _KEY_WRITE_TIME_INFORMATION
-{
- LARGE_INTEGER LastWriteTime;
-} KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
-
-/* Class 1 */
-typedef struct _KEY_USER_FLAGS_INFORMATION
-{
- ULONG UserFlags;
-} KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION;
-
-typedef struct _KEY_FULL_INFORMATION
-{
- LARGE_INTEGER LastWriteTime;
- ULONG TitleIndex;
- ULONG ClassOffset;
- ULONG ClassLength;
- ULONG SubKeys;
- ULONG MaxNameLen;
- ULONG MaxClassLen;
- ULONG Values;
- ULONG MaxValueNameLen;
- ULONG MaxValueDataLen;
- WCHAR Class[1];
-} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
-
-typedef struct _KEY_NODE_INFORMATION
-{
- LARGE_INTEGER LastWriteTime;
- ULONG TitleIndex;
- ULONG ClassOffset;
- ULONG ClassLength;
- ULONG NameLength;
- WCHAR Name[1];
-} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
-
-/*
- * File
- */
-
-/* Class 1 */
-typedef struct _FILE_BASIC_INFORMATION
-{
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- ULONG FileAttributes;
-} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
-
-/* Class 2 */
-typedef struct _FILE_STANDARD_INFORMATION
-{
- LARGE_INTEGER AllocationSize;
- LARGE_INTEGER EndOfFile;
- ULONG NumberOfLinks;
- BOOLEAN DeletePending;
- BOOLEAN Directory;
-} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
-
-typedef struct _FILE_NETWORK_OPEN_INFORMATION
-{
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- LARGE_INTEGER AllocationSize;
- LARGE_INTEGER EndOfFile;
- ULONG FileAttributes;
-} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
-
-typedef struct _FILE_ZERO_DATA_INFORMATION
-{
- LARGE_INTEGER FileOffset;
- LARGE_INTEGER BeyondFinalZero;
-} FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION;
-
-typedef struct _FILE_EA_INFORMATION
-{
- ULONG EaSize;
-} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
-
-typedef struct _FILE_COMPRESSION_INFORMATION
-{
- LARGE_INTEGER CompressedFileSize;
- USHORT CompressionFormat;
- UCHAR CompressionUnitShift;
- UCHAR ChunkShift;
- UCHAR ClusterShift;
- UCHAR Reserved[3];
-} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
-
-typedef struct _FILE_POSITION_INFORMATION
-{
- LARGE_INTEGER CurrentByteOffset;
-} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
-
-typedef struct _FILE_DISPOSITION_INFORMATION
-{
- BOOLEAN DeleteFile;
-} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
-
-typedef struct FILE_ALLOCATED_RANGE_BUFFER
-{
- LARGE_INTEGER FileOffset;
- LARGE_INTEGER Length;
-} FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
-
-typedef struct _FILE_FULL_EA_INFORMATION
-{
- ULONG NextEntryOffset;
- UCHAR Flags;
- UCHAR EaNameLength;
- USHORT EaValueLength;
- CHAR EaName[1];
-} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
-
-typedef struct _FILE_QUOTA_INFORMATION
-{
- ULONG NextEntryOffset;
- ULONG SidLength;
- LARGE_INTEGER ChangeTime;
- LARGE_INTEGER QuotaUsed;
- LARGE_INTEGER QuotaThreshold;
- LARGE_INTEGER QuotaLimit;
- SID Sid;
-} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
-
-typedef struct _FILE_INTERNAL_INFORMATION
-{
- LARGE_INTEGER IndexNumber;
-} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
-
-typedef struct _FILE_RENAME_INFORMATION
-{
- BOOLEAN ReplaceIfExists;
- HANDLE RootDirectory;
- ULONG FileNameLength;
- WCHAR FileName[1];
-} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
-
-typedef struct _FILE_PIPE_INFORMATION
-{
- ULONG ReadMode;
- ULONG CompletionMode;
-} FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
-
-typedef struct _FILE_PIPE_LOCAL_INFORMATION
-{
- ULONG NamedPipeType;
- ULONG NamedPipeConfiguration;
- ULONG MaximumInstances;
- ULONG CurrentInstances;
- ULONG InboundQuota;
- ULONG ReadDataAvailable;
- ULONG OutboundQuota;
- ULONG WriteQuotaAvailable;
- ULONG NamedPipeState;
- ULONG NamedPipeEnd;
-} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
-
-typedef struct _FILE_PIPE_REMOTE_INFORMATION
-{
- LARGE_INTEGER CollectDataTime;
- ULONG MaximumCollectionCount;
-} FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
-
-typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
-{
- ULONG MaximumMessageSize;
- ULONG MailslotQuota;
- ULONG NextMessageSize;
- ULONG MessagesAvailable;
- LARGE_INTEGER ReadTimeout;
-} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
-
-typedef struct _FILE_MAILSLOT_SET_INFORMATION
-{
- LARGE_INTEGER ReadTimeout;
-} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
-
-typedef struct _FILE_BOTH_DIR_INFORMATION
-{
- ULONG NextEntryOffset;
- ULONG FileIndex;
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- LARGE_INTEGER EndOfFile;
- LARGE_INTEGER AllocationSize;
- ULONG FileAttributes;
- ULONG FileNameLength;
- ULONG EaSize;
- CCHAR ShortNameLength;
- WCHAR ShortName[12];
- WCHAR FileName[1];
-} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
-
-typedef struct _FILE_COMPLETION_INFORMATION
-{
- HANDLE Port;
- PVOID Key;
-} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
-
-typedef struct _FILE_LINK_INFORMATION
-{
- BOOLEAN ReplaceIfExists;
- HANDLE RootDirectory;
- ULONG FileNameLength;
- WCHAR FileName[1];
-} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
-
-typedef struct _FILE_NAME_INFORMATION
-{
- ULONG FileNameLength;
- WCHAR FileName[1];
-} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
-
-typedef struct _FILE_ALLOCATION_INFORMATION
-{
- LARGE_INTEGER AllocationSize;
-} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
-
-typedef struct _FILE_END_OF_FILE_INFORMATION
-{
- LARGE_INTEGER EndOfFile;
-} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
-
-typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
-{
- LARGE_INTEGER ValidDataLength;
-} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
-
-/*
- * File System
- */
-typedef struct _FILE_FS_DEVICE_INFORMATION
-{
- DEVICE_TYPE DeviceType;
- ULONG Characteristics;
-} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
-
-typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
-{
- ULONG FileSystemAttributes;
- ULONG MaximumComponentNameLength;
- ULONG FileSystemNameLength;
- WCHAR FileSystemName[1];
-} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
-
-typedef struct _FILE_FS_SIZE_INFORMATION
-{
- LARGE_INTEGER TotalAllocationUnits;
- LARGE_INTEGER AvailableAllocationUnits;
- ULONG SectorsPerAllocationUnit;
- ULONG BytesPerSector;
-} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
-
-typedef struct _FILE_FS_LABEL_INFORMATION
-{
- ULONG VolumeLabelLength;
- WCHAR VolumeLabel[1];
-} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
-
-typedef struct _FILE_FS_VOLUME_INFORMATION
-{
- LARGE_INTEGER VolumeCreationTime;
- ULONG VolumeSerialNumber;
- ULONG VolumeLabelLength;
- BOOLEAN SupportsObjects;
- WCHAR VolumeLabel[1];
-} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
-
-/*
- * Registry Key Value
- */
-
-/* Class 0 */
-typedef struct _KEY_VALUE_ENTRY
-{
- PUNICODE_STRING ValueName;
- ULONG DataLength;
- ULONG DataOffset;
- ULONG Type;
-} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
-
-/* Class 1 */
-typedef struct _KEY_VALUE_PARTIAL_INFORMATION
-{
- ULONG TitleIndex;
- ULONG Type;
- ULONG DataLength;
- UCHAR Data[1];
-} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
-
-/* Class 2 */
-typedef struct _KEY_VALUE_BASIC_INFORMATION
-{
- ULONG TitleIndex;
- ULONG Type;
- ULONG NameLength;
- WCHAR Name[1];
-} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
-
-/* Class 3 */
-typedef struct _KEY_VALUE_FULL_INFORMATION
-{
- ULONG TitleIndex;
- ULONG Type;
- ULONG DataOffset;
- ULONG DataLength;
- ULONG NameLength;
- WCHAR Name[1];
-} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
-
-/*
- * Registry Key
- */
-
-/* Class 0 */
-typedef struct _KEY_BASIC_INFORMATION
-{
- LARGE_INTEGER LastWriteTime;
- ULONG TitleIndex;
- ULONG NameLength;
- WCHAR Name[1];
-} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
-
-/* File Pipe Structures for the FSCTLs */
-typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
-{
- LARGE_INTEGER Timeout;
- ULONG NameLength;
- BOOLEAN TimeoutSpecified;
- WCHAR Name[1];
-} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
-
-typedef struct _FILE_PIPE_PEEK_BUFFER
-{
- ULONG NamedPipeState;
- ULONG ReadDataAvailable;
- ULONG NumberOfMessages;
- ULONG MessageLength;
- CHAR Data[1];
-} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
-
-/* The Kerner/User Shared Data Structure */
-typedef struct _KUSER_SHARED_DATA
-{
- ULONG TickCountLowDeprecated;
- ULONG TickCountMultiplier;
- volatile KSYSTEM_TIME InterruptTime;
- volatile KSYSTEM_TIME SystemTime;
- volatile KSYSTEM_TIME TimeZoneBias;
- USHORT ImageNumberLow;
- USHORT ImageNumberHigh;
- WCHAR NtSystemRoot[260];
- ULONG MaxStackTraceDepth;
- ULONG CryptoExponent;
- ULONG TimeZoneId;
- ULONG LargePageMinimum;
- ULONG Reserved2[7];
- NT_PRODUCT_TYPE NtProductType;
- BOOLEAN ProductTypeIsValid;
- ULONG NtMajorVersion;
- ULONG NtMinorVersion;
- BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
- ULONG Reserved1;
- ULONG Reserved3;
- volatile ULONG TimeSlip;
- ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
- LARGE_INTEGER SystemExpirationDate;
- ULONG SuiteMask;
- BOOLEAN KdDebuggerEnabled;
- volatile ULONG ActiveConsoleId;
- volatile ULONG DismountCount;
- ULONG ComPlusPackage;
- ULONG LastSystemRITEventTickCount;
- ULONG NumberOfPhysicalPages;
- BOOLEAN SafeBootMode;
- ULONG TraceLogging;
- ULONGLONG Fill0;
- ULONGLONG SystemCall[4];
- union {
- volatile KSYSTEM_TIME TickCount;
- volatile ULONG64 TickCountQuad;
- };
-} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
-
-/* Run-Time Library (RTL) Types */
-typedef struct _RTL_BITMAP
-{
- ULONG SizeOfBitMap;
- PULONG Buffer;
-} RTL_BITMAP, *PRTL_BITMAP;
-
-typedef struct _RTL_BITMAP_RUN
-{
- ULONG StartingIndex;
- ULONG NumberOfBits;
-} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
-
-typedef struct _COMPRESSED_DATA_INFO
-{
- USHORT CompressionFormatAndEngine;
- UCHAR CompressionUnitShift;
- UCHAR ChunkShift;
- UCHAR ClusterShift;
- UCHAR Reserved;
- USHORT NumberOfChunks;
- ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
-} COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
-
-typedef struct _GENERATE_NAME_CONTEXT
-{
- USHORT Checksum;
- BOOLEAN CheckSumInserted;
- UCHAR NameLength;
- WCHAR NameBuffer[8];
- ULONG ExtensionLength;
- WCHAR ExtensionBuffer[4];
- ULONG LastIndexValue;
-} GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
-
-typedef struct _RTL_SPLAY_LINKS
-{
- struct _RTL_SPLAY_LINKS *Parent;
- struct _RTL_SPLAY_LINKS *LeftChild;
- struct _RTL_SPLAY_LINKS *RightChild;
-} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
-
-struct _RTL_AVL_TABLE;
-struct _RTL_GENERIC_TABLE;
-
-typedef NTSTATUS STDCALL
-(*PRTL_AVL_MATCH_FUNCTION)(
- struct _RTL_AVL_TABLE *Table,
- PVOID UserData,
- PVOID MatchData
-);
-
-typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
-(*PRTL_AVL_COMPARE_ROUTINE) (
- struct _RTL_AVL_TABLE *Table,
- PVOID FirstStruct,
- PVOID SecondStruct
-);
-
-typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
-(*PRTL_GENERIC_COMPARE_ROUTINE) (
- struct _RTL_GENERIC_TABLE *Table,
- PVOID FirstStruct,
- PVOID SecondStruct
-);
-
-typedef PVOID STDCALL
-(*PRTL_GENERIC_ALLOCATE_ROUTINE) (
- struct _RTL_GENERIC_TABLE *Table,
- LONG ByteSize
-);
-
-typedef VOID STDCALL
-(*PRTL_GENERIC_FREE_ROUTINE) (
- struct _RTL_GENERIC_TABLE *Table,
- PVOID Buffer
-);
-
-typedef VOID STDCALL
-(*PRTL_AVL_ALLOCATE_ROUTINE) (
- struct _RTL_AVL_TABLE *Table,
- LONG ByteSize
-);
-
-typedef VOID STDCALL
-(*PRTL_AVL_FREE_ROUTINE) (
- struct _RTL_AVL_TABLE *Table,
- PVOID Buffer
-);
-
-typedef struct _RTL_GENERIC_TABLE
-{
- PRTL_SPLAY_LINKS TableRoot;
- LIST_ENTRY InsertOrderList;
- PLIST_ENTRY OrderedPointer;
- ULONG WhichOrderedElement;
- ULONG NumberGenericTableElements;
- PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
- PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
- PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
- PVOID TableContext;
-} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
-
-typedef struct _RTL_BALANCED_LINKS
-{
- struct _RTL_BALANCED_LINKS *Parent;
- struct _RTL_BALANCED_LINKS *LeftChild;
- struct _RTL_BALANCED_LINKS *RightChild;
- CHAR Balance;
- UCHAR Reserved[3];
-} RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
-
-typedef struct _RTL_AVL_TABLE
-{
- RTL_BALANCED_LINKS BalancedRoot;
- PVOID OrderedPointer;
- ULONG WhichOrderedElement;
- ULONG NumberGenericTableElements;
- ULONG DepthOfTree;
- PRTL_BALANCED_LINKS RestartKey;
- ULONG DeleteCount;
- PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
- PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
- PRTL_AVL_FREE_ROUTINE FreeRoutine;
- PVOID TableContext;
-} RTL_AVL_TABLE, *PRTL_AVL_TABLE;
-
-typedef NTSTATUS STDCALL
-(*PRTL_QUERY_REGISTRY_ROUTINE)(
- IN PWSTR ValueName,
- IN ULONG ValueType,
- IN PVOID ValueData,
- IN ULONG ValueLength,
- IN PVOID Context,
- IN PVOID EntryContext
-);
-
-typedef struct _RTL_QUERY_REGISTRY_TABLE
-{
- PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
- ULONG Flags;
- PWSTR Name;
- PVOID EntryContext;
- ULONG DefaultType;
- PVOID DefaultData;
- ULONG DefaultLength;
-} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
-
-typedef struct _UNICODE_PREFIX_TABLE_ENTRY
-{
- CSHORT NodeTypeCode;
- CSHORT NameLength;
- struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
- struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
- RTL_SPLAY_LINKS Links;
- PUNICODE_STRING Prefix;
-} UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
-
-typedef struct _UNICODE_PREFIX_TABLE
-{
- CSHORT NodeTypeCode;
- CSHORT NameLength;
- PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
- PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
-} UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
-
-/* FIXME - need FAST_MUTEX and PHANDLE_TABLE for RTL_ATOM_TABLE in umode! */
-typedef void *FAST_MUTEX;
-typedef void *PHANDLE_TABLE;
-
-typedef OSVERSIONINFOW RTL_OSVERSIONINFOW;
-typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW;
-typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW;
-typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW;
-
-#endif
+/*\r
+ * PROJECT: ReactOS Native Headers\r
+ * FILE: include/ndk/umtypes.h\r
+ * PURPOSE: Definitions needed for Native Headers if target is not Kernel-Mode.\r
+ * PROGRAMMER: Alex Ionescu (alex@relsoft.net)\r
+ * UPDATE HISTORY:\r
+ * Created 06/10/04\r
+ */\r
+\r
+#ifndef _UMTYPES_H\r
+#define _UMTYPES_H\r
+\r
+/* DEPENDENCIES **************************************************************/\r
+#include <winioctl.h>\r
+#include <ntstatus.h>\r
+#include <ntnls.h>\r
+#define STATIC static\r
+\r
+/* EXPORTED DATA *************************************************************/\r
+\r
+/* CONSTANTS *****************************************************************/\r
+\r
+/* NTAPI/NTOSAPI Define */\r
+#define NTAPI __stdcall\r
+#define NTOSAPI\r
+#define FASTCALL __fastcall\r
+#define STDCALL __stdcall\r
+\r
+/* Definitions for Object Creation -- winternl.h */\r
+#define OBJ_INHERIT 2L\r
+#define OBJ_PERMANENT 16L\r
+#define OBJ_EXCLUSIVE 32L\r
+#define OBJ_CASE_INSENSITIVE 64L\r
+#define OBJ_OPENIF 128L\r
+#define OBJ_OPENLINK 256L\r
+#define OBJ_VALID_ATTRIBUTES 498L\r
+#define InitializeObjectAttributes(p,n,a,r,s) { \\r
+ (p)->Length = sizeof(OBJECT_ATTRIBUTES); \\r
+ (p)->RootDirectory = (r); \\r
+ (p)->Attributes = (a); \\r
+ (p)->ObjectName = (n); \\r
+ (p)->SecurityDescriptor = (s); \\r
+ (p)->SecurityQualityOfService = NULL; \\r
+}\r
+\r
+/* Native API Return Value Macros */\r
+#define NT_SUCCESS(x) ((x)>=0)\r
+#define NT_WARNING(x) ((ULONG)(x)>>30==2)\r
+#define NT_ERROR(x) ((ULONG)(x)>>30==3)\r
+\r
+/* Object Access Rights FIXME: Some are in w32api's psdk..,is that normal ?*/\r
+#define DIRECTORY_QUERY (0x0001)\r
+#define DIRECTORY_TRAVERSE (0x0002)\r
+#define DIRECTORY_CREATE_OBJECT (0x0004)\r
+#define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)\r
+#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)\r
+#define EVENT_QUERY_STATE (0x0001)\r
+#define SEMAPHORE_QUERY_STATE (0x0001)\r
+#define SYMBOLIC_LINK_QUERY 0x0001\r
+#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)\r
+\r
+/* I/O Control Codes for communicating with Mailslots */\r
+#define FSCTL_MAILSLOT_PEEK \\r
+ CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)\r
+\r
+/* I/O Control Codes for communicating with Pipes */\r
+#define FSCTL_PIPE_ASSIGN_EVENT \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)\r
+#define FSCTL_PIPE_DISCONNECT \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)\r
+#define FSCTL_PIPE_LISTEN \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)\r
+#define FSCTL_PIPE_PEEK \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)\r
+#define FSCTL_PIPE_QUERY_EVENT \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)\r
+#define FSCTL_PIPE_TRANSCEIVE \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)\r
+#define FSCTL_PIPE_WAIT \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)\r
+#define FSCTL_PIPE_IMPERSONATE \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)\r
+#define FSCTL_PIPE_SET_CLIENT_PROCESS \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)\r
+#define FSCTL_PIPE_QUERY_CLIENT_PROCESS \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)\r
+#define FSCTL_PIPE_INTERNAL_READ \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)\r
+#define FSCTL_PIPE_INTERNAL_WRITE \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)\r
+#define FSCTL_PIPE_INTERNAL_TRANSCEIVE \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)\r
+#define FSCTL_PIPE_INTERNAL_READ_OVFLOW \\r
+ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)\r
+\r
+/* I/O Control Codes for Communicating with Tapes */ \r
+#define IOCTL_TAPE_ERASE \\r
+ CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\r
+#define IOCTL_TAPE_PREPARE \\r
+ CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)\r
+#define IOCTL_TAPE_WRITE_MARKS \\r
+ CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\r
+#define IOCTL_TAPE_GET_POSITION \\r
+ CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)\r
+#define IOCTL_TAPE_SET_POSITION \\r
+ CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)\r
+#define IOCTL_TAPE_GET_DRIVE_PARAMS \\r
+ CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)\r
+#define IOCTL_TAPE_SET_DRIVE_PARAMS \\r
+ CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\r
+#define IOCTL_TAPE_GET_MEDIA_PARAMS \\r
+ CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)\r
+#define IOCTL_TAPE_SET_MEDIA_PARAMS \\r
+ CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)\r
+#define IOCTL_TAPE_GET_STATUS \\r
+ CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)\r
+#define IOCTL_TAPE_CREATE_PARTITION \\r
+ CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\r
+\r
+/* Macros for current Process/Thread built-in 'special' ID */\r
+#define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )\r
+#define ZwCurrentProcess() NtCurrentProcess()\r
+#define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )\r
+#define ZwCurrentThread() NtCurrentThread()\r
+\r
+/* Kernel Shared Data Constants */\r
+#define PROCESSOR_FEATURE_MAX 64\r
+#define SharedUserData ((KUSER_SHARED_DATA * CONST) USER_SHARED_DATA)\r
+\r
+/* Paging Values on x86 */\r
+#define PAGE_SIZE 0x1000\r
+#define PAGE_SHIFT 12L\r
+\r
+/* Run-Time Library (RTL) Registry Constants */\r
+#define RTL_REGISTRY_ABSOLUTE 0\r
+#define RTL_REGISTRY_SERVICES 1\r
+#define RTL_REGISTRY_CONTROL 2\r
+#define RTL_REGISTRY_WINDOWS_NT 3\r
+#define RTL_REGISTRY_DEVICEMAP 4\r
+#define RTL_REGISTRY_USER 5\r
+#define RTL_REGISTRY_MAXIMUM 6\r
+#define RTL_REGISTRY_HANDLE 0x40000000\r
+#define RTL_REGISTRY_OPTIONAL 0x80000000\r
+#define RTL_QUERY_REGISTRY_SUBKEY 0x00000001\r
+#define RTL_QUERY_REGISTRY_TOPKEY 0x00000002\r
+#define RTL_QUERY_REGISTRY_REQUIRED 0x00000004\r
+#define RTL_QUERY_REGISTRY_NOVALUE 0x00000008\r
+#define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010\r
+#define RTL_QUERY_REGISTRY_DIRECT 0x00000020\r
+#define RTL_QUERY_REGISTRY_DELETE 0x00000040\r
+\r
+/* File Result Flags */\r
+#define FILE_SUPERSEDED 0x00000000\r
+#define FILE_OPENED 0x00000001\r
+#define FILE_CREATED 0x00000002\r
+#define FILE_OVERWRITTEN 0x00000003\r
+#define FILE_EXISTS 0x00000004\r
+#define FILE_DOES_NOT_EXIST 0x00000005\r
+\r
+/* Pipe Flags */\r
+#define FILE_PIPE_BYTE_STREAM_MODE 0x00000000\r
+#define FILE_PIPE_MESSAGE_MODE 0x00000001\r
+#define FILE_PIPE_QUEUE_OPERATION 0x00000000\r
+#define FILE_PIPE_COMPLETE_OPERATION 0x00000001\r
+#define FILE_PIPE_INBOUND 0x00000000\r
+#define FILE_PIPE_OUTBOUND 0x00000001\r
+#define FILE_PIPE_FULL_DUPLEX 0x00000002\r
+#define FILE_PIPE_CLIENT_END 0x00000000\r
+#define FILE_PIPE_SERVER_END 0x00000001\r
+\r
+/* File Attributes */\r
+#define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7\r
+#define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7\r
+\r
+/* File Flags */\r
+#define FILE_SUPERSEDE 0x00000000\r
+#define FILE_OPEN 0x00000001\r
+#define FILE_CREATE 0x00000002\r
+#define FILE_OPEN_IF 0x00000003\r
+#define FILE_OVERWRITE 0x00000004\r
+#define FILE_OVERWRITE_IF 0x00000005\r
+#define FILE_MAXIMUM_DISPOSITION 0x00000005\r
+\r
+/* File Types */\r
+#define FILE_DIRECTORY_FILE 0x00000001\r
+#define FILE_WRITE_THROUGH 0x00000002\r
+#define FILE_SEQUENTIAL_ONLY 0x00000004\r
+#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008\r
+#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010\r
+#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020\r
+#define FILE_NON_DIRECTORY_FILE 0x00000040\r
+#define FILE_CREATE_TREE_CONNECTION 0x00000080\r
+#define FILE_COMPLETE_IF_OPLOCKED 0x00000100\r
+#define FILE_NO_EA_KNOWLEDGE 0x00000200\r
+#define FILE_OPEN_FOR_RECOVERY 0x00000400\r
+#define FILE_RANDOM_ACCESS 0x00000800\r
+#define FILE_DELETE_ON_CLOSE 0x00001000\r
+#define FILE_OPEN_BY_FILE_ID 0x00002000\r
+#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000\r
+#define FILE_NO_COMPRESSION 0x00008000\r
+#define FILE_RESERVE_OPFILTER 0x00100000\r
+#define FILE_OPEN_REPARSE_POINT 0x00200000\r
+#define FILE_OPEN_NO_RECALL 0x00400000\r
+#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000\r
+\r
+/* Device Charactertics */\r
+#define FILE_REMOVABLE_MEDIA 0x00000001\r
+#define FILE_REMOTE_DEVICE 0x00000010\r
+\r
+/* Version Constants */\r
+#define VER_MINORVERSION 0x0000001\r
+#define VER_MAJORVERSION 0x0000002\r
+#define VER_BUILDNUMBER 0x0000004\r
+#define VER_PLATFORMID 0x0000008\r
+#define VER_SERVICEPACKMINOR 0x0000010\r
+#define VER_SERVICEPACKMAJOR 0x0000020\r
+#define VER_SUITENAME 0x0000040\r
+#define VER_PRODUCT_TYPE 0x0000080\r
+#define VER_PLATFORM_WIN32s 0\r
+#define VER_PLATFORM_WIN32_WINDOWS 1\r
+#define VER_PLATFORM_WIN32_NT 2\r
+#define VER_EQUAL 1\r
+#define VER_GREATER 2\r
+#define VER_GREATER_EQUAL 3\r
+#define VER_LESS 4\r
+#define VER_LESS_EQUAL 5\r
+#define VER_AND 6\r
+#define VER_OR 7\r
+#define VER_CONDITION_MASK 7\r
+#define VER_NUM_BITS_PER_CONDITION_MASK 3\r
+\r
+/* RTL String Hash Algorithms */\r
+#define HASH_STRING_ALGORITHM_DEFAULT 0\r
+#define HASH_STRING_ALGORITHM_X65599 1\r
+#define HASH_STRING_ALGORITHM_INVALID 0xffffffff\r
+\r
+/* List Macros */\r
+static __inline\r
+VOID\r
+InitializeListHead(\r
+ IN PLIST_ENTRY ListHead)\r
+{\r
+ ListHead->Flink = ListHead->Blink = ListHead;\r
+}\r
+\r
+static __inline\r
+VOID\r
+InsertHeadList(\r
+ IN PLIST_ENTRY ListHead,\r
+ IN PLIST_ENTRY Entry)\r
+{\r
+ PLIST_ENTRY OldFlink;\r
+ OldFlink = ListHead->Flink;\r
+ Entry->Flink = OldFlink;\r
+ Entry->Blink = ListHead;\r
+ OldFlink->Blink = Entry;\r
+ ListHead->Flink = Entry;\r
+}\r
+\r
+static __inline\r
+VOID\r
+InsertTailList(\r
+ IN PLIST_ENTRY ListHead,\r
+ IN PLIST_ENTRY Entry)\r
+{\r
+ PLIST_ENTRY OldBlink;\r
+ OldBlink = ListHead->Blink;\r
+ Entry->Flink = ListHead;\r
+ Entry->Blink = OldBlink;\r
+ OldBlink->Flink = Entry;\r
+ ListHead->Blink = Entry;\r
+}\r
+\r
+#define IsListEmpty(ListHead) \\r
+ ((ListHead)->Flink == (ListHead))\r
+\r
+#define PopEntryList(ListHead) \\r
+ (ListHead)->Next; \\r
+ { \\r
+ PSINGLE_LIST_ENTRY _FirstEntry; \\r
+ _FirstEntry = (ListHead)->Next; \\r
+ if (_FirstEntry != NULL) \\r
+ (ListHead)->Next = _FirstEntry->Next; \\r
+ }\r
+\r
+#define PushEntryList(_ListHead, _Entry) \\r
+ (_Entry)->Next = (_ListHead)->Next; \\r
+ (_ListHead)->Next = (_Entry); \\r
+\r
+static __inline\r
+BOOLEAN\r
+RemoveEntryList(\r
+ IN PLIST_ENTRY Entry)\r
+{\r
+ PLIST_ENTRY OldFlink;\r
+ PLIST_ENTRY OldBlink;\r
+\r
+ OldFlink = Entry->Flink;\r
+ OldBlink = Entry->Blink;\r
+ OldFlink->Blink = OldBlink;\r
+ OldBlink->Flink = OldFlink;\r
+ return (OldFlink == OldBlink);\r
+}\r
+\r
+static __inline\r
+PLIST_ENTRY\r
+RemoveHeadList(\r
+ IN PLIST_ENTRY ListHead)\r
+{\r
+ PLIST_ENTRY Flink;\r
+ PLIST_ENTRY Entry;\r
+\r
+ Entry = ListHead->Flink;\r
+ Flink = Entry->Flink;\r
+ ListHead->Flink = Flink;\r
+ Flink->Blink = ListHead;\r
+ return Entry;\r
+}\r
+\r
+static __inline\r
+PLIST_ENTRY\r
+RemoveTailList(\r
+ IN PLIST_ENTRY ListHead)\r
+{\r
+ PLIST_ENTRY Blink;\r
+ PLIST_ENTRY Entry;\r
+\r
+ Entry = ListHead->Blink;\r
+ Blink = Entry->Blink;\r
+ ListHead->Blink = Blink;\r
+ Blink->Flink = ListHead;\r
+ return Entry;\r
+}\r
+\r
+#define IsFirstEntry(ListHead, Entry) \\r
+ ((ListHead)->Flink == Entry)\r
+\r
+#define IsLastEntry(ListHead, Entry) \\r
+ ((ListHead)->Blink == Entry)\r
+\r
+/*\r
+ * Constant String Macro\r
+ */\r
+#define RTL_CONSTANT_STRING(__SOURCE_STRING__) \\r
+{ \\r
+ sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \\r
+ sizeof(__SOURCE_STRING__), \\r
+ (__SOURCE_STRING__) \\r
+}\r
+\r
+/* ENUMERATIONS **************************************************************/\r
+\r
+/* Kernel Shared Data Values */\r
+typedef enum _NT_PRODUCT_TYPE\r
+{\r
+ NtProductWinNt = 1,\r
+ NtProductLanManNt,\r
+ NtProductServer\r
+} NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;\r
+\r
+typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE\r
+{\r
+ StandardDesign,\r
+ NEC98x86,\r
+ EndAlternatives\r
+} ALTERNATIVE_ARCHITECTURE_TYPE;\r
+\r
+/* Run-Time Library (RTL) Enumerations */\r
+typedef enum _TABLE_SEARCH_RESULT\r
+{\r
+ TableEmptyTree,\r
+ TableFoundNode,\r
+ TableInsertAsLeft,\r
+ TableInsertAsRight\r
+} TABLE_SEARCH_RESULT;\r
+\r
+typedef enum _RTL_GENERIC_COMPARE_RESULTS\r
+{\r
+ GenericLessThan,\r
+ GenericGreaterThan,\r
+ GenericEqual\r
+} RTL_GENERIC_COMPARE_RESULTS;\r
+\r
+/* Kernel or Native Enumerations used by Native API */\r
+typedef enum _SECTION_INHERIT\r
+{\r
+ ViewShare = 1,\r
+ ViewUnmap = 2\r
+} SECTION_INHERIT;\r
+\r
+typedef enum _POOL_TYPE\r
+{\r
+ NonPagedPool,\r
+ PagedPool,\r
+ NonPagedPoolMustSucceed,\r
+ DontUseThisType,\r
+ NonPagedPoolCacheAligned,\r
+ PagedPoolCacheAligned,\r
+ NonPagedPoolCacheAlignedMustS,\r
+ MaxPoolType,\r
+ NonPagedPoolSession = 32,\r
+ PagedPoolSession,\r
+ NonPagedPoolMustSucceedSession,\r
+ DontUseThisTypeSession,\r
+ NonPagedPoolCacheAlignedSession,\r
+ PagedPoolCacheAlignedSession,\r
+ NonPagedPoolCacheAlignedMustSSession\r
+} POOL_TYPE;\r
+\r
+typedef enum _EVENT_TYPE\r
+{\r
+ NotificationEvent,\r
+ SynchronizationEvent\r
+} EVENT_TYPE;\r
+\r
+typedef enum _TIMER_TYPE\r
+{\r
+ NotificationTimer,\r
+ SynchronizationTimer\r
+} TIMER_TYPE;\r
+\r
+typedef enum _WAIT_TYPE\r
+{\r
+ WaitAll,\r
+ WaitAny\r
+} WAIT_TYPE;\r
+\r
+typedef enum _INTERFACE_TYPE\r
+{\r
+ InterfaceTypeUndefined = -1,\r
+ Internal,\r
+ Isa,\r
+ Eisa,\r
+ MicroChannel,\r
+ TurboChannel,\r
+ PCIBus,\r
+ VMEBus,\r
+ NuBus,\r
+ PCMCIABus,\r
+ CBus,\r
+ MPIBus,\r
+ MPSABus,\r
+ ProcessorInternal,\r
+ InternalPowerBus,\r
+ PNPISABus,\r
+ PNPBus,\r
+ MaximumInterfaceType\r
+}INTERFACE_TYPE, *PINTERFACE_TYPE;\r
+\r
+typedef enum _MODE\r
+{\r
+ KernelMode,\r
+ UserMode,\r
+ MaximumMode\r
+} MODE;\r
+\r
+typedef enum _KWAIT_REASON\r
+{\r
+ Executive,\r
+ FreePage,\r
+ PageIn,\r
+ PoolAllocation,\r
+ DelayExecution,\r
+ Suspended,\r
+ UserRequest,\r
+ WrExecutive,\r
+ WrFreePage,\r
+ WrPageIn,\r
+ WrPoolAllocation,\r
+ WrDelayExecution,\r
+ WrSuspended,\r
+ WrUserRequest,\r
+ WrEventPair,\r
+ WrQueue,\r
+ WrLpcReceive,\r
+ WrLpcReply,\r
+ WrVirtualMemory,\r
+ WrPageOut,\r
+ WrRendezvous,\r
+ Spare2,\r
+ WrGuardedMutex,\r
+ Spare4,\r
+ Spare5,\r
+ Spare6,\r
+ WrKernel,\r
+ WrResource,\r
+ WrPushLock,\r
+ WrMutex,\r
+ WrQuantumEnd,\r
+ WrDispatchInt,\r
+ WrPreempted,\r
+ WrYieldExecution,\r
+ MaximumWaitReason\r
+} KWAIT_REASON;\r
+\r
+typedef enum _KPROFILE_SOURCE\r
+{\r
+ ProfileTime,\r
+ ProfileAlignmentFixup,\r
+ ProfileTotalIssues,\r
+ ProfilePipelineDry,\r
+ ProfileLoadInstructions,\r
+ ProfilePipelineFrozen,\r
+ ProfileBranchInstructions,\r
+ ProfileTotalNonissues,\r
+ ProfileDcacheMisses,\r
+ ProfileIcacheMisses,\r
+ ProfileCacheMisses,\r
+ ProfileBranchMispredictions,\r
+ ProfileStoreInstructions,\r
+ ProfileFpInstructions,\r
+ ProfileIntegerInstructions,\r
+ Profile2Issue,\r
+ Profile3Issue,\r
+ Profile4Issue,\r
+ ProfileSpecialInstructions,\r
+ ProfileTotalCycles,\r
+ ProfileIcacheIssues,\r
+ ProfileDcacheAccesses,\r
+ ProfileMemoryBarrierCycles,\r
+ ProfileLoadLinkedIssues,\r
+ ProfileMaximum\r
+} KPROFILE_SOURCE;\r
+\r
+/**** Information Classes ****/\r
+\r
+/*\r
+ * File\r
+ */\r
+typedef enum _FILE_INFORMATION_CLASS\r
+{\r
+ FileDirectoryInformation = 1,\r
+ FileFullDirectoryInformation,\r
+ FileBothDirectoryInformation,\r
+ FileBasicInformation,\r
+ FileStandardInformation,\r
+ FileInternalInformation,\r
+ FileEaInformation,\r
+ FileAccessInformation,\r
+ FileNameInformation,\r
+ FileRenameInformation,\r
+ FileLinkInformation,\r
+ FileNamesInformation,\r
+ FileDispositionInformation,\r
+ FilePositionInformation,\r
+ FileFullEaInformation,\r
+ FileModeInformation,\r
+ FileAlignmentInformation,\r
+ FileAllInformation,\r
+ FileAllocationInformation,\r
+ FileEndOfFileInformation,\r
+ FileAlternateNameInformation,\r
+ FileStreamInformation,\r
+ FilePipeInformation,\r
+ FilePipeLocalInformation,\r
+ FilePipeRemoteInformation,\r
+ FileMailslotQueryInformation,\r
+ FileMailslotSetInformation,\r
+ FileCompressionInformation,\r
+ FileObjectIdInformation,\r
+ FileCompletionInformation,\r
+ FileMoveClusterInformation,\r
+ FileQuotaInformation,\r
+ FileReparsePointInformation,\r
+ FileNetworkOpenInformation,\r
+ FileAttributeTagInformation,\r
+ FileTrackingInformation,\r
+ FileIdBothDirectoryInformation,\r
+ FileIdFullDirectoryInformation,\r
+ FileValidDataLengthInformation,\r
+ FileShortNameInformation,\r
+ FileMaximumInformation\r
+} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;\r
+\r
+/*\r
+ * File System\r
+ */\r
+typedef enum _FSINFOCLASS\r
+{\r
+ FileFsVolumeInformation = 1,\r
+ FileFsLabelInformation,\r
+ FileFsSizeInformation,\r
+ FileFsDeviceInformation,\r
+ FileFsAttributeInformation,\r
+ FileFsControlInformation,\r
+ FileFsFullSizeInformation,\r
+ FileFsObjectIdInformation,\r
+ FileFsDriverPathInformation,\r
+ FileFsMaximumInformation\r
+} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;\r
+\r
+/*\r
+ * Registry Key\r
+ */\r
+typedef enum _KEY_INFORMATION_CLASS\r
+{\r
+ KeyBasicInformation,\r
+ KeyNodeInformation,\r
+ KeyFullInformation,\r
+ KeyNameInformation,\r
+ KeyCachedInformation,\r
+ KeyFlagsInformation\r
+} KEY_INFORMATION_CLASS;\r
+\r
+/*\r
+ * Registry Key Value\r
+ */\r
+typedef enum _KEY_VALUE_INFORMATION_CLASS\r
+{\r
+ KeyValueBasicInformation,\r
+ KeyValueFullInformation,\r
+ KeyValuePartialInformation,\r
+ KeyValueFullInformationAlign64,\r
+ KeyValuePartialInformationAlign64\r
+} KEY_VALUE_INFORMATION_CLASS;\r
+\r
+/*\r
+ * Registry Key Set\r
+ */\r
+typedef enum _KEY_SET_INFORMATION_CLASS\r
+{\r
+ KeyWriteTimeInformation,\r
+ KeyUserFlagsInformation,\r
+ MaxKeySetInfoClass\r
+} KEY_SET_INFORMATION_CLASS;\r
+\r
+/*\r
+ * Process\r
+ */\r
+typedef enum _PROCESSINFOCLASS\r
+{\r
+ ProcessBasicInformation,\r
+ ProcessQuotaLimits,\r
+ ProcessIoCounters,\r
+ ProcessVmCounters,\r
+ ProcessTimes,\r
+ ProcessBasePriority,\r
+ ProcessRaisePriority,\r
+ ProcessDebugPort,\r
+ ProcessExceptionPort,\r
+ ProcessAccessToken,\r
+ ProcessLdtInformation,\r
+ ProcessLdtSize,\r
+ ProcessDefaultHardErrorMode,\r
+ ProcessIoPortHandlers,\r
+ ProcessPooledUsageAndLimits,\r
+ ProcessWorkingSetWatch,\r
+ ProcessUserModeIOPL,\r
+ ProcessEnableAlignmentFaultFixup,\r
+ ProcessPriorityClass,\r
+ ProcessWx86Information,\r
+ ProcessHandleCount,\r
+ ProcessAffinityMask,\r
+ ProcessPriorityBoost,\r
+ ProcessDeviceMap,\r
+ ProcessSessionInformation,\r
+ ProcessForegroundInformation,\r
+ ProcessWow64Information,\r
+ ProcessImageFileName,\r
+ ProcessLUIDDeviceMapsEnabled,\r
+ ProcessBreakOnTermination,\r
+ ProcessDebugObjectHandle,\r
+ ProcessDebugFlags,\r
+ ProcessHandleTracing,\r
+ MaxProcessInfoClass\r
+} PROCESSINFOCLASS;\r
+\r
+/*\r
+ * Thread\r
+ */\r
+typedef enum _THREADINFOCLASS\r
+{\r
+ ThreadBasicInformation,\r
+ ThreadTimes,\r
+ ThreadPriority,\r
+ ThreadBasePriority,\r
+ ThreadAffinityMask,\r
+ ThreadImpersonationToken,\r
+ ThreadDescriptorTableEntry,\r
+ ThreadEnableAlignmentFaultFixup,\r
+ ThreadEventPair_Reusable,\r
+ ThreadQuerySetWin32StartAddress,\r
+ ThreadZeroTlsCell,\r
+ ThreadPerformanceCount,\r
+ ThreadAmILastThread,\r
+ ThreadIdealProcessor,\r
+ ThreadPriorityBoost,\r
+ ThreadSetTlsArrayAddress,\r
+ ThreadIsIoPending,\r
+ ThreadHideFromDebugger,\r
+ ThreadBreakOnTermination,\r
+ MaxThreadInfoClass\r
+} THREADINFOCLASS;\r
+\r
+/* TYPES *********************************************************************/\r
+\r
+/* Basic Types that aren't defined in User-Mode Headers */\r
+typedef CONST int CINT;\r
+typedef CONST char *PCSZ;\r
+typedef short CSHORT;\r
+typedef CSHORT *PCSHORT;\r
+typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;\r
+\r
+/* Kernel Types used by Native APIs */\r
+typedef LONG KPRIORITY;\r
+typedef LONG NTSTATUS, *PNTSTATUS;\r
+typedef UCHAR KIRQL, *PKIRQL;\r
+typedef ULONG KAFFINITY, *PKAFFINITY;\r
+typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;\r
+typedef struct _PEB *PPEB;\r
+typedef ULONG KPROCESSOR_MODE;\r
+typedef struct _OBJECT_TYPE *POBJECT_TYPE;\r
+struct _ETHREAD;\r
+struct _CSR_API_MESSAGE;\r
+typedef ULONG EXECUTION_STATE;\r
+\r
+/* Basic NT Types */\r
+#if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H)\r
+typedef struct _UNICODE_STRING\r
+{\r
+ USHORT Length;\r
+ USHORT MaximumLength;\r
+ PWSTR Buffer;\r
+} UNICODE_STRING, *PUNICODE_STRING;\r
+typedef const UNICODE_STRING* PCUNICODE_STRING;\r
+\r
+typedef struct _STRING\r
+{\r
+ USHORT Length;\r
+ USHORT MaximumLength;\r
+ PCHAR Buffer;\r
+} STRING, *PSTRING;\r
+\r
+typedef struct _OBJECT_ATTRIBUTES\r
+{\r
+ ULONG Length;\r
+ HANDLE RootDirectory;\r
+ PUNICODE_STRING ObjectName;\r
+ ULONG Attributes;\r
+ PVOID SecurityDescriptor;\r
+ PVOID SecurityQualityOfService;\r
+} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;\r
+#endif\r
+\r
+typedef STRING ANSI_STRING;\r
+typedef PSTRING PANSI_STRING;\r
+typedef STRING OEM_STRING;\r
+typedef PSTRING POEM_STRING;\r
+\r
+typedef struct _IO_STATUS_BLOCK\r
+{\r
+ union\r
+ {\r
+ NTSTATUS Status;\r
+ PVOID Pointer;\r
+ };\r
+ ULONG_PTR Information;\r
+} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;\r
+\r
+typedef VOID\r
+(NTAPI *PIO_APC_ROUTINE)(\r
+ IN PVOID ApcContext,\r
+ IN PIO_STATUS_BLOCK IoStatusBlock,\r
+ IN ULONG Reserved);\r
+\r
+typedef VOID\r
+(NTAPI *PKNORMAL_ROUTINE)(\r
+ IN PVOID NormalContext,\r
+ IN PVOID SystemArgument1,\r
+ IN PVOID SystemArgument2);\r
+\r
+typedef VOID\r
+(NTAPI *PTIMER_APC_ROUTINE)(\r
+ IN PVOID TimerContext,\r
+ IN ULONG TimerLowValue,\r
+ IN LONG TimerHighValue);\r
+\r
+/* Kernel Types which are returned or used by Native API */\r
+typedef struct _OBJECT_NAME_INFORMATION\r
+{\r
+ UNICODE_STRING Name;\r
+} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;\r
+\r
+typedef struct _IO_ERROR_LOG_PACKET\r
+{\r
+ UCHAR MajorFunctionCode;\r
+ UCHAR RetryCount;\r
+ USHORT DumpDataSize;\r
+ USHORT NumberOfStrings;\r
+ USHORT StringOffset;\r
+ USHORT EventCategory;\r
+ NTSTATUS ErrorCode;\r
+ ULONG UniqueErrorValue;\r
+ NTSTATUS FinalStatus;\r
+ ULONG SequenceNumber;\r
+ ULONG IoControlCode;\r
+ LARGE_INTEGER DeviceOffset;\r
+ ULONG DumpData[1];\r
+}IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;\r
+\r
+typedef struct _IO_ERROR_LOG_MESSAGE\r
+{\r
+ USHORT Type;\r
+ USHORT Size;\r
+ USHORT DriverNameLength;\r
+ LARGE_INTEGER TimeStamp;\r
+ ULONG DriverNameOffset;\r
+ IO_ERROR_LOG_PACKET EntryData;\r
+} IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;\r
+\r
+typedef struct _CLIENT_ID\r
+{\r
+ HANDLE UniqueProcess;\r
+ HANDLE UniqueThread;\r
+} CLIENT_ID, *PCLIENT_ID;\r
+\r
+typedef struct _KSYSTEM_TIME\r
+{\r
+ ULONG LowPart;\r
+ LONG High1Time;\r
+ LONG High2Time;\r
+} KSYSTEM_TIME, *PKSYSTEM_TIME;\r
+\r
+typedef struct _TIME_FIELDS\r
+{\r
+ CSHORT Year;\r
+ CSHORT Month;\r
+ CSHORT Day;\r
+ CSHORT Hour;\r
+ CSHORT Minute;\r
+ CSHORT Second;\r
+ CSHORT Milliseconds;\r
+ CSHORT Weekday;\r
+} TIME_FIELDS, *PTIME_FIELDS;\r
+\r
+typedef struct _VM_COUNTERS\r
+{\r
+ SIZE_T PeakVirtualSize;\r
+ SIZE_T VirtualSize;\r
+ ULONG PageFaultCount;\r
+ SIZE_T PeakWorkingSetSize;\r
+ SIZE_T WorkingSetSize;\r
+ SIZE_T QuotaPeakPagedPoolUsage;\r
+ SIZE_T QuotaPagedPoolUsage;\r
+ SIZE_T QuotaPeakNonPagedPoolUsage;\r
+ SIZE_T QuotaNonPagedPoolUsage;\r
+ SIZE_T PagefileUsage;\r
+ SIZE_T PeakPagefileUsage;\r
+} VM_COUNTERS, *PVM_COUNTERS;\r
+\r
+typedef struct _VM_COUNTERS_EX\r
+{\r
+ SIZE_T PeakVirtualSize;\r
+ SIZE_T VirtualSize;\r
+ ULONG PageFaultCount;\r
+ SIZE_T PeakWorkingSetSize;\r
+ SIZE_T WorkingSetSize;\r
+ SIZE_T QuotaPeakPagedPoolUsage;\r
+ SIZE_T QuotaPagedPoolUsage;\r
+ SIZE_T QuotaPeakNonPagedPoolUsage;\r
+ SIZE_T QuotaNonPagedPoolUsage;\r
+ SIZE_T PagefileUsage;\r
+ SIZE_T PeakPagefileUsage;\r
+ SIZE_T PrivateUsage;\r
+} VM_COUNTERS_EX, *PVM_COUNTERS_EX;\r
+\r
+/**** Information Types ****/\r
+\r
+/*\r
+ * Registry Key Set\r
+ */\r
+\r
+/* Class 0 */\r
+typedef struct _KEY_WRITE_TIME_INFORMATION\r
+{\r
+ LARGE_INTEGER LastWriteTime;\r
+} KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;\r
+\r
+/* Class 1 */\r
+typedef struct _KEY_USER_FLAGS_INFORMATION\r
+{\r
+ ULONG UserFlags;\r
+} KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION;\r
+\r
+typedef struct _KEY_FULL_INFORMATION\r
+{\r
+ LARGE_INTEGER LastWriteTime;\r
+ ULONG TitleIndex;\r
+ ULONG ClassOffset;\r
+ ULONG ClassLength;\r
+ ULONG SubKeys;\r
+ ULONG MaxNameLen;\r
+ ULONG MaxClassLen;\r
+ ULONG Values;\r
+ ULONG MaxValueNameLen;\r
+ ULONG MaxValueDataLen;\r
+ WCHAR Class[1];\r
+} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;\r
+\r
+typedef struct _KEY_NODE_INFORMATION\r
+{\r
+ LARGE_INTEGER LastWriteTime;\r
+ ULONG TitleIndex;\r
+ ULONG ClassOffset;\r
+ ULONG ClassLength;\r
+ ULONG NameLength;\r
+ WCHAR Name[1];\r
+} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;\r
+\r
+/*\r
+ * File\r
+ */\r
+\r
+/* Class 1 */\r
+typedef struct _FILE_BASIC_INFORMATION\r
+{\r
+ LARGE_INTEGER CreationTime;\r
+ LARGE_INTEGER LastAccessTime;\r
+ LARGE_INTEGER LastWriteTime;\r
+ LARGE_INTEGER ChangeTime;\r
+ ULONG FileAttributes;\r
+} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;\r
+\r
+/* Class 2 */\r
+typedef struct _FILE_STANDARD_INFORMATION\r
+{\r
+ LARGE_INTEGER AllocationSize;\r
+ LARGE_INTEGER EndOfFile;\r
+ ULONG NumberOfLinks;\r
+ BOOLEAN DeletePending;\r
+ BOOLEAN Directory;\r
+} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;\r
+\r
+typedef struct _FILE_NETWORK_OPEN_INFORMATION\r
+{\r
+ LARGE_INTEGER CreationTime;\r
+ LARGE_INTEGER LastAccessTime;\r
+ LARGE_INTEGER LastWriteTime;\r
+ LARGE_INTEGER ChangeTime;\r
+ LARGE_INTEGER AllocationSize;\r
+ LARGE_INTEGER EndOfFile;\r
+ ULONG FileAttributes;\r
+} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;\r
+\r
+typedef struct _FILE_EA_INFORMATION\r
+{\r
+ ULONG EaSize;\r
+} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;\r
+\r
+typedef struct _FILE_COMPRESSION_INFORMATION\r
+{\r
+ LARGE_INTEGER CompressedFileSize;\r
+ USHORT CompressionFormat;\r
+ UCHAR CompressionUnitShift;\r
+ UCHAR ChunkShift;\r
+ UCHAR ClusterShift;\r
+ UCHAR Reserved[3];\r
+} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;\r
+\r
+typedef struct _FILE_POSITION_INFORMATION\r
+{\r
+ LARGE_INTEGER CurrentByteOffset;\r
+} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;\r
+\r
+typedef struct _FILE_DISPOSITION_INFORMATION\r
+{\r
+ BOOLEAN DeleteFile;\r
+} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;\r
+\r
+typedef struct _FILE_FULL_EA_INFORMATION\r
+{\r
+ ULONG NextEntryOffset;\r
+ UCHAR Flags;\r
+ UCHAR EaNameLength;\r
+ USHORT EaValueLength;\r
+ CHAR EaName[1];\r
+} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;\r
+\r
+typedef struct _FILE_QUOTA_INFORMATION\r
+{\r
+ ULONG NextEntryOffset;\r
+ ULONG SidLength;\r
+ LARGE_INTEGER ChangeTime;\r
+ LARGE_INTEGER QuotaUsed;\r
+ LARGE_INTEGER QuotaThreshold;\r
+ LARGE_INTEGER QuotaLimit;\r
+ SID Sid;\r
+} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;\r
+\r
+typedef struct _FILE_INTERNAL_INFORMATION\r
+{\r
+ LARGE_INTEGER IndexNumber;\r
+} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;\r
+\r
+typedef struct _FILE_RENAME_INFORMATION\r
+{\r
+ BOOLEAN ReplaceIfExists;\r
+ HANDLE RootDirectory;\r
+ ULONG FileNameLength;\r
+ WCHAR FileName[1];\r
+} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;\r
+\r
+typedef struct _FILE_PIPE_INFORMATION\r
+{\r
+ ULONG ReadMode;\r
+ ULONG CompletionMode;\r
+} FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;\r
+\r
+typedef struct _FILE_PIPE_LOCAL_INFORMATION\r
+{\r
+ ULONG NamedPipeType;\r
+ ULONG NamedPipeConfiguration;\r
+ ULONG MaximumInstances;\r
+ ULONG CurrentInstances;\r
+ ULONG InboundQuota;\r
+ ULONG ReadDataAvailable;\r
+ ULONG OutboundQuota;\r
+ ULONG WriteQuotaAvailable;\r
+ ULONG NamedPipeState;\r
+ ULONG NamedPipeEnd;\r
+} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;\r
+\r
+typedef struct _FILE_PIPE_REMOTE_INFORMATION\r
+{\r
+ LARGE_INTEGER CollectDataTime;\r
+ ULONG MaximumCollectionCount;\r
+} FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;\r
+\r
+typedef struct _FILE_MAILSLOT_QUERY_INFORMATION\r
+{\r
+ ULONG MaximumMessageSize;\r
+ ULONG MailslotQuota;\r
+ ULONG NextMessageSize;\r
+ ULONG MessagesAvailable;\r
+ LARGE_INTEGER ReadTimeout;\r
+} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;\r
+\r
+typedef struct _FILE_MAILSLOT_SET_INFORMATION\r
+{\r
+ LARGE_INTEGER ReadTimeout;\r
+} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;\r
+\r
+typedef struct _FILE_BOTH_DIR_INFORMATION\r
+{\r
+ ULONG NextEntryOffset;\r
+ ULONG FileIndex;\r
+ LARGE_INTEGER CreationTime;\r
+ LARGE_INTEGER LastAccessTime;\r
+ LARGE_INTEGER LastWriteTime;\r
+ LARGE_INTEGER ChangeTime;\r
+ LARGE_INTEGER EndOfFile;\r
+ LARGE_INTEGER AllocationSize;\r
+ ULONG FileAttributes;\r
+ ULONG FileNameLength;\r
+ ULONG EaSize;\r
+ CCHAR ShortNameLength;\r
+ WCHAR ShortName[12];\r
+ WCHAR FileName[1];\r
+} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;\r
+\r
+typedef struct _FILE_COMPLETION_INFORMATION\r
+{\r
+ HANDLE Port;\r
+ PVOID Key;\r
+} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;\r
+\r
+typedef struct _FILE_LINK_INFORMATION\r
+{\r
+ BOOLEAN ReplaceIfExists;\r
+ HANDLE RootDirectory;\r
+ ULONG FileNameLength;\r
+ WCHAR FileName[1];\r
+} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;\r
+\r
+typedef struct _FILE_NAME_INFORMATION\r
+{\r
+ ULONG FileNameLength;\r
+ WCHAR FileName[1];\r
+} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;\r
+\r
+typedef struct _FILE_ALLOCATION_INFORMATION\r
+{\r
+ LARGE_INTEGER AllocationSize;\r
+} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;\r
+\r
+typedef struct _FILE_END_OF_FILE_INFORMATION\r
+{\r
+ LARGE_INTEGER EndOfFile;\r
+} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;\r
+\r
+typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION\r
+{\r
+ LARGE_INTEGER ValidDataLength;\r
+} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;\r
+\r
+/*\r
+ * File System\r
+ */\r
+typedef struct _FILE_FS_DEVICE_INFORMATION\r
+{\r
+ DEVICE_TYPE DeviceType;\r
+ ULONG Characteristics;\r
+} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;\r
+\r
+typedef struct _FILE_FS_ATTRIBUTE_INFORMATION\r
+{\r
+ ULONG FileSystemAttributes;\r
+ ULONG MaximumComponentNameLength;\r
+ ULONG FileSystemNameLength;\r
+ WCHAR FileSystemName[1];\r
+} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;\r
+\r
+typedef struct _FILE_FS_SIZE_INFORMATION\r
+{\r
+ LARGE_INTEGER TotalAllocationUnits;\r
+ LARGE_INTEGER AvailableAllocationUnits;\r
+ ULONG SectorsPerAllocationUnit;\r
+ ULONG BytesPerSector;\r
+} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;\r
+\r
+typedef struct _FILE_FS_LABEL_INFORMATION\r
+{\r
+ ULONG VolumeLabelLength;\r
+ WCHAR VolumeLabel[1];\r
+} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;\r
+\r
+typedef struct _FILE_FS_VOLUME_INFORMATION\r
+{\r
+ LARGE_INTEGER VolumeCreationTime;\r
+ ULONG VolumeSerialNumber;\r
+ ULONG VolumeLabelLength;\r
+ BOOLEAN SupportsObjects;\r
+ WCHAR VolumeLabel[1];\r
+} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;\r
+\r
+/*\r
+ * Registry Key Value\r
+ */\r
+\r
+/* Class 0 */\r
+typedef struct _KEY_VALUE_ENTRY\r
+{\r
+ PUNICODE_STRING ValueName;\r
+ ULONG DataLength;\r
+ ULONG DataOffset;\r
+ ULONG Type;\r
+} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;\r
+\r
+/* Class 1 */\r
+typedef struct _KEY_VALUE_PARTIAL_INFORMATION\r
+{\r
+ ULONG TitleIndex;\r
+ ULONG Type;\r
+ ULONG DataLength;\r
+ UCHAR Data[1];\r
+} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;\r
+\r
+/* Class 2 */\r
+typedef struct _KEY_VALUE_BASIC_INFORMATION\r
+{\r
+ ULONG TitleIndex;\r
+ ULONG Type;\r
+ ULONG NameLength;\r
+ WCHAR Name[1];\r
+} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;\r
+\r
+/* Class 3 */\r
+typedef struct _KEY_VALUE_FULL_INFORMATION\r
+{\r
+ ULONG TitleIndex;\r
+ ULONG Type;\r
+ ULONG DataOffset;\r
+ ULONG DataLength;\r
+ ULONG NameLength;\r
+ WCHAR Name[1];\r
+} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;\r
+\r
+/*\r
+ * Registry Key\r
+ */\r
+\r
+/* Class 0 */\r
+typedef struct _KEY_BASIC_INFORMATION\r
+{\r
+ LARGE_INTEGER LastWriteTime;\r
+ ULONG TitleIndex;\r
+ ULONG NameLength;\r
+ WCHAR Name[1];\r
+} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;\r
+\r
+/* File Pipe Structures for the FSCTLs */\r
+typedef struct _FILE_PIPE_WAIT_FOR_BUFFER\r
+{\r
+ LARGE_INTEGER Timeout;\r
+ ULONG NameLength;\r
+ BOOLEAN TimeoutSpecified;\r
+ WCHAR Name[1];\r
+} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;\r
+\r
+typedef struct _FILE_PIPE_PEEK_BUFFER\r
+{\r
+ ULONG NamedPipeState;\r
+ ULONG ReadDataAvailable;\r
+ ULONG NumberOfMessages;\r
+ ULONG MessageLength;\r
+ CHAR Data[1];\r
+} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;\r
+\r
+/* The Kerner/User Shared Data Structure */\r
+typedef struct _KUSER_SHARED_DATA\r
+{\r
+ ULONG TickCountLowDeprecated;\r
+ ULONG TickCountMultiplier;\r
+ volatile KSYSTEM_TIME InterruptTime;\r
+ volatile KSYSTEM_TIME SystemTime;\r
+ volatile KSYSTEM_TIME TimeZoneBias;\r
+ USHORT ImageNumberLow;\r
+ USHORT ImageNumberHigh;\r
+ WCHAR NtSystemRoot[260];\r
+ ULONG MaxStackTraceDepth;\r
+ ULONG CryptoExponent;\r
+ ULONG TimeZoneId;\r
+ ULONG LargePageMinimum;\r
+ ULONG Reserved2[7];\r
+ NT_PRODUCT_TYPE NtProductType;\r
+ BOOLEAN ProductTypeIsValid;\r
+ ULONG NtMajorVersion;\r
+ ULONG NtMinorVersion;\r
+ BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];\r
+ ULONG Reserved1;\r
+ ULONG Reserved3;\r
+ volatile ULONG TimeSlip;\r
+ ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;\r
+ LARGE_INTEGER SystemExpirationDate;\r
+ ULONG SuiteMask;\r
+ BOOLEAN KdDebuggerEnabled;\r
+ volatile ULONG ActiveConsoleId;\r
+ volatile ULONG DismountCount;\r
+ ULONG ComPlusPackage;\r
+ ULONG LastSystemRITEventTickCount;\r
+ ULONG NumberOfPhysicalPages;\r
+ BOOLEAN SafeBootMode;\r
+ ULONG TraceLogging;\r
+ ULONGLONG Fill0;\r
+ ULONGLONG SystemCall[4];\r
+ union {\r
+ volatile KSYSTEM_TIME TickCount;\r
+ volatile ULONG64 TickCountQuad;\r
+ };\r
+} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;\r
+\r
+/* Run-Time Library (RTL) Types */\r
+typedef struct _RTL_BITMAP\r
+{\r
+ ULONG SizeOfBitMap;\r
+ PULONG Buffer;\r
+} RTL_BITMAP, *PRTL_BITMAP;\r
+\r
+typedef struct _RTL_BITMAP_RUN\r
+{\r
+ ULONG StartingIndex;\r
+ ULONG NumberOfBits;\r
+} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;\r
+\r
+typedef struct _COMPRESSED_DATA_INFO\r
+{\r
+ USHORT CompressionFormatAndEngine;\r
+ UCHAR CompressionUnitShift;\r
+ UCHAR ChunkShift;\r
+ UCHAR ClusterShift;\r
+ UCHAR Reserved;\r
+ USHORT NumberOfChunks;\r
+ ULONG CompressedChunkSizes[ANYSIZE_ARRAY];\r
+} COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;\r
+\r
+typedef struct _GENERATE_NAME_CONTEXT\r
+{\r
+ USHORT Checksum;\r
+ BOOLEAN CheckSumInserted;\r
+ UCHAR NameLength;\r
+ WCHAR NameBuffer[8];\r
+ ULONG ExtensionLength;\r
+ WCHAR ExtensionBuffer[4];\r
+ ULONG LastIndexValue;\r
+} GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;\r
+\r
+typedef struct _RTL_SPLAY_LINKS\r
+{\r
+ struct _RTL_SPLAY_LINKS *Parent;\r
+ struct _RTL_SPLAY_LINKS *LeftChild;\r
+ struct _RTL_SPLAY_LINKS *RightChild;\r
+} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;\r
+\r
+struct _RTL_AVL_TABLE;\r
+struct _RTL_GENERIC_TABLE;\r
+\r
+typedef NTSTATUS\r
+(NTAPI *PRTL_AVL_MATCH_FUNCTION)(\r
+ struct _RTL_AVL_TABLE *Table,\r
+ PVOID UserData,\r
+ PVOID MatchData\r
+);\r
+\r
+typedef RTL_GENERIC_COMPARE_RESULTS\r
+(NTAPI *PRTL_AVL_COMPARE_ROUTINE) (\r
+ struct _RTL_AVL_TABLE *Table,\r
+ PVOID FirstStruct,\r
+ PVOID SecondStruct\r
+);\r
+\r
+typedef RTL_GENERIC_COMPARE_RESULTS\r
+(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (\r
+ struct _RTL_GENERIC_TABLE *Table,\r
+ PVOID FirstStruct,\r
+ PVOID SecondStruct\r
+);\r
+\r
+typedef PVOID\r
+(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (\r
+ struct _RTL_GENERIC_TABLE *Table,\r
+ LONG ByteSize\r
+);\r
+\r
+typedef VOID\r
+(NTAPI *PRTL_GENERIC_FREE_ROUTINE) (\r
+ struct _RTL_GENERIC_TABLE *Table,\r
+ PVOID Buffer\r
+);\r
+\r
+typedef VOID\r
+(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (\r
+ struct _RTL_AVL_TABLE *Table,\r
+ LONG ByteSize\r
+);\r
+\r
+typedef VOID\r
+(NTAPI *PRTL_AVL_FREE_ROUTINE) (\r
+ struct _RTL_AVL_TABLE *Table,\r
+ PVOID Buffer\r
+);\r
+\r
+typedef struct _RTL_GENERIC_TABLE\r
+{\r
+ PRTL_SPLAY_LINKS TableRoot;\r
+ LIST_ENTRY InsertOrderList;\r
+ PLIST_ENTRY OrderedPointer;\r
+ ULONG WhichOrderedElement;\r
+ ULONG NumberGenericTableElements;\r
+ PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;\r
+ PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;\r
+ PRTL_GENERIC_FREE_ROUTINE FreeRoutine;\r
+ PVOID TableContext;\r
+} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;\r
+\r
+typedef struct _RTL_BALANCED_LINKS\r
+{\r
+ struct _RTL_BALANCED_LINKS *Parent;\r
+ struct _RTL_BALANCED_LINKS *LeftChild;\r
+ struct _RTL_BALANCED_LINKS *RightChild;\r
+ CHAR Balance;\r
+ UCHAR Reserved[3];\r
+} RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;\r
+\r
+typedef struct _RTL_AVL_TABLE\r
+{\r
+ RTL_BALANCED_LINKS BalancedRoot;\r
+ PVOID OrderedPointer;\r
+ ULONG WhichOrderedElement;\r
+ ULONG NumberGenericTableElements;\r
+ ULONG DepthOfTree;\r
+ PRTL_BALANCED_LINKS RestartKey;\r
+ ULONG DeleteCount;\r
+ PRTL_AVL_COMPARE_ROUTINE CompareRoutine;\r
+ PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;\r
+ PRTL_AVL_FREE_ROUTINE FreeRoutine;\r
+ PVOID TableContext;\r
+} RTL_AVL_TABLE, *PRTL_AVL_TABLE;\r
+\r
+typedef NTSTATUS\r
+(NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)(\r
+ IN PWSTR ValueName,\r
+ IN ULONG ValueType,\r
+ IN PVOID ValueData,\r
+ IN ULONG ValueLength,\r
+ IN PVOID Context,\r
+ IN PVOID EntryContext\r
+);\r
+\r
+typedef struct _RTL_QUERY_REGISTRY_TABLE\r
+{\r
+ PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;\r
+ ULONG Flags;\r
+ PWSTR Name;\r
+ PVOID EntryContext;\r
+ ULONG DefaultType;\r
+ PVOID DefaultData;\r
+ ULONG DefaultLength;\r
+} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;\r
+\r
+typedef struct _UNICODE_PREFIX_TABLE_ENTRY\r
+{\r
+ CSHORT NodeTypeCode;\r
+ CSHORT NameLength;\r
+ struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;\r
+ struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;\r
+ RTL_SPLAY_LINKS Links;\r
+ PUNICODE_STRING Prefix;\r
+} UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;\r
+\r
+typedef struct _UNICODE_PREFIX_TABLE\r
+{\r
+ CSHORT NodeTypeCode;\r
+ CSHORT NameLength;\r
+ PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;\r
+ PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;\r
+} UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;\r
+\r
+/* FIXME - need FAST_MUTEX and PHANDLE_TABLE for RTL_ATOM_TABLE in umode! */\r
+typedef void *FAST_MUTEX;\r
+typedef void *PHANDLE_TABLE;\r
+\r
+typedef OSVERSIONINFOW RTL_OSVERSIONINFOW;\r
+typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW;\r
+typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW;\r
+typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW;\r
+\r
+#endif\r