-/*++ 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
+
+
+