- Add RtlSetProcessCritical
[reactos.git] / reactos / include / ndk / umtypes.h
index b09a9d4..e05386e 100644 (file)
-/*\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
+/*
+ * 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
+ */
+
+#if !defined(_NTDEF_) && !defined(_NTDEF_H)
+#define _NTDEF_
+#define _NTDEF_H
+
+/* DEPENDENCIES **************************************************************/
+#include <winioctl.h>
+#include <ntnls.h>
+
+/* Undef the following to avoid conflects including ntstatus.h with winnt.h */
+#undef STATUS_WAIT_0
+#undef STATUS_ABANDONED_WAIT_0
+#undef STATUS_USER_APC
+#undef STATUS_TIMEOUT
+#undef STATUS_PENDING
+#undef DBG_EXCEPTION_HANDLED
+#undef DBG_CONTINUE
+#undef STATUS_SEGMENT_NOTIFICATION
+#undef DBG_TERMINATE_THREAD
+#undef DBG_TERMINATE_PROCESS
+#undef DBG_CONTROL_C
+#undef DBG_CONTROL_BREAK
+#undef DBG_COMMAND_EXCEPTION
+#undef STATUS_GUARD_PAGE_VIOLATION
+#undef STATUS_DATATYPE_MISALIGNMENT
+#undef STATUS_BREAKPOINT
+#undef STATUS_SINGLE_STEP
+#undef DBG_EXCEPTION_NOT_HANDLED
+#undef STATUS_ACCESS_VIOLATION
+#undef STATUS_IN_PAGE_ERROR
+#undef STATUS_INVALID_HANDLE
+#undef STATUS_NO_MEMORY
+#undef STATUS_ILLEGAL_INSTRUCTION
+#undef STATUS_NONCONTINUABLE_EXCEPTION
+#undef STATUS_INVALID_DISPOSITION
+#undef STATUS_ARRAY_BOUNDS_EXCEEDED
+#undef STATUS_FLOAT_DENORMAL_OPERAND
+#undef STATUS_FLOAT_DIVIDE_BY_ZERO
+#undef STATUS_FLOAT_INEXACT_RESULT
+#undef STATUS_FLOAT_INVALID_OPERATION
+#undef STATUS_FLOAT_OVERFLOW
+#undef STATUS_FLOAT_STACK_CHECK
+#undef STATUS_FLOAT_UNDERFLOW
+#undef STATUS_INTEGER_DIVIDE_BY_ZERO
+#undef STATUS_INTEGER_OVERFLOW
+#undef STATUS_PRIVILEGED_INSTRUCTION
+#undef STATUS_STACK_OVERFLOW
+#undef STATUS_CONTROL_C_EXIT
+#undef STATUS_FLOAT_MULTIPLE_FAULTS
+#undef STATUS_FLOAT_MULTIPLE_TRAPS
+#undef STATUS_REG_NAT_CONSUMPTION
+#undef STATUS_SXS_EARLY_DEACTIVATION
+#undef STATUS_SXS_INVALID_DEACTIVATION
+
+#include <ntstatus.h>
+
+/* CONSTANTS *****************************************************************/
+
+/* NTAPI/NTOSAPI Define */
+#define DECLSPEC_ADDRSAFE
+#define NTAPI __stdcall
+#define FASTCALL __fastcall
+#if !defined(_NTSYSTEM_)
+#define NTSYSAPI     DECLSPEC_IMPORT
+#define NTSYSCALLAPI DECLSPEC_IMPORT
+#else
+#define NTSYSAPI
+#if defined(_NTDLLBUILD_)
+#define NTSYSCALLAPI
+#else
+#define NTSYSCALLAPI DECLSPEC_ADDRSAFE
+#endif
+#endif
+#if !defined(_M_CEE_PURE)
+#define NTAPI_INLINE    NTAPI
+#else
+#define NTAPI_INLINE
+#endif
+
+/* 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)
+
+/* Limits */
+#define MINCHAR             0x80
+#define MAXCHAR             0x7f
+#define MINSHORT            0x8000
+#define MAXSHORT            0x7fff
+#define MINLONG             0x80000000
+#define MAXLONG             0x7fffffff
+#define MAXUCHAR            0xff
+#define MAXUSHORT           0xffff
+#define MAXULONG            0xffffffff
+
+/* TYPES *********************************************************************/
+
+/* Basic Types that aren't defined in User-Mode Headers */
+typedef CONST int CINT;
+typedef CONST char *PCSZ;
+typedef ULONG CLONG;
+typedef short CSHORT;
+typedef CSHORT *PCSHORT;
+typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
+typedef LONG KPRIORITY;
+typedef LONG NTSTATUS, *PNTSTATUS;
+#define STATIC static
+
+/* 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 CONST STRING* PCOEM_STRING;
+typedef STRING CANSI_STRING;
+typedef PSTRING PCANSI_STRING;
+
+#endif