8a4a721a72f32b809d5caa829ab74ebc2cfa59a0
[reactos.git] / reactos / include / ndk / cmtypes.h
1 /*
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)
6 * UPDATE HISTORY:
7 * Created 06/10/04
8 */
9
10 #ifndef _CMTYPES_H
11 #define _CMTYPES_H
12
13 /* DEPENDENCIES **************************************************************/
14 #include <cfg.h>
15 #include "iotypes.h"
16
17 /* EXPORTED DATA *************************************************************/
18
19 /* CONSTANTS *****************************************************************/
20 #define MAX_BUS_NAME 24
21
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
26
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
31
32 /* ENUMERATIONS **************************************************************/
33
34 #ifdef NTOS_MODE_USER
35 typedef enum _KEY_INFORMATION_CLASS
36 {
37 KeyBasicInformation,
38 KeyNodeInformation,
39 KeyFullInformation,
40 KeyNameInformation,
41 KeyCachedInformation,
42 KeyFlagsInformation
43 } KEY_INFORMATION_CLASS;
44
45 typedef enum _KEY_VALUE_INFORMATION_CLASS
46 {
47 KeyValueBasicInformation,
48 KeyValueFullInformation,
49 KeyValuePartialInformation,
50 KeyValueFullInformationAlign64,
51 KeyValuePartialInformationAlign64
52 } KEY_VALUE_INFORMATION_CLASS;
53
54 typedef enum _KEY_SET_INFORMATION_CLASS
55 {
56 KeyWriteTimeInformation,
57 KeyUserFlagsInformation,
58 MaxKeySetInfoClass
59 } KEY_SET_INFORMATION_CLASS;
60 #endif
61
62 typedef enum _PLUGPLAY_CONTROL_CLASS
63 {
64 PlugPlayControlUserResponse = 0x07,
65 PlugPlayControlProperty = 0x0A,
66 PlugPlayControlGetRelatedDevice = 0x0C,
67 PlugPlayControlDeviceStatus = 0x0E,
68 PlugPlayControlGetDeviceDepth,
69 PlugPlayControlResetDevice = 0x14
70 } PLUGPLAY_CONTROL_CLASS;
71
72 typedef enum _PLUGPLAY_BUS_CLASS
73 {
74 SystemBus,
75 PlugPlayVirtualBus,
76 MaxPlugPlayBusClass
77 } PLUGPLAY_BUS_CLASS, *PPLUGPLAY_BUS_CLASS;
78
79 typedef enum _PLUGPLAY_VIRTUAL_BUS_TYPE
80 {
81 Root,
82 MaxPlugPlayVirtualBusType
83 } PLUGPLAY_VIRTUAL_BUS_TYPE, *PPLUGPLAY_VIRTUAL_BUS_TYPE;
84
85 typedef enum _PLUGPLAY_EVENT_CATEGORY
86 {
87 HardwareProfileChangeEvent,
88 TargetDeviceChangeEvent,
89 DeviceClassChangeEvent,
90 CustomDeviceEvent,
91 DeviceInstallEvent,
92 DeviceArrivalEvent,
93 PowerEvent,
94 VetoEvent,
95 BlockedDriverEvent,
96 MaxPlugEventCategory
97 } PLUGPLAY_EVENT_CATEGORY;
98 /* TYPES *********************************************************************/
99
100 #ifdef NTOS_MODE_USER
101 typedef struct _KEY_WRITE_TIME_INFORMATION
102 {
103 LARGE_INTEGER LastWriteTime;
104 } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
105
106 typedef struct _KEY_USER_FLAGS_INFORMATION
107 {
108 ULONG UserFlags;
109 } KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION;
110
111 typedef struct _KEY_FULL_INFORMATION
112 {
113 LARGE_INTEGER LastWriteTime;
114 ULONG TitleIndex;
115 ULONG ClassOffset;
116 ULONG ClassLength;
117 ULONG SubKeys;
118 ULONG MaxNameLen;
119 ULONG MaxClassLen;
120 ULONG Values;
121 ULONG MaxValueNameLen;
122 ULONG MaxValueDataLen;
123 WCHAR Class[1];
124 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
125
126 typedef struct _KEY_NODE_INFORMATION
127 {
128 LARGE_INTEGER LastWriteTime;
129 ULONG TitleIndex;
130 ULONG ClassOffset;
131 ULONG ClassLength;
132 ULONG NameLength;
133 WCHAR Name[1];
134 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
135
136 typedef struct _KEY_VALUE_ENTRY
137 {
138 PUNICODE_STRING ValueName;
139 ULONG DataLength;
140 ULONG DataOffset;
141 ULONG Type;
142 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
143
144 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
145 {
146 ULONG TitleIndex;
147 ULONG Type;
148 ULONG DataLength;
149 UCHAR Data[1];
150 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
151
152 typedef struct _KEY_VALUE_BASIC_INFORMATION
153 {
154 ULONG TitleIndex;
155 ULONG Type;
156 ULONG NameLength;
157 WCHAR Name[1];
158 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
159
160 typedef struct _KEY_VALUE_FULL_INFORMATION
161 {
162 ULONG TitleIndex;
163 ULONG Type;
164 ULONG DataOffset;
165 ULONG DataLength;
166 ULONG NameLength;
167 WCHAR Name[1];
168 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
169
170 typedef struct _KEY_BASIC_INFORMATION
171 {
172 LARGE_INTEGER LastWriteTime;
173 ULONG TitleIndex;
174 ULONG NameLength;
175 WCHAR Name[1];
176 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
177
178 #endif
179
180 typedef struct _PLUGPLAY_EVENT_BLOCK
181 {
182 GUID EventGuid;
183 PLUGPLAY_EVENT_CATEGORY EventCategory;
184 PULONG Result;
185 ULONG Flags;
186 ULONG TotalSize;
187 PVOID DeviceObject;
188 union
189 {
190 struct
191 {
192 GUID ClassGuid;
193 WCHAR SymbolicLinkName[ANYSIZE_ARRAY];
194 } DeviceClass;
195 struct
196 {
197 WCHAR DeviceIds[ANYSIZE_ARRAY];
198 } TargetDevice;
199 struct
200 {
201 WCHAR DeviceId[ANYSIZE_ARRAY];
202 } InstallDevice;
203 struct
204 {
205 PVOID NotificationStructure;
206 WCHAR DeviceIds[ANYSIZE_ARRAY];
207 } CustomNotification;
208 struct
209 {
210 PVOID Notification;
211 } ProfileNotification;
212 struct
213 {
214 ULONG NotificationCode;
215 ULONG NotificationData;
216 } PowerNotification;
217 struct
218 {
219 PNP_VETO_TYPE VetoType;
220 WCHAR DeviceIdVetoNameBuffer[ANYSIZE_ARRAY];
221 } VetoNotification;
222 struct
223 {
224 GUID BlockedDriverGuid;
225 } BlockedDriverNotification;
226 };
227 } PLUGPLAY_EVENT_BLOCK, *PPLUGPLAY_EVENT_BLOCK;
228
229 /* Class 0x0A */
230 typedef struct _PLUGPLAY_CONTROL_PROPERTY_DATA
231 {
232 UNICODE_STRING DeviceInstance;
233 ULONG Property;
234 PVOID Buffer;
235 ULONG BufferSize;
236 } PLUGPLAY_CONTROL_PROPERTY_DATA, *PPLUGPLAY_CONTROL_PROPERTY_DATA;
237
238 /* Class 0x0C */
239 typedef struct _PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
240 {
241 UNICODE_STRING TargetDeviceInstance;
242 ULONG Relation; /* 1: Parent 2: Child 3: Sibling */
243 UNICODE_STRING RelatedDeviceInstance;
244 } PLUGPLAY_CONTROL_RELATED_DEVICE_DATA, *PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA;
245
246 /* Class 0x0E */
247 typedef struct _PLUGPLAY_CONTOL_STATUS_DATA
248 {
249 UNICODE_STRING DeviceInstance;
250 ULONG Operation; /* 0: Get 1: Set 2: Clear */
251 ULONG DeviceStatus; /* DN_ see cfg.h */
252 ULONG DeviceProblem; /* CM_PROB_ see cfg.h */
253 } PLUGPLAY_CONTROL_STATUS_DATA, *PPLUGPLAY_CONTROL_STATUS_DATA;
254
255 /* Class 0x0F */
256 typedef struct _PLUGPLAY_CONTROL_DEPTH_DATA
257 {
258 UNICODE_STRING DeviceInstance;
259 ULONG Depth;
260 } PLUGPLAY_CONTROL_DEPTH_DATA, *PPLUGPLAY_CONTROL_DEPTH_DATA;
261
262 /* Class 0x14 */
263 typedef struct _PLUGPLAY_CONTROL_RESET_DEVICE_DATA
264 {
265 UNICODE_STRING DeviceInstance;
266 } PLUGPLAY_CONTROL_RESET_DEVICE_DATA, *PPLUGPLAY_CONTROL_RESET_DEVICE_DATA;
267
268 typedef struct _PLUGPLAY_BUS_TYPE
269 {
270 PLUGPLAY_BUS_CLASS BusClass;
271 union
272 {
273 INTERFACE_TYPE SystemBusType;
274 PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType;
275 };
276 } PLUGPLAY_BUS_TYPE, *PPLUGPLAY_BUS_TYPE;
277
278 typedef struct _PLUGPLAY_BUS_INSTANCE
279 {
280 PLUGPLAY_BUS_TYPE BusType;
281 ULONG BusNumber;
282 WCHAR BusName[MAX_BUS_NAME];
283 } PLUGPLAY_BUS_INSTANCE, *PPLUGPLAY_BUS_INSTANCE;
284
285 #ifdef NTOS_MODE_USER
286
287 #include <pshpack1.h>
288 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
289 UCHAR Type;
290 UCHAR ShareDisposition;
291 USHORT Flags;
292 union {
293 struct {
294 PHYSICAL_ADDRESS Start;
295 ULONG Length;
296 } Generic;
297 struct {
298 PHYSICAL_ADDRESS Start;
299 ULONG Length;
300 } Port;
301 struct {
302 ULONG Level;
303 ULONG Vector;
304 ULONG Affinity;
305 } Interrupt;
306 struct {
307 PHYSICAL_ADDRESS Start;
308 ULONG Length;
309 } Memory;
310 struct {
311 ULONG Channel;
312 ULONG Port;
313 ULONG Reserved1;
314 } Dma;
315 struct {
316 ULONG Data[3];
317 } DevicePrivate;
318 struct {
319 ULONG Start;
320 ULONG Length;
321 ULONG Reserved;
322 } BusNumber;
323 struct {
324 ULONG DataSize;
325 ULONG Reserved1;
326 ULONG Reserved2;
327 } DeviceSpecificData;
328 } u;
329 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
330
331 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
332
333 #define CmResourceTypeNull 0
334 #define CmResourceTypePort 1
335 #define CmResourceTypeInterrupt 2
336 #define CmResourceTypeMemory 3
337 #define CmResourceTypeDma 4
338 #define CmResourceTypeDeviceSpecific 5
339 #define CmResourceTypeBusNumber 6
340 #define CmResourceTypeMaximum 7
341 #define CmResourceTypeNonArbitrated 128
342 #define CmResourceTypeConfigData 128
343 #define CmResourceTypeDevicePrivate 129
344 #define CmResourceTypePcCardConfig 130
345 #define CmResourceTypeMfCardConfig 131
346
347 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
348
349 typedef enum _CM_SHARE_DISPOSITION {
350 CmResourceShareUndetermined,
351 CmResourceShareDeviceExclusive,
352 CmResourceShareDriverExclusive,
353 CmResourceShareShared
354 } CM_SHARE_DISPOSITION;
355
356 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
357
358 #define CM_RESOURCE_PORT_MEMORY 0x0000
359 #define CM_RESOURCE_PORT_IO 0x0001
360 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
361 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
362 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
363 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
364 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
365 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
366
367 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
368
369 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
370 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
371
372 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
373
374 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
375 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
376 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
377 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
378 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
379 #define CM_RESOURCE_MEMORY_24 0x0010
380 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
381
382 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
383
384 #define CM_RESOURCE_DMA_8 0x0000
385 #define CM_RESOURCE_DMA_16 0x0001
386 #define CM_RESOURCE_DMA_32 0x0002
387 #define CM_RESOURCE_DMA_8_AND_16 0x0004
388 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
389 #define CM_RESOURCE_DMA_TYPE_A 0x0010
390 #define CM_RESOURCE_DMA_TYPE_B 0x0020
391 #define CM_RESOURCE_DMA_TYPE_F 0x0040
392
393 typedef struct _CM_PARTIAL_RESOURCE_LIST {
394 USHORT Version;
395 USHORT Revision;
396 ULONG Count;
397 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
398 } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
399
400 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR {
401 INTERFACE_TYPE InterfaceType;
402 ULONG BusNumber;
403 CM_PARTIAL_RESOURCE_LIST PartialResourceList;
404 } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
405
406 typedef struct _CM_RESOURCE_LIST {
407 ULONG Count;
408 CM_FULL_RESOURCE_DESCRIPTOR List[1];
409 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
410
411 typedef struct _CM_INT13_DRIVE_PARAMETER {
412 USHORT DriveSelect;
413 ULONG MaxCylinders;
414 USHORT SectorsPerTrack;
415 USHORT MaxHeads;
416 USHORT NumberDrives;
417 } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
418
419 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
420 {
421 ULONG BytesPerSector;
422 ULONG NumberOfCylinders;
423 ULONG SectorsPerTrack;
424 ULONG NumberOfHeads;
425 } CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;
426
427 #include <poppack.h>
428
429 #endif
430
431 #endif
432