[HEADERS]
[reactos.git] / reactos / include / ndk / cmtypes.h
index 2c6cef5..36840f6 100644 (file)
-/*++ NDK Version: 0095\r
-\r
-Copyright (c) Alex Ionescu.  All rights reserved.\r
-\r
-Header Name:\r
-\r
-    cmtypes.h\r
-\r
-Abstract:\r
-\r
-    Type definitions for the Configuration Manager.\r
-\r
-Author:\r
-\r
-    Alex Ionescu (alex.ionescu@reactos.com)   06-Oct-2004\r
-\r
---*/\r
-\r
-#ifndef _CMTYPES_H\r
-#define _CMTYPES_H\r
-\r
-//\r
-// Dependencies\r
-//\r
-#include <cfg.h>\r
-#include "iotypes.h"\r
-\r
-#define MAX_BUS_NAME 24\r
-\r
-//\r
-// PLUGPLAY_CONTROL_RELATED_DEVICE_DATA.Relations\r
-//\r
-#define PNP_GET_PARENT_DEVICE           1\r
-#define PNP_GET_CHILD_DEVICE            2\r
-#define PNP_GET_SIBLING_DEVICE          3\r
-\r
-//\r
-// PLUGPLAY_CONTROL_STATUS_DATA Operations\r
-//\r
-#define PNP_GET_DEVICE_STATUS           0\r
-#define PNP_SET_DEVICE_STATUS           1\r
-#define PNP_CLEAR_DEVICE_STATUS         2\r
-\r
-//\r
-// Resource Type\r
-//\r
-#define CmResourceTypeNull                      0\r
-#define CmResourceTypePort                      1\r
-#define CmResourceTypeInterrupt                 2\r
-#define CmResourceTypeMemory                    3\r
-#define CmResourceTypeDma                       4\r
-#define CmResourceTypeDeviceSpecific            5\r
-#define CmResourceTypeBusNumber                 6\r
-#define CmResourceTypeMaximum                   7\r
-#define CmResourceTypeNonArbitrated             128\r
-#define CmResourceTypeConfigData                128\r
-#define CmResourceTypeDevicePrivate             129\r
-#define CmResourceTypePcCardConfig              130\r
-#define CmResourceTypeMfCardConfig              131\r
-\r
-#ifdef NTOS_MODE_USER\r
-\r
-//\r
-// Resource Descriptor Share Dispositions\r
-//\r
-typedef enum _CM_SHARE_DISPOSITION\r
-{\r
-    CmResourceShareUndetermined,\r
-    CmResourceShareDeviceExclusive,\r
-    CmResourceShareDriverExclusive,\r
-    CmResourceShareShared\r
-} CM_SHARE_DISPOSITION;\r
-\r
-#endif\r
-\r
-//\r
-// Port Resource Descriptor Flags\r
-//\r
-#define CM_RESOURCE_PORT_MEMORY                 0x0000\r
-#define CM_RESOURCE_PORT_IO                     0x0001\r
-#define CM_RESOURCE_PORT_10_BIT_DECODE          0x0004\r
-#define CM_RESOURCE_PORT_12_BIT_DECODE          0x0008\r
-#define CM_RESOURCE_PORT_16_BIT_DECODE          0x0010\r
-#define CM_RESOURCE_PORT_POSITIVE_DECODE        0x0020\r
-#define CM_RESOURCE_PORT_PASSIVE_DECODE         0x0040\r
-#define CM_RESOURCE_PORT_WINDOW_DECODE          0x0080\r
-\r
-//\r
-// Interrupt Resource Descriptor Flags\r
-//\r
-#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE   0x0000\r
-#define CM_RESOURCE_INTERRUPT_LATCHED           0x0001\r
-\r
-//\r
-// Memory Resource Descriptor Flags\r
-//\r
-#define CM_RESOURCE_MEMORY_READ_WRITE     0x0000\r
-#define CM_RESOURCE_MEMORY_READ_ONLY      0x0001\r
-#define CM_RESOURCE_MEMORY_WRITE_ONLY     0x0002\r
-#define CM_RESOURCE_MEMORY_PREFETCHABLE   0x0004\r
-#define CM_RESOURCE_MEMORY_COMBINEDWRITE  0x0008\r
-#define CM_RESOURCE_MEMORY_24             0x0010\r
-#define CM_RESOURCE_MEMORY_CACHEABLE      0x0020\r
-\r
-//\r
-// DMA Resource Descriptor Flags\r
-//\r
-#define CM_RESOURCE_DMA_8                 0x0000\r
-#define CM_RESOURCE_DMA_16                0x0001\r
-#define CM_RESOURCE_DMA_32                0x0002\r
-#define CM_RESOURCE_DMA_8_AND_16          0x0004\r
-#define CM_RESOURCE_DMA_BUS_MASTER        0x0008\r
-#define CM_RESOURCE_DMA_TYPE_A            0x0010\r
-#define CM_RESOURCE_DMA_TYPE_B            0x0020\r
-#define CM_RESOURCE_DMA_TYPE_F            0x0040\r
-\r
-#ifdef NTOS_MODE_USER\r
-\r
-//\r
-// Information Classes for NtQueryKey\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
-typedef enum _KEY_VALUE_INFORMATION_CLASS\r
-{\r
-    KeyValueBasicInformation,\r
-    KeyValueFullInformation,\r
-    KeyValuePartialInformation,\r
-    KeyValueFullInformationAlign64,\r
-    KeyValuePartialInformationAlign64\r
-} KEY_VALUE_INFORMATION_CLASS;\r
-\r
-typedef enum _KEY_SET_INFORMATION_CLASS\r
-{\r
-    KeyWriteTimeInformation,\r
-    KeyUserFlagsInformation,\r
-    MaxKeySetInfoClass\r
-} KEY_SET_INFORMATION_CLASS;\r
-\r
-#endif\r
-\r
-//\r
-// Plag and Play Classes\r
-//\r
-typedef enum _PLUGPLAY_CONTROL_CLASS\r
-{\r
-    PlugPlayControlUserResponse = 0x07,\r
-    PlugPlayControlProperty = 0x0A,\r
-    PlugPlayControlGetRelatedDevice = 0x0C,\r
-    PlugPlayControlDeviceStatus = 0x0E,\r
-    PlugPlayControlGetDeviceDepth,\r
-    PlugPlayControlResetDevice = 0x14\r
-} PLUGPLAY_CONTROL_CLASS;\r
-\r
-typedef enum _PLUGPLAY_BUS_CLASS\r
-{\r
-    SystemBus,\r
-    PlugPlayVirtualBus,\r
-    MaxPlugPlayBusClass\r
-} PLUGPLAY_BUS_CLASS, *PPLUGPLAY_BUS_CLASS;\r
-\r
-//\r
-// Plag and Play Bus Types\r
-//\r
-typedef enum _PLUGPLAY_VIRTUAL_BUS_TYPE\r
-{\r
-    Root,\r
-    MaxPlugPlayVirtualBusType\r
-} PLUGPLAY_VIRTUAL_BUS_TYPE, *PPLUGPLAY_VIRTUAL_BUS_TYPE;\r
-\r
-//\r
-// Plag and Play Event Categories\r
-//\r
-typedef enum _PLUGPLAY_EVENT_CATEGORY\r
-{\r
-    HardwareProfileChangeEvent,\r
-    TargetDeviceChangeEvent,\r
-    DeviceClassChangeEvent,\r
-    CustomDeviceEvent,\r
-    DeviceInstallEvent,\r
-    DeviceArrivalEvent,\r
-    PowerEvent,\r
-    VetoEvent,\r
-    BlockedDriverEvent,\r
-    MaxPlugEventCategory\r
-} PLUGPLAY_EVENT_CATEGORY;\r
-\r
-#ifdef NTOS_MODE_USER\r
-\r
-//\r
-// Information Structures for NtQueryKeyInformation\r
-//\r
-typedef struct _KEY_WRITE_TIME_INFORMATION\r
-{\r
-    LARGE_INTEGER LastWriteTime;\r
-} KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;\r
-\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
-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
-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
-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
-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
-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
-#endif\r
-\r
-//\r
-// Plug and Play Event Block\r
-//\r
-typedef struct _PLUGPLAY_EVENT_BLOCK\r
-{\r
-    GUID EventGuid;\r
-    PLUGPLAY_EVENT_CATEGORY EventCategory;\r
-    PULONG Result;\r
-    ULONG Flags;\r
-    ULONG TotalSize;\r
-    PVOID DeviceObject;\r
-    union\r
-    {\r
-        struct\r
-        {\r
-            GUID ClassGuid;\r
-            WCHAR SymbolicLinkName[ANYSIZE_ARRAY];\r
-        } DeviceClass;\r
-        struct\r
-        {\r
-            WCHAR DeviceIds[ANYSIZE_ARRAY];\r
-        } TargetDevice;\r
-        struct\r
-        {\r
-            WCHAR DeviceId[ANYSIZE_ARRAY];\r
-        } InstallDevice;\r
-        struct\r
-        {\r
-            PVOID NotificationStructure;\r
-            WCHAR DeviceIds[ANYSIZE_ARRAY];\r
-        } CustomNotification;\r
-        struct\r
-        {\r
-            PVOID Notification;\r
-        } ProfileNotification;\r
-        struct\r
-        {\r
-            ULONG NotificationCode;\r
-            ULONG NotificationData;\r
-        } PowerNotification;\r
-        struct\r
-        {\r
-            PNP_VETO_TYPE VetoType;\r
-            WCHAR DeviceIdVetoNameBuffer[ANYSIZE_ARRAY];\r
-        } VetoNotification;\r
-        struct\r
-        {\r
-            GUID BlockedDriverGuid;\r
-        } BlockedDriverNotification;\r
-    };\r
-} PLUGPLAY_EVENT_BLOCK, *PPLUGPLAY_EVENT_BLOCK;\r
-\r
-//\r
-// Plug and Play Control Classes\r
-//\r
-\r
-//Class 0x0A\r
-typedef struct _PLUGPLAY_CONTROL_PROPERTY_DATA\r
-{\r
-    UNICODE_STRING DeviceInstance;\r
-    ULONG Property;\r
-    PVOID Buffer;\r
-    ULONG BufferSize;\r
-} PLUGPLAY_CONTROL_PROPERTY_DATA, *PPLUGPLAY_CONTROL_PROPERTY_DATA;\r
-\r
-// Class 0x0C\r
-typedef struct _PLUGPLAY_CONTROL_RELATED_DEVICE_DATA\r
-{\r
-    UNICODE_STRING TargetDeviceInstance;\r
-    ULONG Relation;\r
-    UNICODE_STRING RelatedDeviceInstance;\r
-} PLUGPLAY_CONTROL_RELATED_DEVICE_DATA, *PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA;\r
-\r
-// Class 0x0E\r
-typedef struct _PLUGPLAY_CONTOL_STATUS_DATA\r
-{\r
-    UNICODE_STRING DeviceInstance;\r
-    ULONG Operation;\r
-    ULONG DeviceStatus;\r
-    ULONG DeviceProblem;\r
-} PLUGPLAY_CONTROL_STATUS_DATA, *PPLUGPLAY_CONTROL_STATUS_DATA;\r
-\r
-// Class 0x0F\r
-typedef struct _PLUGPLAY_CONTROL_DEPTH_DATA\r
-{\r
-    UNICODE_STRING DeviceInstance;\r
-    ULONG Depth;\r
-} PLUGPLAY_CONTROL_DEPTH_DATA, *PPLUGPLAY_CONTROL_DEPTH_DATA;\r
-\r
-// Class 0x14\r
-typedef struct _PLUGPLAY_CONTROL_RESET_DEVICE_DATA\r
-{\r
-   UNICODE_STRING DeviceInstance;\r
-} PLUGPLAY_CONTROL_RESET_DEVICE_DATA, *PPLUGPLAY_CONTROL_RESET_DEVICE_DATA;\r
-\r
-//\r
-// Plug and Play Bus Type Definition\r
-//\r
-typedef struct _PLUGPLAY_BUS_TYPE\r
-{\r
-    PLUGPLAY_BUS_CLASS BusClass;\r
-    union\r
-    {\r
-        INTERFACE_TYPE SystemBusType;\r
-        PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType;\r
-    };\r
-} PLUGPLAY_BUS_TYPE, *PPLUGPLAY_BUS_TYPE;\r
-\r
-//\r
-// Plug and Play Bus Instance Definition\r
-//\r
-typedef struct _PLUGPLAY_BUS_INSTANCE\r
-{\r
-    PLUGPLAY_BUS_TYPE BusType;\r
-    ULONG BusNumber;\r
-    WCHAR BusName[MAX_BUS_NAME];\r
-} PLUGPLAY_BUS_INSTANCE, *PPLUGPLAY_BUS_INSTANCE;\r
-\r
-#ifdef NTOS_MODE_USER\r
-\r
-//\r
-// Partial Resource Descriptor and List for Hardware\r
-//\r
-#include <pshpack1.h>\r
-typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR\r
-{\r
-    UCHAR Type;\r
-    UCHAR ShareDisposition;\r
-    USHORT Flags;\r
-    union\r
-    {\r
-        struct\r
-        {\r
-            PHYSICAL_ADDRESS Start;\r
-            ULONG Length;\r
-        } Generic;\r
-        struct\r
-        {\r
-            PHYSICAL_ADDRESS Start;\r
-            ULONG Length;\r
-        } Port;\r
-        struct\r
-        {\r
-            ULONG Level;\r
-            ULONG Vector;\r
-            ULONG Affinity;\r
-        } Interrupt;\r
-        struct\r
-        {\r
-            PHYSICAL_ADDRESS Start;\r
-            ULONG Length;\r
-        } Memory;\r
-        struct\r
-        {\r
-            ULONG Channel;\r
-            ULONG Port;\r
-            ULONG Reserved1;\r
-        } Dma;\r
-        struct\r
-        {\r
-          ULONG Data[3];\r
-        } DevicePrivate;\r
-        struct\r
-        {\r
-            ULONG Start;\r
-            ULONG Length;\r
-            ULONG Reserved;\r
-        } BusNumber;\r
-        struct\r
-        {\r
-            ULONG DataSize;\r
-            ULONG Reserved1;\r
-            ULONG Reserved2;\r
-        } DeviceSpecificData;\r
-    } u;\r
-} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;\r
-\r
-typedef struct _CM_PARTIAL_RESOURCE_LIST\r
-{\r
-    USHORT Version;\r
-    USHORT Revision;\r
-    ULONG Count;\r
-    CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];\r
-} CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;\r
-\r
-//\r
-// Full Resource Descriptor and List for Hardware\r
-//\r
-typedef struct _CM_FULL_RESOURCE_DESCRIPTOR\r
-{\r
-    INTERFACE_TYPE InterfaceType;\r
-    ULONG BusNumber;\r
-    CM_PARTIAL_RESOURCE_LIST PartialResourceList;\r
-} CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;\r
-\r
-typedef struct _CM_RESOURCE_LIST\r
-{\r
-    ULONG Count;\r
-    CM_FULL_RESOURCE_DESCRIPTOR List[1];\r
-} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;\r
-\r
-//\r
-// Disk/INT13 Structures\r
-//\r
-typedef struct _CM_INT13_DRIVE_PARAMETER\r
-{\r
-    USHORT DriveSelect;\r
-    ULONG MaxCylinders;\r
-    USHORT SectorsPerTrack;\r
-    USHORT MaxHeads;\r
-    USHORT NumberDrives;\r
-} CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;\r
-\r
-typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA\r
-{\r
-    ULONG BytesPerSector;\r
-    ULONG NumberOfCylinders;\r
-    ULONG SectorsPerTrack;\r
-    ULONG NumberOfHeads;\r
-} CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;\r
-\r
-#include <poppack.h>\r
-\r
-#endif // _!NTOS_MODE_USER\r
-\r
-#endif // _CMTYPES_H\r
-\r
+/*++ NDK Version: 0098
+
+Copyright (c) Alex Ionescu.  All rights reserved.
+
+Header Name:
+
+    cmtypes.h
+
+Abstract:
+
+    Type definitions for the Configuration Manager.
+
+Author:
+
+    Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
+
+--*/
+
+#ifndef _CMTYPES_H
+#define _CMTYPES_H
+
+//
+// Dependencies
+//
+#include <umtypes.h>
+#include <cfg.h>
+#include <iotypes.h>
+
+#define MAX_BUS_NAME 24
+
+//
+// PLUGPLAY_CONTROL_RELATED_DEVICE_DATA.Relations
+//
+#define PNP_GET_PARENT_DEVICE           1
+#define PNP_GET_CHILD_DEVICE            2
+#define PNP_GET_SIBLING_DEVICE          3
+
+//
+// PLUGPLAY_CONTROL_STATUS_DATA Operations
+//
+#define PNP_GET_DEVICE_STATUS           0
+#define PNP_SET_DEVICE_STATUS           1
+#define PNP_CLEAR_DEVICE_STATUS         2
+
+#ifdef NTOS_MODE_USER
+
+//
+// Resource Type
+//
+#define CmResourceTypeNull                      0
+#define CmResourceTypePort                      1
+#define CmResourceTypeInterrupt                 2
+#define CmResourceTypeMemory                    3
+#define CmResourceTypeDma                       4
+#define CmResourceTypeDeviceSpecific            5
+#define CmResourceTypeBusNumber                 6
+#define CmResourceTypeMemoryLarge               7
+#define CmResourceTypeNonArbitrated             128
+#define CmResourceTypeConfigData                128
+#define CmResourceTypeDevicePrivate             129
+#define CmResourceTypePcCardConfig              130
+#define CmResourceTypeMfCardConfig              131
+
+
+//
+// Resource Descriptor Share Dispositions
+//
+typedef enum _CM_SHARE_DISPOSITION
+{
+    CmResourceShareUndetermined,
+    CmResourceShareDeviceExclusive,
+    CmResourceShareDriverExclusive,
+    CmResourceShareShared
+} CM_SHARE_DISPOSITION;
+
+#endif
+
+//
+// Port Resource Descriptor Flags
+//
+#define CM_RESOURCE_PORT_MEMORY                 0x0000
+#define CM_RESOURCE_PORT_IO                     0x0001
+#define CM_RESOURCE_PORT_10_BIT_DECODE          0x0004
+#define CM_RESOURCE_PORT_12_BIT_DECODE          0x0008
+#define CM_RESOURCE_PORT_16_BIT_DECODE          0x0010
+#define CM_RESOURCE_PORT_POSITIVE_DECODE        0x0020
+#define CM_RESOURCE_PORT_PASSIVE_DECODE         0x0040
+#define CM_RESOURCE_PORT_WINDOW_DECODE          0x0080
+
+//
+// Memory Resource Descriptor Flags
+//
+#define CM_RESOURCE_MEMORY_READ_WRITE     0x0000
+#define CM_RESOURCE_MEMORY_READ_ONLY      0x0001
+#define CM_RESOURCE_MEMORY_WRITE_ONLY     0x0002
+#define CM_RESOURCE_MEMORY_PREFETCHABLE   0x0004
+#define CM_RESOURCE_MEMORY_COMBINEDWRITE  0x0008
+#define CM_RESOURCE_MEMORY_24             0x0010
+#define CM_RESOURCE_MEMORY_CACHEABLE      0x0020
+
+//
+// DMA Resource Descriptor Flags
+//
+#define CM_RESOURCE_DMA_8                 0x0000
+#define CM_RESOURCE_DMA_16                0x0001
+#define CM_RESOURCE_DMA_32                0x0002
+#define CM_RESOURCE_DMA_8_AND_16          0x0004
+#define CM_RESOURCE_DMA_BUS_MASTER        0x0008
+#define CM_RESOURCE_DMA_TYPE_A            0x0010
+#define CM_RESOURCE_DMA_TYPE_B            0x0020
+#define CM_RESOURCE_DMA_TYPE_F            0x0040
+
+//
+// NtInitializeRegistry Flags
+//
+#define CM_BOOT_FLAG_SMSS                 0x0000
+#define CM_BOOT_FLAG_SETUP                0x0001
+#define CM_BOOT_FLAG_ACCEPTED             0x0002
+#define CM_BOOT_FLAG_MAX                  0x03E9
+
+#ifdef NTOS_MODE_USER
+
+//
+// Information Classes for NtQueryKey
+//
+typedef enum _KEY_INFORMATION_CLASS
+{
+    KeyBasicInformation,
+    KeyNodeInformation,
+    KeyFullInformation,
+    KeyNameInformation,
+    KeyCachedInformation,
+    KeyFlagsInformation
+} KEY_INFORMATION_CLASS;
+
+typedef enum _KEY_VALUE_INFORMATION_CLASS
+{
+    KeyValueBasicInformation,
+    KeyValueFullInformation,
+    KeyValuePartialInformation,
+    KeyValueFullInformationAlign64,
+    KeyValuePartialInformationAlign64
+} KEY_VALUE_INFORMATION_CLASS;
+
+typedef enum _KEY_SET_INFORMATION_CLASS {
+  KeyWriteTimeInformation,
+  KeyWow64FlagsInformation,
+  KeyControlFlagsInformation,
+  KeySetVirtualizationInformation,
+  KeySetDebugInformation,
+  KeySetHandleTagsInformation,
+  MaxKeySetInfoClass
+} KEY_SET_INFORMATION_CLASS;
+
+#endif
+
+//
+// Plag and Play Classes
+//
+typedef enum _PLUGPLAY_CONTROL_CLASS
+{
+    PlugPlayControlUserResponse = 0x07,
+    PlugPlayControlProperty = 0x0A,
+    PlugPlayControlGetRelatedDevice = 0x0C,
+    PlugPlayControlDeviceStatus = 0x0E,
+    PlugPlayControlGetDeviceDepth,
+    PlugPlayControlResetDevice = 0x14
+} PLUGPLAY_CONTROL_CLASS;
+
+typedef enum _PLUGPLAY_BUS_CLASS
+{
+    SystemBus,
+    PlugPlayVirtualBus,
+    MaxPlugPlayBusClass
+} PLUGPLAY_BUS_CLASS, *PPLUGPLAY_BUS_CLASS;
+
+//
+// Plag and Play Bus Types
+//
+typedef enum _PLUGPLAY_VIRTUAL_BUS_TYPE
+{
+    Root,
+    MaxPlugPlayVirtualBusType
+} PLUGPLAY_VIRTUAL_BUS_TYPE, *PPLUGPLAY_VIRTUAL_BUS_TYPE;
+
+//
+// Plag and Play Event Categories
+//
+typedef enum _PLUGPLAY_EVENT_CATEGORY
+{
+    HardwareProfileChangeEvent,
+    TargetDeviceChangeEvent,
+    DeviceClassChangeEvent,
+    CustomDeviceEvent,
+    DeviceInstallEvent,
+    DeviceArrivalEvent,
+    PowerEvent,
+    VetoEvent,
+    BlockedDriverEvent,
+    MaxPlugEventCategory
+} PLUGPLAY_EVENT_CATEGORY;
+
+#ifdef NTOS_MODE_USER
+
+//
+// Information Structures for NtQueryKeyInformation
+//
+typedef struct _KEY_WRITE_TIME_INFORMATION
+{
+    LARGE_INTEGER LastWriteTime;
+} KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
+
+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_NAME_INFORMATION
+{
+    WCHAR Name[1];
+} KEY_NAME_INFORMATION, *PKEY_NAME_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;
+
+typedef struct _KEY_VALUE_ENTRY
+{
+    PUNICODE_STRING ValueName;
+    ULONG DataLength;
+    ULONG DataOffset;
+    ULONG Type;
+} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
+
+typedef struct _KEY_VALUE_PARTIAL_INFORMATION
+{
+    ULONG TitleIndex;
+    ULONG Type;
+    ULONG DataLength;
+    UCHAR Data[1];
+} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
+
+typedef struct _KEY_VALUE_BASIC_INFORMATION
+{
+    ULONG TitleIndex;
+    ULONG Type;
+    ULONG NameLength;
+    WCHAR Name[1];
+} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
+
+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;
+
+typedef struct _KEY_BASIC_INFORMATION
+{
+    LARGE_INTEGER LastWriteTime;
+    ULONG TitleIndex;
+    ULONG NameLength;
+    WCHAR Name[1];
+} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
+
+#endif
+
+//
+// Plug and Play Event Block
+//
+typedef struct _PLUGPLAY_EVENT_BLOCK
+{
+    GUID EventGuid;
+    PLUGPLAY_EVENT_CATEGORY EventCategory;
+    PULONG Result;
+    ULONG Flags;
+    ULONG TotalSize;
+    PVOID DeviceObject;
+    union
+    {
+        struct
+        {
+            GUID ClassGuid;
+            WCHAR SymbolicLinkName[ANYSIZE_ARRAY];
+        } DeviceClass;
+        struct
+        {
+            WCHAR DeviceIds[ANYSIZE_ARRAY];
+        } TargetDevice;
+        struct
+        {
+            WCHAR DeviceId[ANYSIZE_ARRAY];
+        } InstallDevice;
+        struct
+        {
+            PVOID NotificationStructure;
+            WCHAR DeviceIds[ANYSIZE_ARRAY];
+        } CustomNotification;
+        struct
+        {
+            PVOID Notification;
+        } ProfileNotification;
+        struct
+        {
+            ULONG NotificationCode;
+            ULONG NotificationData;
+        } PowerNotification;
+        struct
+        {
+            PNP_VETO_TYPE VetoType;
+            WCHAR DeviceIdVetoNameBuffer[ANYSIZE_ARRAY];
+        } VetoNotification;
+        struct
+        {
+            GUID BlockedDriverGuid;
+        } BlockedDriverNotification;
+    };
+} PLUGPLAY_EVENT_BLOCK, *PPLUGPLAY_EVENT_BLOCK;
+
+//
+// Plug and Play Control Classes
+//
+
+//Class 0x0A
+typedef struct _PLUGPLAY_CONTROL_PROPERTY_DATA
+{
+    UNICODE_STRING DeviceInstance;
+    ULONG Property;
+    PVOID Buffer;
+    ULONG BufferSize;
+} PLUGPLAY_CONTROL_PROPERTY_DATA, *PPLUGPLAY_CONTROL_PROPERTY_DATA;
+
+// Class 0x0C
+typedef struct _PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
+{
+    UNICODE_STRING TargetDeviceInstance;
+    ULONG Relation;
+    PWCHAR RelatedDeviceInstance;
+    ULONG RelatedDeviceInstanceLength;
+} PLUGPLAY_CONTROL_RELATED_DEVICE_DATA, *PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA;
+
+// Class 0x0E
+typedef struct _PLUGPLAY_CONTOL_STATUS_DATA
+{
+    UNICODE_STRING DeviceInstance;
+    ULONG Operation;
+    ULONG DeviceStatus;
+    ULONG DeviceProblem;
+} PLUGPLAY_CONTROL_STATUS_DATA, *PPLUGPLAY_CONTROL_STATUS_DATA;
+
+// Class 0x0F
+typedef struct _PLUGPLAY_CONTROL_DEPTH_DATA
+{
+    UNICODE_STRING DeviceInstance;
+    ULONG Depth;
+} PLUGPLAY_CONTROL_DEPTH_DATA, *PPLUGPLAY_CONTROL_DEPTH_DATA;
+
+// Class 0x14
+typedef struct _PLUGPLAY_CONTROL_RESET_DEVICE_DATA
+{
+   UNICODE_STRING DeviceInstance;
+} PLUGPLAY_CONTROL_RESET_DEVICE_DATA, *PPLUGPLAY_CONTROL_RESET_DEVICE_DATA;
+
+//
+// Plug and Play Bus Type Definition
+//
+typedef struct _PLUGPLAY_BUS_TYPE
+{
+    PLUGPLAY_BUS_CLASS BusClass;
+    union
+    {
+        INTERFACE_TYPE SystemBusType;
+        PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType;
+    };
+} PLUGPLAY_BUS_TYPE, *PPLUGPLAY_BUS_TYPE;
+
+//
+// Plug and Play Bus Instance Definition
+//
+typedef struct _PLUGPLAY_BUS_INSTANCE
+{
+    PLUGPLAY_BUS_TYPE BusType;
+    ULONG BusNumber;
+    WCHAR BusName[MAX_BUS_NAME];
+} PLUGPLAY_BUS_INSTANCE, *PPLUGPLAY_BUS_INSTANCE;
+
+#ifdef NTOS_MODE_USER
+
+//
+// Partial Resource Descriptor and List for Hardware
+//
+#include <pshpack1.h>
+typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
+{
+    UCHAR Type;
+    UCHAR ShareDisposition;
+    USHORT Flags;
+    union
+    {
+        struct
+        {
+            PHYSICAL_ADDRESS Start;
+            ULONG Length;
+        } Generic;
+        struct
+        {
+            PHYSICAL_ADDRESS Start;
+            ULONG Length;
+        } Port;
+        struct
+        {
+            ULONG Level;
+            ULONG Vector;
+            KAFFINITY Affinity;
+        } Interrupt;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+        struct
+        {
+            union
+            {
+                struct
+                {
+                    USHORT Reserved;
+                    USHORT MessageCount;
+                    ULONG Vector;
+                    KAFFINITY Affinity;
+                } Raw;
+                struct
+                {
+                    ULONG Level;
+                    ULONG Vector;
+                    KAFFINITY Affinity;
+                } Translated;
+            };
+        } MessageInterrupt;
+#endif
+        struct
+        {
+            PHYSICAL_ADDRESS Start;
+            ULONG Length;
+        } Memory;
+        struct
+        {
+            ULONG Channel;
+            ULONG Port;
+            ULONG Reserved1;
+        } Dma;
+        struct
+        {
+            ULONG Data[3];
+        } DevicePrivate;
+        struct
+        {
+            ULONG Start;
+            ULONG Length;
+            ULONG Reserved;
+        } BusNumber;
+        struct
+        {
+            ULONG DataSize;
+            ULONG Reserved1;
+            ULONG Reserved2;
+        } DeviceSpecificData;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+        struct
+        {
+            PHYSICAL_ADDRESS Start;
+            ULONG Length40;
+        } Memory40;
+        struct
+        {
+            PHYSICAL_ADDRESS Start;
+            ULONG Length48;
+        } Memory48;
+        struct
+        {
+            PHYSICAL_ADDRESS Start;
+            ULONG Length64;
+        } Memory64;
+#endif
+    } u;
+} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
+
+typedef struct _CM_PARTIAL_RESOURCE_LIST
+{
+    USHORT Version;
+    USHORT Revision;
+    ULONG Count;
+    CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
+} CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
+
+//
+// Full Resource Descriptor and List for Hardware
+//
+typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
+{
+    INTERFACE_TYPE InterfaceType;
+    ULONG BusNumber;
+    CM_PARTIAL_RESOURCE_LIST PartialResourceList;
+} CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
+
+typedef struct _CM_RESOURCE_LIST
+{
+    ULONG Count;
+    CM_FULL_RESOURCE_DESCRIPTOR List[1];
+} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
+
+//
+// ROM Block Structure
+//
+typedef struct _CM_ROM_BLOCK
+{
+    ULONG Address;
+    ULONG Size;
+} CM_ROM_BLOCK, *PCM_ROM_BLOCK;
+
+//
+// Disk/INT13 Structures
+//
+typedef struct _CM_INT13_DRIVE_PARAMETER
+{
+    USHORT DriveSelect;
+    ULONG MaxCylinders;
+    USHORT SectorsPerTrack;
+    USHORT MaxHeads;
+    USHORT NumberDrives;
+} CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
+
+typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
+{
+    ULONG BytesPerSector;
+    ULONG NumberOfCylinders;
+    ULONG SectorsPerTrack;
+    ULONG NumberOfHeads;
+} CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;
+
+#include <poppack.h>
+
+#endif // _!NTOS_MODE_USER
+
+#endif // _CMTYPES_H
+
+
+