xref: /reactos/sdk/include/ndk/cmtypes.h (revision 45fd48bd)
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 
702