NtPlugPlayControl: Implement PlugPlayControlResetDevice case
[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 #else
179
180 typedef struct _REG_DELETE_KEY_INFORMATION
181 {
182 PVOID Object;
183 } REG_DELETE_KEY_INFORMATION, *PREG_DELETE_KEY_INFORMATION;
184
185 typedef struct _REG_SET_VALUE_KEY_INFORMATION
186 {
187 PVOID Object;
188 PUNICODE_STRING ValueName;
189 ULONG TitleIndex;
190 ULONG Type;
191 PVOID Data;
192 ULONG DataSize;
193 } REG_SET_VALUE_KEY_INFORMATION, *PREG_SET_VALUE_KEY_INFORMATION;
194
195 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
196 {
197 PVOID Object;
198 PUNICODE_STRING ValueName;
199 } REG_DELETE_VALUE_KEY_INFORMATION, *PREG_DELETE_VALUE_KEY_INFORMATION;
200
201 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
202 {
203 PVOID Object;
204 KEY_SET_INFORMATION_CLASS KeySetInformationClass;
205 PVOID KeySetInformation;
206 ULONG KeySetInformationLength;
207 } REG_SET_INFORMATION_KEY_INFORMATION, *PREG_SET_INFORMATION_KEY_INFORMATION;
208
209 typedef struct _REG_ENUMERATE_KEY_INFORMATION
210 {
211 PVOID Object;
212 ULONG Index;
213 KEY_INFORMATION_CLASS KeyInformationClass;
214 PVOID KeyInformation;
215 ULONG Length;
216 PULONG ResultLength;
217 } REG_ENUMERATE_KEY_INFORMATION, *PREG_ENUMERATE_KEY_INFORMATION;
218
219 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
220 {
221 PVOID Object;
222 ULONG Index;
223 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
224 PVOID KeyValueInformation;
225 ULONG Length;
226 PULONG ResultLength;
227 } REG_ENUMERATE_VALUE_KEY_INFORMATION, *PREG_ENUMERATE_VALUE_KEY_INFORMATION;
228
229 typedef struct _REG_QUERY_KEY_INFORMATION
230 {
231 PVOID Object;
232 KEY_INFORMATION_CLASS KeyInformationClass;
233 PVOID KeyInformation;
234 ULONG Length;
235 PULONG ResultLength;
236 } REG_QUERY_KEY_INFORMATION, *PREG_QUERY_KEY_INFORMATION;
237
238 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
239 {
240 PVOID Object;
241 PUNICODE_STRING ValueName;
242 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
243 PVOID KeyValueInformation;
244 ULONG Length;
245 PULONG ResultLength;
246 } REG_QUERY_VALUE_KEY_INFORMATION, *PREG_QUERY_VALUE_KEY_INFORMATION;
247
248 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
249 {
250 PVOID Object;
251 PKEY_VALUE_ENTRY ValueEntries;
252 ULONG EntryCount;
253 PVOID ValueBuffer;
254 PULONG BufferLength;
255 PULONG RequiredBufferLength;
256 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION;
257
258 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
259 {
260 PUNICODE_STRING CompleteName;
261 } REG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_CREATE_KEY_INFORMATION;
262
263 typedef struct _REG_POST_CREATE_KEY_INFORMATION
264 {
265 PUNICODE_STRING CompleteName;
266 PVOID Object;
267 NTSTATUS Status;
268 } REG_POST_CREATE_KEY_INFORMATION, *PREG_POST_CREATE_KEY_INFORMATION;
269
270 typedef struct _REG_PRE_OPEN_KEY_INFORMATION
271 {
272 PUNICODE_STRING CompleteName;
273 } REG_PRE_OPEN_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION;
274
275 typedef struct _REG_POST_OPEN_KEY_INFORMATION
276 {
277 PUNICODE_STRING CompleteName;
278 PVOID Object;
279 NTSTATUS Status;
280 } REG_POST_OPEN_KEY_INFORMATION, *PREG_POST_OPEN_KEY_INFORMATION;
281
282 typedef struct _REG_POST_OPERATION_INFORMATION
283 {
284 PVOID Object;
285 NTSTATUS Status;
286 } REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION;
287
288 #endif
289
290 typedef struct _PLUGPLAY_EVENT_BLOCK
291 {
292 GUID EventGuid;
293 PLUGPLAY_EVENT_CATEGORY EventCategory;
294 PULONG Result;
295 ULONG Flags;
296 ULONG TotalSize;
297 PVOID DeviceObject;
298 union
299 {
300 struct
301 {
302 GUID ClassGuid;
303 WCHAR SymbolicLinkName[ANYSIZE_ARRAY];
304 } DeviceClass;
305 struct
306 {
307 WCHAR DeviceIds[ANYSIZE_ARRAY];
308 } TargetDevice;
309 struct
310 {
311 WCHAR DeviceId[ANYSIZE_ARRAY];
312 } InstallDevice;
313 struct
314 {
315 PVOID NotificationStructure;
316 WCHAR DeviceIds[ANYSIZE_ARRAY];
317 } CustomNotification;
318 struct
319 {
320 PVOID Notification;
321 } ProfileNotification;
322 struct
323 {
324 ULONG NotificationCode;
325 ULONG NotificationData;
326 } PowerNotification;
327 struct
328 {
329 PNP_VETO_TYPE VetoType;
330 WCHAR DeviceIdVetoNameBuffer[ANYSIZE_ARRAY];
331 } VetoNotification;
332 struct
333 {
334 GUID BlockedDriverGuid;
335 } BlockedDriverNotification;
336 };
337 } PLUGPLAY_EVENT_BLOCK, *PPLUGPLAY_EVENT_BLOCK;
338
339 /* Class 0x0A */
340 typedef struct _PLUGPLAY_CONTROL_PROPERTY_DATA
341 {
342 UNICODE_STRING DeviceInstance;
343 ULONG Property;
344 PVOID Buffer;
345 ULONG BufferSize;
346 } PLUGPLAY_CONTROL_PROPERTY_DATA, *PPLUGPLAY_CONTROL_PROPERTY_DATA;
347
348 /* Class 0x0C */
349 typedef struct _PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
350 {
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;
355
356 /* Class 0x0E */
357 typedef struct _PLUGPLAY_CONTOL_STATUS_DATA
358 {
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;
364
365 /* Class 0x0F */
366 typedef struct _PLUGPLAY_CONTROL_DEPTH_DATA
367 {
368 UNICODE_STRING DeviceInstance;
369 ULONG Depth;
370 } PLUGPLAY_CONTROL_DEPTH_DATA, *PPLUGPLAY_CONTROL_DEPTH_DATA;
371
372 /* Class 0x14 */
373 typedef struct _PLUGPLAY_CONTROL_RESET_DEVICE_DATA
374 {
375 UNICODE_STRING DeviceInstance;
376 } PLUGPLAY_CONTROL_RESET_DEVICE_DATA, *PPLUGPLAY_CONTROL_RESET_DEVICE_DATA;
377
378 typedef struct _PLUGPLAY_BUS_TYPE
379 {
380 PLUGPLAY_BUS_CLASS BusClass;
381 union
382 {
383 INTERFACE_TYPE SystemBusType;
384 PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType;
385 };
386 } PLUGPLAY_BUS_TYPE, *PPLUGPLAY_BUS_TYPE;
387
388 typedef struct _PLUGPLAY_BUS_INSTANCE
389 {
390 PLUGPLAY_BUS_TYPE BusType;
391 ULONG BusNumber;
392 WCHAR BusName[MAX_BUS_NAME];
393 } PLUGPLAY_BUS_INSTANCE, *PPLUGPLAY_BUS_INSTANCE;
394
395 #ifdef NTOS_MODE_USER
396
397 #include <pshpack1.h>
398 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
399 UCHAR Type;
400 UCHAR ShareDisposition;
401 USHORT Flags;
402 union {
403 struct {
404 PHYSICAL_ADDRESS Start;
405 ULONG Length;
406 } Generic;
407 struct {
408 PHYSICAL_ADDRESS Start;
409 ULONG Length;
410 } Port;
411 struct {
412 ULONG Level;
413 ULONG Vector;
414 ULONG Affinity;
415 } Interrupt;
416 struct {
417 PHYSICAL_ADDRESS Start;
418 ULONG Length;
419 } Memory;
420 struct {
421 ULONG Channel;
422 ULONG Port;
423 ULONG Reserved1;
424 } Dma;
425 struct {
426 ULONG Data[3];
427 } DevicePrivate;
428 struct {
429 ULONG Start;
430 ULONG Length;
431 ULONG Reserved;
432 } BusNumber;
433 struct {
434 ULONG DataSize;
435 ULONG Reserved1;
436 ULONG Reserved2;
437 } DeviceSpecificData;
438 } u;
439 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
440
441 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
442
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
456
457 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
458
459 typedef enum _CM_SHARE_DISPOSITION {
460 CmResourceShareUndetermined,
461 CmResourceShareDeviceExclusive,
462 CmResourceShareDriverExclusive,
463 CmResourceShareShared
464 } CM_SHARE_DISPOSITION;
465
466 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
467
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
476
477 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
478
479 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
480 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
481
482 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
483
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
491
492 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
493
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
502
503 typedef struct _CM_PARTIAL_RESOURCE_LIST {
504 USHORT Version;
505 USHORT Revision;
506 ULONG Count;
507 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
508 } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
509
510 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR {
511 INTERFACE_TYPE InterfaceType;
512 ULONG BusNumber;
513 CM_PARTIAL_RESOURCE_LIST PartialResourceList;
514 } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
515
516 typedef struct _CM_RESOURCE_LIST {
517 ULONG Count;
518 CM_FULL_RESOURCE_DESCRIPTOR List[1];
519 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
520
521 typedef struct _CM_INT13_DRIVE_PARAMETER {
522 USHORT DriveSelect;
523 ULONG MaxCylinders;
524 USHORT SectorsPerTrack;
525 USHORT MaxHeads;
526 USHORT NumberDrives;
527 } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
528
529 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
530 {
531 ULONG BytesPerSector;
532 ULONG NumberOfCylinders;
533 ULONG SectorsPerTrack;
534 ULONG NumberOfHeads;
535 } CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;
536
537 #include <poppack.h>
538
539 #endif
540
541 #endif
542