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_RELATED_DEVICE_DATA.Relations
34 #define PNP_GET_PARENT_DEVICE 1
35 #define PNP_GET_CHILD_DEVICE 2
36 #define PNP_GET_SIBLING_DEVICE 3
39 // PLUGPLAY_CONTROL_STATUS_DATA Operations
41 #define PNP_GET_DEVICE_STATUS 0
42 #define PNP_SET_DEVICE_STATUS 1
43 #define PNP_CLEAR_DEVICE_STATUS 2
50 #define CmResourceTypeNull 0
51 #define CmResourceTypePort 1
52 #define CmResourceTypeInterrupt 2
53 #define CmResourceTypeMemory 3
54 #define CmResourceTypeDma 4
55 #define CmResourceTypeDeviceSpecific 5
56 #define CmResourceTypeBusNumber 6
57 #define CmResourceTypeMemoryLarge 7
58 #define CmResourceTypeNonArbitrated 128
59 #define CmResourceTypeConfigData 128
60 #define CmResourceTypeDevicePrivate 129
61 #define CmResourceTypePcCardConfig 130
62 #define CmResourceTypeMfCardConfig 131
66 // Resource Descriptor Share Dispositions
68 typedef enum _CM_SHARE_DISPOSITION
70 CmResourceShareUndetermined
,
71 CmResourceShareDeviceExclusive
,
72 CmResourceShareDriverExclusive
,
74 } CM_SHARE_DISPOSITION
;
79 // Port Resource Descriptor Flags
81 #define CM_RESOURCE_PORT_MEMORY 0x0000
82 #define CM_RESOURCE_PORT_IO 0x0001
83 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
84 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
85 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
86 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
87 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
88 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
91 // Memory Resource Descriptor Flags
93 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
94 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
95 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
96 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
97 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
98 #define CM_RESOURCE_MEMORY_24 0x0010
99 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
102 // DMA Resource Descriptor Flags
104 #define CM_RESOURCE_DMA_8 0x0000
105 #define CM_RESOURCE_DMA_16 0x0001
106 #define CM_RESOURCE_DMA_32 0x0002
107 #define CM_RESOURCE_DMA_8_AND_16 0x0004
108 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
109 #define CM_RESOURCE_DMA_TYPE_A 0x0010
110 #define CM_RESOURCE_DMA_TYPE_B 0x0020
111 #define CM_RESOURCE_DMA_TYPE_F 0x0040
114 // Interrupt Resource Descriptor Flags
116 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
117 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
118 #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
119 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
122 // NtInitializeRegistry Flags
124 #define CM_BOOT_FLAG_SMSS 0x0000
125 #define CM_BOOT_FLAG_SETUP 0x0001
126 #define CM_BOOT_FLAG_ACCEPTED 0x0002
127 #define CM_BOOT_FLAG_MAX 0x03E9
129 #ifdef NTOS_MODE_USER
132 // Information Classes for NtQueryKey
134 typedef enum _KEY_INFORMATION_CLASS
140 KeyCachedInformation
,
142 KeyVirtualizationInformation
,
143 KeyHandleTagsInformation
,
145 } KEY_INFORMATION_CLASS
;
147 typedef enum _KEY_VALUE_INFORMATION_CLASS
149 KeyValueBasicInformation
,
150 KeyValueFullInformation
,
151 KeyValuePartialInformation
,
152 KeyValueFullInformationAlign64
,
153 KeyValuePartialInformationAlign64
,
155 } KEY_VALUE_INFORMATION_CLASS
;
157 typedef enum _KEY_SET_INFORMATION_CLASS
{
158 KeyWriteTimeInformation
,
159 KeyWow64FlagsInformation
,
160 KeyControlFlagsInformation
,
161 KeySetVirtualizationInformation
,
162 KeySetDebugInformation
,
163 KeySetHandleTagsInformation
,
165 } KEY_SET_INFORMATION_CLASS
;
170 // Plag and Play Classes
172 typedef enum _PLUGPLAY_CONTROL_CLASS
174 PlugPlayControlEnumerateDevice
,
175 PlugPlayControlRegisterNewDevice
,
176 PlugPlayControlDeregisterDevice
,
177 PlugPlayControlInitializeDevice
,
178 PlugPlayControlStartDevice
,
179 PlugPlayControlUnlockDevice
,
180 PlugPlayControlQueryAndRemoveDevice
,
181 PlugPlayControlUserResponse
,
182 PlugPlayControlGenerateLegacyDevice
,
183 PlugPlayControlGetInterfaceDeviceList
,
184 PlugPlayControlProperty
,
185 PlugPlayControlDeviceClassAssociation
,
186 PlugPlayControlGetRelatedDevice
,
187 PlugPlayControlGetInterfaceDeviceAlias
,
188 PlugPlayControlDeviceStatus
,
189 PlugPlayControlGetDeviceDepth
,
190 PlugPlayControlQueryDeviceRelations
,
191 PlugPlayControlTargetDeviceRelation
,
192 PlugPlayControlQueryConflictList
,
193 PlugPlayControlRetrieveDock
,
194 PlugPlayControlResetDevice
,
195 PlugPlayControlHaltDevice
,
196 PlugPlayControlGetBlockedDriverList
,
198 } PLUGPLAY_CONTROL_CLASS
;
200 typedef enum _PLUGPLAY_BUS_CLASS
205 } PLUGPLAY_BUS_CLASS
, *PPLUGPLAY_BUS_CLASS
;
208 // Plag and Play Bus Types
210 typedef enum _PLUGPLAY_VIRTUAL_BUS_TYPE
213 MaxPlugPlayVirtualBusType
214 } PLUGPLAY_VIRTUAL_BUS_TYPE
, *PPLUGPLAY_VIRTUAL_BUS_TYPE
;
217 // Plag and Play Event Categories
219 typedef enum _PLUGPLAY_EVENT_CATEGORY
221 HardwareProfileChangeEvent
,
222 TargetDeviceChangeEvent
,
223 DeviceClassChangeEvent
,
231 } PLUGPLAY_EVENT_CATEGORY
;
233 #ifdef NTOS_MODE_USER
236 // Information Structures for NtQueryKeyInformation
238 typedef struct _KEY_WRITE_TIME_INFORMATION
240 LARGE_INTEGER LastWriteTime
;
241 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
243 typedef struct _KEY_WOW64_FLAGS_INFORMATION
246 } KEY_WOW64_FLAGS_INFORMATION
, *PKEY_WOW64_FLAGS_INFORMATION
;
248 typedef struct _KEY_USER_FLAGS_INFORMATION
251 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
253 typedef struct _KEY_HANDLE_TAGS_INFORMATION
256 } KEY_HANDLE_TAGS_INFORMATION
, *PKEY_HANDLE_TAGS_INFORMATION
;
258 typedef struct _KEY_CONTROL_FLAGS_INFORMATION
261 } KEY_CONTROL_FLAGS_INFORMATION
, *PKEY_CONTROL_FLAGS_INFORMATION
;
263 typedef struct _KEY_VIRTUALIZATION_INFORMATION
265 ULONG VirtualizationCandidate
:1;
266 ULONG VirtualizationEnabled
:1;
267 ULONG VirtualTarget
:1;
268 ULONG VirtualStore
:1;
269 ULONG VirtualSource
:1;
271 } KEY_VIRTUALIZATION_INFORMATION
, *PKEY_VIRTUALIZATION_INFORMATION
;
273 typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION
275 ULONG VirtualTarget
:1;
276 ULONG VirtualStore
:1;
277 ULONG VirtualSource
:1;
279 } KEY_SET_VIRTUALIZATION_INFORMATION
, *PKEY_SET_VIRTUALIZATION_INFORMATION
;
282 typedef struct _KEY_FULL_INFORMATION
284 LARGE_INTEGER LastWriteTime
;
292 ULONG MaxValueNameLen
;
293 ULONG MaxValueDataLen
;
295 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
297 typedef struct _KEY_NAME_INFORMATION
301 } KEY_NAME_INFORMATION
, *PKEY_NAME_INFORMATION
;
304 typedef struct _KEY_NODE_INFORMATION
306 LARGE_INTEGER LastWriteTime
;
312 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
314 typedef struct _KEY_VALUE_ENTRY
316 PUNICODE_STRING ValueName
;
320 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
322 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
328 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
330 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
335 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
337 typedef struct _KEY_VALUE_BASIC_INFORMATION
343 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
345 typedef struct _KEY_VALUE_FULL_INFORMATION
353 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
355 typedef struct _KEY_BASIC_INFORMATION
357 LARGE_INTEGER LastWriteTime
;
361 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
366 // Plug and Play Event Block
368 typedef struct _PLUGPLAY_EVENT_BLOCK
371 PLUGPLAY_EVENT_CATEGORY EventCategory
;
381 WCHAR SymbolicLinkName
[ANYSIZE_ARRAY
];
385 WCHAR DeviceIds
[ANYSIZE_ARRAY
];
389 WCHAR DeviceId
[ANYSIZE_ARRAY
];
393 PVOID NotificationStructure
;
394 WCHAR DeviceIds
[ANYSIZE_ARRAY
];
395 } CustomNotification
;
399 } ProfileNotification
;
402 ULONG NotificationCode
;
403 ULONG NotificationData
;
407 PNP_VETO_TYPE VetoType
;
408 WCHAR DeviceIdVetoNameBuffer
[ANYSIZE_ARRAY
];
412 GUID BlockedDriverGuid
;
413 } BlockedDriverNotification
;
415 } PLUGPLAY_EVENT_BLOCK
, *PPLUGPLAY_EVENT_BLOCK
;
418 // Plug and Play Control Classes
422 typedef struct _PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA
424 UNICODE_STRING DeviceInstance
;
429 } PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA
, *PPLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA
;
432 typedef struct _PLUGPLAY_CONTROL_PROPERTY_DATA
434 UNICODE_STRING DeviceInstance
;
438 } PLUGPLAY_CONTROL_PROPERTY_DATA
, *PPLUGPLAY_CONTROL_PROPERTY_DATA
;
441 typedef struct _PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
443 UNICODE_STRING TargetDeviceInstance
;
445 PWCHAR RelatedDeviceInstance
;
446 ULONG RelatedDeviceInstanceLength
;
447 } PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
, *PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA
;
450 typedef struct _PLUGPLAY_CONTOL_STATUS_DATA
452 UNICODE_STRING DeviceInstance
;
456 } PLUGPLAY_CONTROL_STATUS_DATA
, *PPLUGPLAY_CONTROL_STATUS_DATA
;
459 typedef struct _PLUGPLAY_CONTROL_DEPTH_DATA
461 UNICODE_STRING DeviceInstance
;
463 } PLUGPLAY_CONTROL_DEPTH_DATA
, *PPLUGPLAY_CONTROL_DEPTH_DATA
;
466 typedef struct _PLUGPLAY_CONTROL_RESET_DEVICE_DATA
468 UNICODE_STRING DeviceInstance
;
469 } PLUGPLAY_CONTROL_RESET_DEVICE_DATA
, *PPLUGPLAY_CONTROL_RESET_DEVICE_DATA
;
472 // Plug and Play Bus Type Definition
474 typedef struct _PLUGPLAY_BUS_TYPE
476 PLUGPLAY_BUS_CLASS BusClass
;
479 INTERFACE_TYPE SystemBusType
;
480 PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType
;
482 } PLUGPLAY_BUS_TYPE
, *PPLUGPLAY_BUS_TYPE
;
485 // Plug and Play Bus Instance Definition
487 typedef struct _PLUGPLAY_BUS_INSTANCE
489 PLUGPLAY_BUS_TYPE BusType
;
491 WCHAR BusName
[MAX_BUS_NAME
];
492 } PLUGPLAY_BUS_INSTANCE
, *PPLUGPLAY_BUS_INSTANCE
;
494 #ifdef NTOS_MODE_USER
497 // Partial Resource Descriptor and List for Hardware
499 #include <pshpack1.h>
500 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
503 UCHAR ShareDisposition
;
509 PHYSICAL_ADDRESS Start
;
514 PHYSICAL_ADDRESS Start
;
523 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
546 PHYSICAL_ADDRESS Start
;
570 } DeviceSpecificData
;
571 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
574 PHYSICAL_ADDRESS Start
;
579 PHYSICAL_ADDRESS Start
;
584 PHYSICAL_ADDRESS Start
;
589 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
591 typedef struct _CM_PARTIAL_RESOURCE_LIST
596 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
597 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
600 // Full Resource Descriptor and List for Hardware
602 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
604 INTERFACE_TYPE InterfaceType
;
606 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
607 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
609 typedef struct _CM_RESOURCE_LIST
612 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
613 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
616 // ROM Block Structure
618 typedef struct _CM_ROM_BLOCK
622 } CM_ROM_BLOCK
, *PCM_ROM_BLOCK
;
625 // Disk/INT13 Structures
627 typedef struct _CM_INT13_DRIVE_PARAMETER
631 USHORT SectorsPerTrack
;
634 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
636 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
638 ULONG BytesPerSector
;
639 ULONG NumberOfCylinders
;
640 ULONG SectorsPerTrack
;
642 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
646 #endif // _!NTOS_MODE_USER