[UMPNPMGR] Partially implement ReenumerateDeviceInstance which is needed by the Lenov...
[reactos.git] / sdk / include / ndk / cmtypes.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 cmtypes.h
8
9 Abstract:
10
11 Type definitions for the Configuration Manager.
12
13 Author:
14
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16
17 --*/
18
19 #ifndef _CMTYPES_H
20 #define _CMTYPES_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26 #include <cfg.h>
27 #include <iotypes.h>
28
29 #define MAX_BUS_NAME 24
30
31 //
32 // PLUGPLAY_CONTROL_PROPERTY_DATA.Properties
33 //
34 #define PNP_PROPERTY_UI_NUMBER 0
35 #define PNP_PROPERTY_PHYSICAL_DEVICE_OBJECT_NAME 1
36 #define PNP_PROPERTY_BUSTYPEGUID 2
37 #define PNP_PROPERTY_LEGACYBUSTYPE 3
38 #define PNP_PROPERTY_BUSNUMBER 4
39 #define PNP_PROPERTY_POWER_DATA 5
40 #define PNP_PROPERTY_REMOVAL_POLICY 6
41 #define PNP_PROPERTY_REMOVAL_POLICY_OVERRIDE 7
42 #define PNP_PROPERTY_ADDRESS 8
43 #define PNP_PROPERTY_ENUMERATOR_NAME 9
44 #define PNP_PROPERTY_REMOVAL_POLICY_HARDWARE_DEFAULT 10
45 #define PNP_PROPERTY_INSTALL_STATE 11
46 #define PNP_PROPERTY_LOCATION_PATHS 12
47 #define PNP_PROPERTY_CONTAINERID 13
48
49 //
50 // PLUGPLAY_CONTROL_RELATED_DEVICE_DATA.Relations
51 //
52 #define PNP_GET_PARENT_DEVICE 1
53 #define PNP_GET_CHILD_DEVICE 2
54 #define PNP_GET_SIBLING_DEVICE 3
55
56 //
57 // PLUGPLAY_CONTROL_STATUS_DATA.Operation
58 //
59 #define PNP_GET_DEVICE_STATUS 0
60 #define PNP_SET_DEVICE_STATUS 1
61 #define PNP_CLEAR_DEVICE_STATUS 2
62
63 //
64 // PLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA.Relations
65 //
66 #define PNP_EJECT_RELATIONS 0
67 #define PNP_REMOVAL_RELATIONS 1
68 #define PNP_POWER_RELATIONS 2
69 #define PNP_BUS_RELATIONS 3
70
71
72 #ifdef NTOS_MODE_USER
73
74 //
75 // Resource Type
76 //
77 #define CmResourceTypeNull 0
78 #define CmResourceTypePort 1
79 #define CmResourceTypeInterrupt 2
80 #define CmResourceTypeMemory 3
81 #define CmResourceTypeDma 4
82 #define CmResourceTypeDeviceSpecific 5
83 #define CmResourceTypeBusNumber 6
84 #define CmResourceTypeMemoryLarge 7
85 #define CmResourceTypeNonArbitrated 128
86 #define CmResourceTypeConfigData 128
87 #define CmResourceTypeDevicePrivate 129
88 #define CmResourceTypePcCardConfig 130
89 #define CmResourceTypeMfCardConfig 131
90
91
92 //
93 // Resource Descriptor Share Dispositions
94 //
95 typedef enum _CM_SHARE_DISPOSITION
96 {
97 CmResourceShareUndetermined,
98 CmResourceShareDeviceExclusive,
99 CmResourceShareDriverExclusive,
100 CmResourceShareShared
101 } CM_SHARE_DISPOSITION;
102
103 #endif
104
105 //
106 // Port Resource Descriptor Flags
107 //
108 #define CM_RESOURCE_PORT_MEMORY 0x0000
109 #define CM_RESOURCE_PORT_IO 0x0001
110 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
111 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
112 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
113 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
114 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
115 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
116
117 //
118 // Memory Resource Descriptor Flags
119 //
120 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
121 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
122 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
123 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
124 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
125 #define CM_RESOURCE_MEMORY_24 0x0010
126 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
127
128 //
129 // DMA Resource Descriptor Flags
130 //
131 #define CM_RESOURCE_DMA_8 0x0000
132 #define CM_RESOURCE_DMA_16 0x0001
133 #define CM_RESOURCE_DMA_32 0x0002
134 #define CM_RESOURCE_DMA_8_AND_16 0x0004
135 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
136 #define CM_RESOURCE_DMA_TYPE_A 0x0010
137 #define CM_RESOURCE_DMA_TYPE_B 0x0020
138 #define CM_RESOURCE_DMA_TYPE_F 0x0040
139
140 //
141 // Interrupt Resource Descriptor Flags
142 //
143 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
144 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
145 #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
146 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
147
148 //
149 // NtInitializeRegistry Flags
150 //
151 #define CM_BOOT_FLAG_SMSS 0x0000
152 #define CM_BOOT_FLAG_SETUP 0x0001
153 #define CM_BOOT_FLAG_ACCEPTED 0x0002
154 #define CM_BOOT_FLAG_MAX (CM_BOOT_FLAG_ACCEPTED + 999)
155
156 #ifdef NTOS_MODE_USER
157
158 //
159 // Information Classes for NtQueryKey
160 //
161 typedef enum _KEY_INFORMATION_CLASS
162 {
163 KeyBasicInformation,
164 KeyNodeInformation,
165 KeyFullInformation,
166 KeyNameInformation,
167 KeyCachedInformation,
168 KeyFlagsInformation,
169 KeyVirtualizationInformation,
170 KeyHandleTagsInformation,
171 MaxKeyInfoClass
172 } KEY_INFORMATION_CLASS;
173
174 typedef enum _KEY_VALUE_INFORMATION_CLASS
175 {
176 KeyValueBasicInformation,
177 KeyValueFullInformation,
178 KeyValuePartialInformation,
179 KeyValueFullInformationAlign64,
180 KeyValuePartialInformationAlign64,
181 MaxKeyValueInfoClass
182 } KEY_VALUE_INFORMATION_CLASS;
183
184 typedef enum _KEY_SET_INFORMATION_CLASS {
185 KeyWriteTimeInformation,
186 KeyWow64FlagsInformation,
187 KeyControlFlagsInformation,
188 KeySetVirtualizationInformation,
189 KeySetDebugInformation,
190 KeySetHandleTagsInformation,
191 MaxKeySetInfoClass
192 } KEY_SET_INFORMATION_CLASS;
193
194 #endif
195
196 //
197 // Plag and Play Classes
198 //
199 typedef enum _PLUGPLAY_CONTROL_CLASS
200 {
201 PlugPlayControlEnumerateDevice,
202 PlugPlayControlRegisterNewDevice,
203 PlugPlayControlDeregisterDevice,
204 PlugPlayControlInitializeDevice,
205 PlugPlayControlStartDevice,
206 PlugPlayControlUnlockDevice,
207 PlugPlayControlQueryAndRemoveDevice,
208 PlugPlayControlUserResponse,
209 PlugPlayControlGenerateLegacyDevice,
210 PlugPlayControlGetInterfaceDeviceList,
211 PlugPlayControlProperty,
212 PlugPlayControlDeviceClassAssociation,
213 PlugPlayControlGetRelatedDevice,
214 PlugPlayControlGetInterfaceDeviceAlias,
215 PlugPlayControlDeviceStatus,
216 PlugPlayControlGetDeviceDepth,
217 PlugPlayControlQueryDeviceRelations,
218 PlugPlayControlTargetDeviceRelation,
219 PlugPlayControlQueryConflictList,
220 PlugPlayControlRetrieveDock,
221 PlugPlayControlResetDevice,
222 PlugPlayControlHaltDevice,
223 PlugPlayControlGetBlockedDriverList,
224 MaxPlugPlayControl
225 } PLUGPLAY_CONTROL_CLASS;
226
227 typedef enum _PLUGPLAY_BUS_CLASS
228 {
229 SystemBus,
230 PlugPlayVirtualBus,
231 MaxPlugPlayBusClass
232 } PLUGPLAY_BUS_CLASS, *PPLUGPLAY_BUS_CLASS;
233
234 //
235 // Plag and Play Bus Types
236 //
237 typedef enum _PLUGPLAY_VIRTUAL_BUS_TYPE
238 {
239 Root,
240 MaxPlugPlayVirtualBusType
241 } PLUGPLAY_VIRTUAL_BUS_TYPE, *PPLUGPLAY_VIRTUAL_BUS_TYPE;
242
243 //
244 // Plag and Play Event Categories
245 //
246 typedef enum _PLUGPLAY_EVENT_CATEGORY
247 {
248 HardwareProfileChangeEvent,
249 TargetDeviceChangeEvent,
250 DeviceClassChangeEvent,
251 CustomDeviceEvent,
252 DeviceInstallEvent,
253 DeviceArrivalEvent,
254 PowerEvent,
255 VetoEvent,
256 BlockedDriverEvent,
257 MaxPlugEventCategory
258 } PLUGPLAY_EVENT_CATEGORY;
259
260 #ifdef NTOS_MODE_USER
261
262 //
263 // Information Structures for NtQueryKeyInformation
264 //
265 typedef struct _KEY_WRITE_TIME_INFORMATION
266 {
267 LARGE_INTEGER LastWriteTime;
268 } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
269
270 typedef struct _KEY_WOW64_FLAGS_INFORMATION
271 {
272 ULONG UserFlags;
273 } KEY_WOW64_FLAGS_INFORMATION, *PKEY_WOW64_FLAGS_INFORMATION;
274
275 typedef struct _KEY_USER_FLAGS_INFORMATION
276 {
277 ULONG UserFlags;
278 } KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION;
279
280 typedef struct _KEY_HANDLE_TAGS_INFORMATION
281 {
282 ULONG HandleTags;
283 } KEY_HANDLE_TAGS_INFORMATION, *PKEY_HANDLE_TAGS_INFORMATION;
284
285 typedef struct _KEY_CONTROL_FLAGS_INFORMATION
286 {
287 ULONG ControlFlags;
288 } KEY_CONTROL_FLAGS_INFORMATION, *PKEY_CONTROL_FLAGS_INFORMATION;
289
290 typedef struct _KEY_VIRTUALIZATION_INFORMATION
291 {
292 ULONG VirtualizationCandidate:1;
293 ULONG VirtualizationEnabled:1;
294 ULONG VirtualTarget:1;
295 ULONG VirtualStore:1;
296 ULONG VirtualSource:1;
297 ULONG Reserved:27;
298 } KEY_VIRTUALIZATION_INFORMATION, *PKEY_VIRTUALIZATION_INFORMATION;
299
300 typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION
301 {
302 ULONG VirtualTarget:1;
303 ULONG VirtualStore:1;
304 ULONG VirtualSource:1;
305 ULONG Reserved:29;
306 } KEY_SET_VIRTUALIZATION_INFORMATION, *PKEY_SET_VIRTUALIZATION_INFORMATION;
307
308
309 typedef struct _KEY_FULL_INFORMATION
310 {
311 LARGE_INTEGER LastWriteTime;
312 ULONG TitleIndex;
313 ULONG ClassOffset;
314 ULONG ClassLength;
315 ULONG SubKeys;
316 ULONG MaxNameLen;
317 ULONG MaxClassLen;
318 ULONG Values;
319 ULONG MaxValueNameLen;
320 ULONG MaxValueDataLen;
321 WCHAR Class[1];
322 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
323
324 typedef struct _KEY_NAME_INFORMATION
325 {
326 ULONG NameLength;
327 WCHAR Name[1];
328 } KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION;
329
330
331 typedef struct _KEY_NODE_INFORMATION
332 {
333 LARGE_INTEGER LastWriteTime;
334 ULONG TitleIndex;
335 ULONG ClassOffset;
336 ULONG ClassLength;
337 ULONG NameLength;
338 WCHAR Name[1];
339 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
340
341 typedef struct _KEY_VALUE_ENTRY
342 {
343 PUNICODE_STRING ValueName;
344 ULONG DataLength;
345 ULONG DataOffset;
346 ULONG Type;
347 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
348
349 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
350 {
351 ULONG TitleIndex;
352 ULONG Type;
353 ULONG DataLength;
354 UCHAR Data[1];
355 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
356
357 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
358 {
359 ULONG Type;
360 ULONG DataLength;
361 UCHAR Data[1];
362 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64;
363
364 typedef struct _KEY_VALUE_BASIC_INFORMATION
365 {
366 ULONG TitleIndex;
367 ULONG Type;
368 ULONG NameLength;
369 WCHAR Name[1];
370 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
371
372 typedef struct _KEY_VALUE_FULL_INFORMATION
373 {
374 ULONG TitleIndex;
375 ULONG Type;
376 ULONG DataOffset;
377 ULONG DataLength;
378 ULONG NameLength;
379 WCHAR Name[1];
380 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
381
382 typedef struct _KEY_BASIC_INFORMATION
383 {
384 LARGE_INTEGER LastWriteTime;
385 ULONG TitleIndex;
386 ULONG NameLength;
387 WCHAR Name[1];
388 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
389
390 #endif
391
392 //
393 // Plug and Play Event Block
394 //
395 typedef struct _PLUGPLAY_EVENT_BLOCK
396 {
397 GUID EventGuid;
398 PLUGPLAY_EVENT_CATEGORY EventCategory;
399 PULONG Result;
400 ULONG Flags;
401 ULONG TotalSize;
402 PVOID DeviceObject;
403 union
404 {
405 struct
406 {
407 GUID ClassGuid;
408 WCHAR SymbolicLinkName[ANYSIZE_ARRAY];
409 } DeviceClass;
410 struct
411 {
412 WCHAR DeviceIds[ANYSIZE_ARRAY];
413 } TargetDevice;
414 struct
415 {
416 WCHAR DeviceId[ANYSIZE_ARRAY];
417 } InstallDevice;
418 struct
419 {
420 PVOID NotificationStructure;
421 WCHAR DeviceIds[ANYSIZE_ARRAY];
422 } CustomNotification;
423 struct
424 {
425 PVOID Notification;
426 } ProfileNotification;
427 struct
428 {
429 ULONG NotificationCode;
430 ULONG NotificationData;
431 } PowerNotification;
432 struct
433 {
434 PNP_VETO_TYPE VetoType;
435 WCHAR DeviceIdVetoNameBuffer[ANYSIZE_ARRAY];
436 } VetoNotification;
437 struct
438 {
439 GUID BlockedDriverGuid;
440 } BlockedDriverNotification;
441 };
442 } PLUGPLAY_EVENT_BLOCK, *PPLUGPLAY_EVENT_BLOCK;
443
444 //
445 // Plug and Play Control Classes
446 //
447
448 // Class 0x00
449 typedef struct _PLUGPLAY_CONTROL_ENUMERATE_DEVICE_DATA
450 {
451 UNICODE_STRING DeviceInstance;
452 ULONG Flags;
453 } PLUGPLAY_CONTROL_ENUMERATE_DEVICE_DATA, *PPLUGPLAY_CONTROL_ENUMERATE_DEVICE_DATA;
454
455 //Class 0x09
456 typedef struct _PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA
457 {
458 UNICODE_STRING DeviceInstance;
459 LPGUID FilterGuid;
460 ULONG Flags;
461 PVOID Buffer;
462 ULONG BufferSize;
463 } PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA, *PPLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA;
464
465 //Class 0x0A
466 typedef struct _PLUGPLAY_CONTROL_PROPERTY_DATA
467 {
468 UNICODE_STRING DeviceInstance;
469 ULONG Property;
470 PVOID Buffer;
471 ULONG BufferSize;
472 } PLUGPLAY_CONTROL_PROPERTY_DATA, *PPLUGPLAY_CONTROL_PROPERTY_DATA;
473
474 // Class 0x0C
475 typedef struct _PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
476 {
477 UNICODE_STRING TargetDeviceInstance;
478 ULONG Relation;
479 PWCHAR RelatedDeviceInstance;
480 ULONG RelatedDeviceInstanceLength;
481 } PLUGPLAY_CONTROL_RELATED_DEVICE_DATA, *PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA;
482
483 // Class 0x0E
484 typedef struct _PLUGPLAY_CONTOL_STATUS_DATA
485 {
486 UNICODE_STRING DeviceInstance;
487 ULONG Operation;
488 ULONG DeviceStatus;
489 ULONG DeviceProblem;
490 } PLUGPLAY_CONTROL_STATUS_DATA, *PPLUGPLAY_CONTROL_STATUS_DATA;
491
492 // Class 0x0F
493 typedef struct _PLUGPLAY_CONTROL_DEPTH_DATA
494 {
495 UNICODE_STRING DeviceInstance;
496 ULONG Depth;
497 } PLUGPLAY_CONTROL_DEPTH_DATA, *PPLUGPLAY_CONTROL_DEPTH_DATA;
498
499 // Class 0x10
500 typedef struct _PLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA
501 {
502 UNICODE_STRING DeviceInstance;
503 ULONG Relations;
504 ULONG BufferSize;
505 PWCHAR Buffer;
506 } PLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA, *PPLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA;
507
508 // Class 0x13
509 typedef struct _PLUGPLAY_CONTROL_RETRIEVE_DOCK_DATA
510 {
511 ULONG DeviceInstanceLength;
512 PWSTR DeviceInstance;
513 } PLUGPLAY_CONTROL_RETRIEVE_DOCK_DATA, *PPLUGPLAY_CONTROL_RETRIEVE_DOCK_DATA;
514
515 // Class 0x14
516 typedef struct _PLUGPLAY_CONTROL_RESET_DEVICE_DATA
517 {
518 UNICODE_STRING DeviceInstance;
519 } PLUGPLAY_CONTROL_RESET_DEVICE_DATA, *PPLUGPLAY_CONTROL_RESET_DEVICE_DATA;
520
521 //
522 // Plug and Play Bus Type Definition
523 //
524 typedef struct _PLUGPLAY_BUS_TYPE
525 {
526 PLUGPLAY_BUS_CLASS BusClass;
527 union
528 {
529 INTERFACE_TYPE SystemBusType;
530 PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType;
531 };
532 } PLUGPLAY_BUS_TYPE, *PPLUGPLAY_BUS_TYPE;
533
534 //
535 // Plug and Play Bus Instance Definition
536 //
537 typedef struct _PLUGPLAY_BUS_INSTANCE
538 {
539 PLUGPLAY_BUS_TYPE BusType;
540 ULONG BusNumber;
541 WCHAR BusName[MAX_BUS_NAME];
542 } PLUGPLAY_BUS_INSTANCE, *PPLUGPLAY_BUS_INSTANCE;
543
544 #ifdef NTOS_MODE_USER
545
546 //
547 // Partial Resource Descriptor and List for Hardware
548 //
549 #include <pshpack1.h>
550 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
551 {
552 UCHAR Type;
553 UCHAR ShareDisposition;
554 USHORT Flags;
555 union
556 {
557 struct
558 {
559 PHYSICAL_ADDRESS Start;
560 ULONG Length;
561 } Generic;
562 struct
563 {
564 PHYSICAL_ADDRESS Start;
565 ULONG Length;
566 } Port;
567 struct
568 {
569 ULONG Level;
570 ULONG Vector;
571 KAFFINITY Affinity;
572 } Interrupt;
573 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
574 struct
575 {
576 union
577 {
578 struct
579 {
580 USHORT Reserved;
581 USHORT MessageCount;
582 ULONG Vector;
583 KAFFINITY Affinity;
584 } Raw;
585 struct
586 {
587 ULONG Level;
588 ULONG Vector;
589 KAFFINITY Affinity;
590 } Translated;
591 };
592 } MessageInterrupt;
593 #endif
594 struct
595 {
596 PHYSICAL_ADDRESS Start;
597 ULONG Length;
598 } Memory;
599 struct
600 {
601 ULONG Channel;
602 ULONG Port;
603 ULONG Reserved1;
604 } Dma;
605 struct
606 {
607 ULONG Data[3];
608 } DevicePrivate;
609 struct
610 {
611 ULONG Start;
612 ULONG Length;
613 ULONG Reserved;
614 } BusNumber;
615 struct
616 {
617 ULONG DataSize;
618 ULONG Reserved1;
619 ULONG Reserved2;
620 } DeviceSpecificData;
621 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
622 struct
623 {
624 PHYSICAL_ADDRESS Start;
625 ULONG Length40;
626 } Memory40;
627 struct
628 {
629 PHYSICAL_ADDRESS Start;
630 ULONG Length48;
631 } Memory48;
632 struct
633 {
634 PHYSICAL_ADDRESS Start;
635 ULONG Length64;
636 } Memory64;
637 #endif
638 } u;
639 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
640
641 typedef struct _CM_PARTIAL_RESOURCE_LIST
642 {
643 USHORT Version;
644 USHORT Revision;
645 ULONG Count;
646 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
647 } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
648
649 //
650 // Full Resource Descriptor and List for Hardware
651 //
652 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
653 {
654 INTERFACE_TYPE InterfaceType;
655 ULONG BusNumber;
656 CM_PARTIAL_RESOURCE_LIST PartialResourceList;
657 } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
658
659 typedef struct _CM_RESOURCE_LIST
660 {
661 ULONG Count;
662 CM_FULL_RESOURCE_DESCRIPTOR List[1];
663 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
664
665 //
666 // ROM Block Structure
667 //
668 typedef struct _CM_ROM_BLOCK
669 {
670 ULONG Address;
671 ULONG Size;
672 } CM_ROM_BLOCK, *PCM_ROM_BLOCK;
673
674 //
675 // Disk/INT13 Structures
676 //
677 typedef struct _CM_INT13_DRIVE_PARAMETER
678 {
679 USHORT DriveSelect;
680 ULONG MaxCylinders;
681 USHORT SectorsPerTrack;
682 USHORT MaxHeads;
683 USHORT NumberDrives;
684 } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
685
686 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
687 {
688 ULONG BytesPerSector;
689 ULONG NumberOfCylinders;
690 ULONG SectorsPerTrack;
691 ULONG NumberOfHeads;
692 } CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;
693
694 #include <poppack.h>
695
696 #endif // _!NTOS_MODE_USER
697
698 #endif // _CMTYPES_H
699
700
701