3 Copyright (c) Alex Ionescu. All rights reserved.
11 Type definitions for the Configuration Manager.
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
29 #define MAX_BUS_NAME 24
32 // PLUGPLAY_CONTROL_PROPERTY_DATA.Properties
34 #define PNP_PROPERTY_UI_NUMBER 0
35 #define PNP_PROPERTY_PHYSICAL_DEVICE_OBJECT_NAME 1
36 #define PNP_PROPERTY_BUSTYPEGUID 2
37 #define PNP_PROPERTY_LEGACYBUSTYPE 3
38 #define PNP_PROPERTY_BUSNUMBER 4
39 #define PNP_PROPERTY_POWER_DATA 5
40 #define PNP_PROPERTY_REMOVAL_POLICY 6
41 #define PNP_PROPERTY_REMOVAL_POLICY_OVERRIDE 7
42 #define PNP_PROPERTY_ADDRESS 8
43 #define PNP_PROPERTY_ENUMERATOR_NAME 9
44 #define PNP_PROPERTY_REMOVAL_POLICY_HARDWARE_DEFAULT 10
45 #define PNP_PROPERTY_INSTALL_STATE 11
46 #define PNP_PROPERTY_LOCATION_PATHS 12
47 #define PNP_PROPERTY_CONTAINERID 13
50 // PLUGPLAY_CONTROL_RELATED_DEVICE_DATA.Relations
52 #define PNP_GET_PARENT_DEVICE 1
53 #define PNP_GET_CHILD_DEVICE 2
54 #define PNP_GET_SIBLING_DEVICE 3
57 // PLUGPLAY_CONTROL_STATUS_DATA.Operation
59 #define PNP_GET_DEVICE_STATUS 0
60 #define PNP_SET_DEVICE_STATUS 1
61 #define PNP_CLEAR_DEVICE_STATUS 2
64 // PLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA.Relations
66 #define PNP_EJECT_RELATIONS 0
67 #define PNP_REMOVAL_RELATIONS 1
68 #define PNP_POWER_RELATIONS 2
69 #define PNP_BUS_RELATIONS 3
77 #define CmResourceTypeNull 0
78 #define CmResourceTypePort 1
79 #define CmResourceTypeInterrupt 2
80 #define CmResourceTypeMemory 3
81 #define CmResourceTypeDma 4
82 #define CmResourceTypeDeviceSpecific 5
83 #define CmResourceTypeBusNumber 6
84 #define CmResourceTypeMemoryLarge 7
85 #define CmResourceTypeNonArbitrated 128
86 #define CmResourceTypeConfigData 128
87 #define CmResourceTypeDevicePrivate 129
88 #define CmResourceTypePcCardConfig 130
89 #define CmResourceTypeMfCardConfig 131
93 // Resource Descriptor Share Dispositions
95 typedef enum _CM_SHARE_DISPOSITION
97 CmResourceShareUndetermined
,
98 CmResourceShareDeviceExclusive
,
99 CmResourceShareDriverExclusive
,
100 CmResourceShareShared
101 } CM_SHARE_DISPOSITION
;
106 // Port Resource Descriptor Flags
108 #define CM_RESOURCE_PORT_MEMORY 0x0000
109 #define CM_RESOURCE_PORT_IO 0x0001
110 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
111 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
112 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
113 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
114 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
115 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
118 // Memory Resource Descriptor Flags
120 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
121 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
122 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
123 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
124 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
125 #define CM_RESOURCE_MEMORY_24 0x0010
126 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
129 // DMA Resource Descriptor Flags
131 #define CM_RESOURCE_DMA_8 0x0000
132 #define CM_RESOURCE_DMA_16 0x0001
133 #define CM_RESOURCE_DMA_32 0x0002
134 #define CM_RESOURCE_DMA_8_AND_16 0x0004
135 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
136 #define CM_RESOURCE_DMA_TYPE_A 0x0010
137 #define CM_RESOURCE_DMA_TYPE_B 0x0020
138 #define CM_RESOURCE_DMA_TYPE_F 0x0040
141 // Interrupt Resource Descriptor Flags
143 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
144 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
145 #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
146 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
149 // NtInitializeRegistry Flags
151 #define CM_BOOT_FLAG_SMSS 0x0000
152 #define CM_BOOT_FLAG_SETUP 0x0001
153 #define CM_BOOT_FLAG_ACCEPTED 0x0002
154 #define CM_BOOT_FLAG_MAX (CM_BOOT_FLAG_ACCEPTED + 999)
156 #ifdef NTOS_MODE_USER
159 // Information Classes for NtQueryKey
161 typedef enum _KEY_INFORMATION_CLASS
167 KeyCachedInformation
,
169 KeyVirtualizationInformation
,
170 KeyHandleTagsInformation
,
172 } KEY_INFORMATION_CLASS
;
174 typedef enum _KEY_VALUE_INFORMATION_CLASS
176 KeyValueBasicInformation
,
177 KeyValueFullInformation
,
178 KeyValuePartialInformation
,
179 KeyValueFullInformationAlign64
,
180 KeyValuePartialInformationAlign64
,
182 } KEY_VALUE_INFORMATION_CLASS
;
184 typedef enum _KEY_SET_INFORMATION_CLASS
{
185 KeyWriteTimeInformation
,
186 KeyWow64FlagsInformation
,
187 KeyControlFlagsInformation
,
188 KeySetVirtualizationInformation
,
189 KeySetDebugInformation
,
190 KeySetHandleTagsInformation
,
192 } KEY_SET_INFORMATION_CLASS
;
197 // Plag and Play Classes
199 typedef enum _PLUGPLAY_CONTROL_CLASS
201 PlugPlayControlEnumerateDevice
,
202 PlugPlayControlRegisterNewDevice
,
203 PlugPlayControlDeregisterDevice
,
204 PlugPlayControlInitializeDevice
,
205 PlugPlayControlStartDevice
,
206 PlugPlayControlUnlockDevice
,
207 PlugPlayControlQueryAndRemoveDevice
,
208 PlugPlayControlUserResponse
,
209 PlugPlayControlGenerateLegacyDevice
,
210 PlugPlayControlGetInterfaceDeviceList
,
211 PlugPlayControlProperty
,
212 PlugPlayControlDeviceClassAssociation
,
213 PlugPlayControlGetRelatedDevice
,
214 PlugPlayControlGetInterfaceDeviceAlias
,
215 PlugPlayControlDeviceStatus
,
216 PlugPlayControlGetDeviceDepth
,
217 PlugPlayControlQueryDeviceRelations
,
218 PlugPlayControlTargetDeviceRelation
,
219 PlugPlayControlQueryConflictList
,
220 PlugPlayControlRetrieveDock
,
221 PlugPlayControlResetDevice
,
222 PlugPlayControlHaltDevice
,
223 PlugPlayControlGetBlockedDriverList
,
225 } PLUGPLAY_CONTROL_CLASS
;
227 typedef enum _PLUGPLAY_BUS_CLASS
232 } PLUGPLAY_BUS_CLASS
, *PPLUGPLAY_BUS_CLASS
;
235 // Plag and Play Bus Types
237 typedef enum _PLUGPLAY_VIRTUAL_BUS_TYPE
240 MaxPlugPlayVirtualBusType
241 } PLUGPLAY_VIRTUAL_BUS_TYPE
, *PPLUGPLAY_VIRTUAL_BUS_TYPE
;
244 // Plag and Play Event Categories
246 typedef enum _PLUGPLAY_EVENT_CATEGORY
248 HardwareProfileChangeEvent
,
249 TargetDeviceChangeEvent
,
250 DeviceClassChangeEvent
,
258 } PLUGPLAY_EVENT_CATEGORY
;
260 #ifdef NTOS_MODE_USER
263 // Information Structures for NtQueryKeyInformation
265 typedef struct _KEY_WRITE_TIME_INFORMATION
267 LARGE_INTEGER LastWriteTime
;
268 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
270 typedef struct _KEY_WOW64_FLAGS_INFORMATION
273 } KEY_WOW64_FLAGS_INFORMATION
, *PKEY_WOW64_FLAGS_INFORMATION
;
275 typedef struct _KEY_USER_FLAGS_INFORMATION
278 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
280 typedef struct _KEY_HANDLE_TAGS_INFORMATION
283 } KEY_HANDLE_TAGS_INFORMATION
, *PKEY_HANDLE_TAGS_INFORMATION
;
285 typedef struct _KEY_CONTROL_FLAGS_INFORMATION
288 } KEY_CONTROL_FLAGS_INFORMATION
, *PKEY_CONTROL_FLAGS_INFORMATION
;
290 typedef struct _KEY_VIRTUALIZATION_INFORMATION
292 ULONG VirtualizationCandidate
:1;
293 ULONG VirtualizationEnabled
:1;
294 ULONG VirtualTarget
:1;
295 ULONG VirtualStore
:1;
296 ULONG VirtualSource
:1;
298 } KEY_VIRTUALIZATION_INFORMATION
, *PKEY_VIRTUALIZATION_INFORMATION
;
300 typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION
302 ULONG VirtualTarget
:1;
303 ULONG VirtualStore
:1;
304 ULONG VirtualSource
:1;
306 } KEY_SET_VIRTUALIZATION_INFORMATION
, *PKEY_SET_VIRTUALIZATION_INFORMATION
;
309 typedef struct _KEY_FULL_INFORMATION
311 LARGE_INTEGER LastWriteTime
;
319 ULONG MaxValueNameLen
;
320 ULONG MaxValueDataLen
;
322 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
324 typedef struct _KEY_NAME_INFORMATION
328 } KEY_NAME_INFORMATION
, *PKEY_NAME_INFORMATION
;
331 typedef struct _KEY_NODE_INFORMATION
333 LARGE_INTEGER LastWriteTime
;
339 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
341 typedef struct _KEY_VALUE_ENTRY
343 PUNICODE_STRING ValueName
;
347 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
349 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
355 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
357 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
362 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
364 typedef struct _KEY_VALUE_BASIC_INFORMATION
370 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
372 typedef struct _KEY_VALUE_FULL_INFORMATION
380 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
382 typedef struct _KEY_BASIC_INFORMATION
384 LARGE_INTEGER LastWriteTime
;
388 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
393 // Plug and Play Event Block
395 typedef struct _PLUGPLAY_EVENT_BLOCK
398 PLUGPLAY_EVENT_CATEGORY EventCategory
;
408 WCHAR SymbolicLinkName
[ANYSIZE_ARRAY
];
412 WCHAR DeviceIds
[ANYSIZE_ARRAY
];
416 WCHAR DeviceId
[ANYSIZE_ARRAY
];
420 PVOID NotificationStructure
;
421 WCHAR DeviceIds
[ANYSIZE_ARRAY
];
422 } CustomNotification
;
426 } ProfileNotification
;
429 ULONG NotificationCode
;
430 ULONG NotificationData
;
434 PNP_VETO_TYPE VetoType
;
435 WCHAR DeviceIdVetoNameBuffer
[ANYSIZE_ARRAY
];
439 GUID BlockedDriverGuid
;
440 } BlockedDriverNotification
;
442 } PLUGPLAY_EVENT_BLOCK
, *PPLUGPLAY_EVENT_BLOCK
;
445 // Plug and Play Control Classes
449 typedef struct _PLUGPLAY_CONTROL_ENUMERATE_DEVICE_DATA
451 UNICODE_STRING DeviceInstance
;
453 } PLUGPLAY_CONTROL_ENUMERATE_DEVICE_DATA
, *PPLUGPLAY_CONTROL_ENUMERATE_DEVICE_DATA
;
456 typedef struct _PLUGPLAY_CONTROL_QUERY_REMOVE_DATA
458 UNICODE_STRING DeviceInstance
;
460 PNP_VETO_TYPE VetoType
;
463 } PLUGPLAY_CONTROL_QUERY_REMOVE_DATA
, *PPLUGPLAY_CONTROL_QUERY_REMOVE_DATA
;
466 typedef struct _PLUGPLAY_CONTROL_USER_RESPONSE_DATA
472 } PLUGPLAY_CONTROL_USER_RESPONSE_DATA
, *PPLUGPLAY_CONTROL_USER_RESPONSE_DATA
;
475 typedef struct _PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA
477 UNICODE_STRING DeviceInstance
;
482 } PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA
, *PPLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA
;
485 typedef struct _PLUGPLAY_CONTROL_PROPERTY_DATA
487 UNICODE_STRING DeviceInstance
;
491 } PLUGPLAY_CONTROL_PROPERTY_DATA
, *PPLUGPLAY_CONTROL_PROPERTY_DATA
;
494 typedef struct _PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
496 UNICODE_STRING TargetDeviceInstance
;
498 PWCHAR RelatedDeviceInstance
;
499 ULONG RelatedDeviceInstanceLength
;
500 } PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
, *PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA
;
503 typedef struct _PLUGPLAY_CONTOL_STATUS_DATA
505 UNICODE_STRING DeviceInstance
;
509 } PLUGPLAY_CONTROL_STATUS_DATA
, *PPLUGPLAY_CONTROL_STATUS_DATA
;
512 typedef struct _PLUGPLAY_CONTROL_DEPTH_DATA
514 UNICODE_STRING DeviceInstance
;
516 } PLUGPLAY_CONTROL_DEPTH_DATA
, *PPLUGPLAY_CONTROL_DEPTH_DATA
;
519 typedef struct _PLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA
521 UNICODE_STRING DeviceInstance
;
525 } PLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA
, *PPLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA
;
528 typedef struct _PLUGPLAY_CONTROL_RETRIEVE_DOCK_DATA
530 ULONG DeviceInstanceLength
;
531 PWSTR DeviceInstance
;
532 } PLUGPLAY_CONTROL_RETRIEVE_DOCK_DATA
, *PPLUGPLAY_CONTROL_RETRIEVE_DOCK_DATA
;
535 typedef struct _PLUGPLAY_CONTROL_RESET_DEVICE_DATA
537 UNICODE_STRING DeviceInstance
;
538 } PLUGPLAY_CONTROL_RESET_DEVICE_DATA
, *PPLUGPLAY_CONTROL_RESET_DEVICE_DATA
;
541 // Plug and Play Bus Type Definition
543 typedef struct _PLUGPLAY_BUS_TYPE
545 PLUGPLAY_BUS_CLASS BusClass
;
548 INTERFACE_TYPE SystemBusType
;
549 PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType
;
551 } PLUGPLAY_BUS_TYPE
, *PPLUGPLAY_BUS_TYPE
;
554 // Plug and Play Bus Instance Definition
556 typedef struct _PLUGPLAY_BUS_INSTANCE
558 PLUGPLAY_BUS_TYPE BusType
;
560 WCHAR BusName
[MAX_BUS_NAME
];
561 } PLUGPLAY_BUS_INSTANCE
, *PPLUGPLAY_BUS_INSTANCE
;
563 #ifdef NTOS_MODE_USER
566 // Partial Resource Descriptor and List for Hardware
568 #include <pshpack1.h>
569 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
572 UCHAR ShareDisposition
;
578 PHYSICAL_ADDRESS Start
;
583 PHYSICAL_ADDRESS Start
;
592 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
615 PHYSICAL_ADDRESS Start
;
639 } DeviceSpecificData
;
640 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
643 PHYSICAL_ADDRESS Start
;
648 PHYSICAL_ADDRESS Start
;
653 PHYSICAL_ADDRESS Start
;
658 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
660 typedef struct _CM_PARTIAL_RESOURCE_LIST
665 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
666 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
669 // Full Resource Descriptor and List for Hardware
671 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
673 INTERFACE_TYPE InterfaceType
;
675 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
676 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
678 typedef struct _CM_RESOURCE_LIST
681 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
682 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
685 // ROM Block Structure
687 typedef struct _CM_ROM_BLOCK
691 } CM_ROM_BLOCK
, *PCM_ROM_BLOCK
;
694 // Disk/INT13 Structures
696 typedef struct _CM_INT13_DRIVE_PARAMETER
700 USHORT SectorsPerTrack
;
703 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
705 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
707 ULONG BytesPerSector
;
708 ULONG NumberOfCylinders
;
709 ULONG SectorsPerTrack
;
711 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
715 #endif // _!NTOS_MODE_USER