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
300 } KEY_NAME_INFORMATION
, *PKEY_NAME_INFORMATION
;
303 typedef struct _KEY_NODE_INFORMATION
305 LARGE_INTEGER LastWriteTime
;
311 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
313 typedef struct _KEY_VALUE_ENTRY
315 PUNICODE_STRING ValueName
;
319 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
321 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
327 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
329 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
334 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
336 typedef struct _KEY_VALUE_BASIC_INFORMATION
342 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
344 typedef struct _KEY_VALUE_FULL_INFORMATION
352 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
354 typedef struct _KEY_BASIC_INFORMATION
356 LARGE_INTEGER LastWriteTime
;
360 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
365 // Plug and Play Event Block
367 typedef struct _PLUGPLAY_EVENT_BLOCK
370 PLUGPLAY_EVENT_CATEGORY EventCategory
;
380 WCHAR SymbolicLinkName
[ANYSIZE_ARRAY
];
384 WCHAR DeviceIds
[ANYSIZE_ARRAY
];
388 WCHAR DeviceId
[ANYSIZE_ARRAY
];
392 PVOID NotificationStructure
;
393 WCHAR DeviceIds
[ANYSIZE_ARRAY
];
394 } CustomNotification
;
398 } ProfileNotification
;
401 ULONG NotificationCode
;
402 ULONG NotificationData
;
406 PNP_VETO_TYPE VetoType
;
407 WCHAR DeviceIdVetoNameBuffer
[ANYSIZE_ARRAY
];
411 GUID BlockedDriverGuid
;
412 } BlockedDriverNotification
;
414 } PLUGPLAY_EVENT_BLOCK
, *PPLUGPLAY_EVENT_BLOCK
;
417 // Plug and Play Control Classes
421 typedef struct _PLUGPLAY_CONTROL_PROPERTY_DATA
423 UNICODE_STRING DeviceInstance
;
427 } PLUGPLAY_CONTROL_PROPERTY_DATA
, *PPLUGPLAY_CONTROL_PROPERTY_DATA
;
430 typedef struct _PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
432 UNICODE_STRING TargetDeviceInstance
;
434 PWCHAR RelatedDeviceInstance
;
435 ULONG RelatedDeviceInstanceLength
;
436 } PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
, *PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA
;
439 typedef struct _PLUGPLAY_CONTOL_STATUS_DATA
441 UNICODE_STRING DeviceInstance
;
445 } PLUGPLAY_CONTROL_STATUS_DATA
, *PPLUGPLAY_CONTROL_STATUS_DATA
;
448 typedef struct _PLUGPLAY_CONTROL_DEPTH_DATA
450 UNICODE_STRING DeviceInstance
;
452 } PLUGPLAY_CONTROL_DEPTH_DATA
, *PPLUGPLAY_CONTROL_DEPTH_DATA
;
455 typedef struct _PLUGPLAY_CONTROL_RESET_DEVICE_DATA
457 UNICODE_STRING DeviceInstance
;
458 } PLUGPLAY_CONTROL_RESET_DEVICE_DATA
, *PPLUGPLAY_CONTROL_RESET_DEVICE_DATA
;
461 // Plug and Play Bus Type Definition
463 typedef struct _PLUGPLAY_BUS_TYPE
465 PLUGPLAY_BUS_CLASS BusClass
;
468 INTERFACE_TYPE SystemBusType
;
469 PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType
;
471 } PLUGPLAY_BUS_TYPE
, *PPLUGPLAY_BUS_TYPE
;
474 // Plug and Play Bus Instance Definition
476 typedef struct _PLUGPLAY_BUS_INSTANCE
478 PLUGPLAY_BUS_TYPE BusType
;
480 WCHAR BusName
[MAX_BUS_NAME
];
481 } PLUGPLAY_BUS_INSTANCE
, *PPLUGPLAY_BUS_INSTANCE
;
483 #ifdef NTOS_MODE_USER
486 // Partial Resource Descriptor and List for Hardware
488 #include <pshpack1.h>
489 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
492 UCHAR ShareDisposition
;
498 PHYSICAL_ADDRESS Start
;
503 PHYSICAL_ADDRESS Start
;
512 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
535 PHYSICAL_ADDRESS Start
;
559 } DeviceSpecificData
;
560 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
563 PHYSICAL_ADDRESS Start
;
568 PHYSICAL_ADDRESS Start
;
573 PHYSICAL_ADDRESS Start
;
578 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
580 typedef struct _CM_PARTIAL_RESOURCE_LIST
585 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
586 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
589 // Full Resource Descriptor and List for Hardware
591 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
593 INTERFACE_TYPE InterfaceType
;
595 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
596 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
598 typedef struct _CM_RESOURCE_LIST
601 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
602 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
605 // ROM Block Structure
607 typedef struct _CM_ROM_BLOCK
611 } CM_ROM_BLOCK
, *PCM_ROM_BLOCK
;
614 // Disk/INT13 Structures
616 typedef struct _CM_INT13_DRIVE_PARAMETER
620 USHORT SectorsPerTrack
;
623 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
625 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
627 ULONG BytesPerSector
;
628 ULONG NumberOfCylinders
;
629 ULONG SectorsPerTrack
;
631 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
635 #endif // _!NTOS_MODE_USER