2 * PROJECT: ReactOS Native Headers
3 * FILE: include/ndk/cmtypes.h
4 * PURPOSE: Definitions for Config Manager Types not defined in DDK/IFS
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
13 /* DEPENDENCIES **************************************************************/
17 /* EXPORTED DATA *************************************************************/
19 /* CONSTANTS *****************************************************************/
20 #define MAX_BUS_NAME 24
22 /* PLUGPLAY_CONTROL_RELATED_DEVICE_DATA.Relation values */
23 #define PNP_GET_PARENT_DEVICE 1
24 #define PNP_GET_CHILD_DEVICE 2
25 #define PNP_GET_SIBLING_DEVICE 3
27 /* PLUGPLAY_CONTROL_STATUS_DATA.Operation values */
28 #define PNP_GET_DEVICE_STATUS 0
29 #define PNP_SET_DEVICE_STATUS 1
30 #define PNP_CLEAR_DEVICE_STATUS 2
32 /* ENUMERATIONS **************************************************************/
35 typedef enum _KEY_INFORMATION_CLASS
43 } KEY_INFORMATION_CLASS
;
45 typedef enum _KEY_VALUE_INFORMATION_CLASS
47 KeyValueBasicInformation
,
48 KeyValueFullInformation
,
49 KeyValuePartialInformation
,
50 KeyValueFullInformationAlign64
,
51 KeyValuePartialInformationAlign64
52 } KEY_VALUE_INFORMATION_CLASS
;
54 typedef enum _KEY_SET_INFORMATION_CLASS
56 KeyWriteTimeInformation
,
57 KeyUserFlagsInformation
,
59 } KEY_SET_INFORMATION_CLASS
;
62 typedef enum _PLUGPLAY_CONTROL_CLASS
64 PlugPlayControlUserResponse
= 0x07,
65 PlugPlayControlProperty
= 0x0A,
66 PlugPlayControlGetRelatedDevice
= 0x0C,
67 PlugPlayControlDeviceStatus
= 0x0E,
68 PlugPlayControlGetDeviceDepth
,
69 PlugPlayControlResetDevice
= 0x14
70 } PLUGPLAY_CONTROL_CLASS
;
72 typedef enum _PLUGPLAY_BUS_CLASS
77 } PLUGPLAY_BUS_CLASS
, *PPLUGPLAY_BUS_CLASS
;
79 typedef enum _PLUGPLAY_VIRTUAL_BUS_TYPE
82 MaxPlugPlayVirtualBusType
83 } PLUGPLAY_VIRTUAL_BUS_TYPE
, *PPLUGPLAY_VIRTUAL_BUS_TYPE
;
85 typedef enum _PLUGPLAY_EVENT_CATEGORY
87 HardwareProfileChangeEvent
,
88 TargetDeviceChangeEvent
,
89 DeviceClassChangeEvent
,
97 } PLUGPLAY_EVENT_CATEGORY
;
98 /* TYPES *********************************************************************/
100 #ifdef NTOS_MODE_USER
101 typedef struct _KEY_WRITE_TIME_INFORMATION
103 LARGE_INTEGER LastWriteTime
;
104 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
106 typedef struct _KEY_USER_FLAGS_INFORMATION
109 } KEY_USER_FLAGS_INFORMATION
, *PKEY_USER_FLAGS_INFORMATION
;
111 typedef struct _KEY_FULL_INFORMATION
113 LARGE_INTEGER LastWriteTime
;
121 ULONG MaxValueNameLen
;
122 ULONG MaxValueDataLen
;
124 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
126 typedef struct _KEY_NODE_INFORMATION
128 LARGE_INTEGER LastWriteTime
;
134 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
136 typedef struct _KEY_VALUE_ENTRY
138 PUNICODE_STRING ValueName
;
142 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
144 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
150 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
152 typedef struct _KEY_VALUE_BASIC_INFORMATION
158 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
160 typedef struct _KEY_VALUE_FULL_INFORMATION
168 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
170 typedef struct _KEY_BASIC_INFORMATION
172 LARGE_INTEGER LastWriteTime
;
176 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
180 typedef struct _REG_DELETE_KEY_INFORMATION
183 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
;
185 typedef struct _REG_SET_VALUE_KEY_INFORMATION
188 PUNICODE_STRING ValueName
;
193 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
195 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
198 PUNICODE_STRING ValueName
;
199 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
201 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
204 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
205 PVOID KeySetInformation
;
206 ULONG KeySetInformationLength
;
207 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
209 typedef struct _REG_ENUMERATE_KEY_INFORMATION
213 KEY_INFORMATION_CLASS KeyInformationClass
;
214 PVOID KeyInformation
;
217 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
219 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
223 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
224 PVOID KeyValueInformation
;
227 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
229 typedef struct _REG_QUERY_KEY_INFORMATION
232 KEY_INFORMATION_CLASS KeyInformationClass
;
233 PVOID KeyInformation
;
236 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
238 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
241 PUNICODE_STRING ValueName
;
242 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
243 PVOID KeyValueInformation
;
246 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
248 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
251 PKEY_VALUE_ENTRY ValueEntries
;
255 PULONG RequiredBufferLength
;
256 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
258 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
260 PUNICODE_STRING CompleteName
;
261 } REG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_CREATE_KEY_INFORMATION
;
263 typedef struct _REG_POST_CREATE_KEY_INFORMATION
265 PUNICODE_STRING CompleteName
;
268 } REG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
;
270 typedef struct _REG_PRE_OPEN_KEY_INFORMATION
272 PUNICODE_STRING CompleteName
;
273 } REG_PRE_OPEN_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;
275 typedef struct _REG_POST_OPEN_KEY_INFORMATION
277 PUNICODE_STRING CompleteName
;
280 } REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
282 typedef struct _REG_POST_OPERATION_INFORMATION
286 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
290 typedef struct _PLUGPLAY_EVENT_BLOCK
293 PLUGPLAY_EVENT_CATEGORY EventCategory
;
303 WCHAR SymbolicLinkName
[ANYSIZE_ARRAY
];
307 WCHAR DeviceIds
[ANYSIZE_ARRAY
];
311 WCHAR DeviceId
[ANYSIZE_ARRAY
];
315 PVOID NotificationStructure
;
316 WCHAR DeviceIds
[ANYSIZE_ARRAY
];
317 } CustomNotification
;
321 } ProfileNotification
;
324 ULONG NotificationCode
;
325 ULONG NotificationData
;
329 PNP_VETO_TYPE VetoType
;
330 WCHAR DeviceIdVetoNameBuffer
[ANYSIZE_ARRAY
];
334 GUID BlockedDriverGuid
;
335 } BlockedDriverNotification
;
337 } PLUGPLAY_EVENT_BLOCK
, *PPLUGPLAY_EVENT_BLOCK
;
340 typedef struct _PLUGPLAY_CONTROL_PROPERTY_DATA
342 UNICODE_STRING DeviceInstance
;
346 } PLUGPLAY_CONTROL_PROPERTY_DATA
, *PPLUGPLAY_CONTROL_PROPERTY_DATA
;
349 typedef struct _PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
351 UNICODE_STRING TargetDeviceInstance
;
352 ULONG Relation
; /* 1: Parent 2: Child 3: Sibling */
353 UNICODE_STRING RelatedDeviceInstance
;
354 } PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
, *PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA
;
357 typedef struct _PLUGPLAY_CONTOL_STATUS_DATA
359 UNICODE_STRING DeviceInstance
;
360 ULONG Operation
; /* 0: Get 1: Set 2: Clear */
361 ULONG DeviceStatus
; /* DN_ see cfg.h */
362 ULONG DeviceProblem
; /* CM_PROB_ see cfg.h */
363 } PLUGPLAY_CONTROL_STATUS_DATA
, *PPLUGPLAY_CONTROL_STATUS_DATA
;
366 typedef struct _PLUGPLAY_CONTROL_DEPTH_DATA
368 UNICODE_STRING DeviceInstance
;
370 } PLUGPLAY_CONTROL_DEPTH_DATA
, *PPLUGPLAY_CONTROL_DEPTH_DATA
;
373 typedef struct _PLUGPLAY_CONTROL_RESET_DEVICE_DATA
375 UNICODE_STRING DeviceInstance
;
376 } PLUGPLAY_CONTROL_RESET_DEVICE_DATA
, *PPLUGPLAY_CONTROL_RESET_DEVICE_DATA
;
378 typedef struct _PLUGPLAY_BUS_TYPE
380 PLUGPLAY_BUS_CLASS BusClass
;
383 INTERFACE_TYPE SystemBusType
;
384 PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType
;
386 } PLUGPLAY_BUS_TYPE
, *PPLUGPLAY_BUS_TYPE
;
388 typedef struct _PLUGPLAY_BUS_INSTANCE
390 PLUGPLAY_BUS_TYPE BusType
;
392 WCHAR BusName
[MAX_BUS_NAME
];
393 } PLUGPLAY_BUS_INSTANCE
, *PPLUGPLAY_BUS_INSTANCE
;
395 #ifdef NTOS_MODE_USER
397 #include <pshpack1.h>
398 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
{
400 UCHAR ShareDisposition
;
404 PHYSICAL_ADDRESS Start
;
408 PHYSICAL_ADDRESS Start
;
417 PHYSICAL_ADDRESS Start
;
437 } DeviceSpecificData
;
439 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
441 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
443 #define CmResourceTypeNull 0
444 #define CmResourceTypePort 1
445 #define CmResourceTypeInterrupt 2
446 #define CmResourceTypeMemory 3
447 #define CmResourceTypeDma 4
448 #define CmResourceTypeDeviceSpecific 5
449 #define CmResourceTypeBusNumber 6
450 #define CmResourceTypeMaximum 7
451 #define CmResourceTypeNonArbitrated 128
452 #define CmResourceTypeConfigData 128
453 #define CmResourceTypeDevicePrivate 129
454 #define CmResourceTypePcCardConfig 130
455 #define CmResourceTypeMfCardConfig 131
457 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
459 typedef enum _CM_SHARE_DISPOSITION
{
460 CmResourceShareUndetermined
,
461 CmResourceShareDeviceExclusive
,
462 CmResourceShareDriverExclusive
,
463 CmResourceShareShared
464 } CM_SHARE_DISPOSITION
;
466 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
468 #define CM_RESOURCE_PORT_MEMORY 0x0000
469 #define CM_RESOURCE_PORT_IO 0x0001
470 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
471 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
472 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
473 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
474 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
475 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
477 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
479 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
480 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
482 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
484 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
485 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
486 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
487 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
488 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
489 #define CM_RESOURCE_MEMORY_24 0x0010
490 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
492 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
494 #define CM_RESOURCE_DMA_8 0x0000
495 #define CM_RESOURCE_DMA_16 0x0001
496 #define CM_RESOURCE_DMA_32 0x0002
497 #define CM_RESOURCE_DMA_8_AND_16 0x0004
498 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
499 #define CM_RESOURCE_DMA_TYPE_A 0x0010
500 #define CM_RESOURCE_DMA_TYPE_B 0x0020
501 #define CM_RESOURCE_DMA_TYPE_F 0x0040
503 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
507 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
508 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
510 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
511 INTERFACE_TYPE InterfaceType
;
513 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
514 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
516 typedef struct _CM_RESOURCE_LIST
{
518 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
519 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
521 typedef struct _CM_INT13_DRIVE_PARAMETER
{
524 USHORT SectorsPerTrack
;
527 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
529 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
531 ULONG BytesPerSector
;
532 ULONG NumberOfCylinders
;
533 ULONG SectorsPerTrack
;
535 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;