[NDK] Add PLUGPLAY_CONTROL_QUERY_REMOVE_DATA type
[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 0x06
456 typedef struct _PLUGPLAY_CONTROL_QUERY_REMOVE_DATA
457 {
458 UNICODE_STRING DeviceInstance;
459 ULONG Unknown2;
460 PNP_VETO_TYPE VetoType;
461 LPWSTR VetoName;
462 ULONG NameLength;
463 } PLUGPLAY_CONTROL_QUERY_REMOVE_DATA, *PPLUGPLAY_CONTROL_QUERY_REMOVE_DATA;
464
465 // Class 0x07
466 typedef struct _PLUGPLAY_CONTROL_USER_RESPONSE_DATA
467 {
468 ULONG Unknown1;
469 ULONG Unknown2;
470 ULONG Unknown3;
471 ULONG Unknown4;
472 } PLUGPLAY_CONTROL_USER_RESPONSE_DATA, *PPLUGPLAY_CONTROL_USER_RESPONSE_DATA;
473
474 // Class 0x09
475 typedef struct _PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA
476 {
477 UNICODE_STRING DeviceInstance;
478 LPGUID FilterGuid;
479 ULONG Flags;
480 PVOID Buffer;
481 ULONG BufferSize;
482 } PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA, *PPLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA;
483
484 //Class 0x0A
485 typedef struct _PLUGPLAY_CONTROL_PROPERTY_DATA
486 {
487 UNICODE_STRING DeviceInstance;
488 ULONG Property;
489 PVOID Buffer;
490 ULONG BufferSize;
491 } PLUGPLAY_CONTROL_PROPERTY_DATA, *PPLUGPLAY_CONTROL_PROPERTY_DATA;
492
493 // Class 0x0C
494 typedef struct _PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
495 {
496 UNICODE_STRING TargetDeviceInstance;
497 ULONG Relation;
498 PWCHAR RelatedDeviceInstance;
499 ULONG RelatedDeviceInstanceLength;
500 } PLUGPLAY_CONTROL_RELATED_DEVICE_DATA, *PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA;
501
502 // Class 0x0E
503 typedef struct _PLUGPLAY_CONTOL_STATUS_DATA
504 {
505 UNICODE_STRING DeviceInstance;
506 ULONG Operation;
507 ULONG DeviceStatus;
508 ULONG DeviceProblem;
509 } PLUGPLAY_CONTROL_STATUS_DATA, *PPLUGPLAY_CONTROL_STATUS_DATA;
510
511 // Class 0x0F
512 typedef struct _PLUGPLAY_CONTROL_DEPTH_DATA
513 {
514 UNICODE_STRING DeviceInstance;
515 ULONG Depth;
516 } PLUGPLAY_CONTROL_DEPTH_DATA, *PPLUGPLAY_CONTROL_DEPTH_DATA;
517
518 // Class 0x10
519 typedef struct _PLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA
520 {
521 UNICODE_STRING DeviceInstance;
522 ULONG Relations;
523 ULONG BufferSize;
524 PWCHAR Buffer;
525 } PLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA, *PPLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA;
526
527 // Class 0x13
528 typedef struct _PLUGPLAY_CONTROL_RETRIEVE_DOCK_DATA
529 {
530 ULONG DeviceInstanceLength;
531 PWSTR DeviceInstance;
532 } PLUGPLAY_CONTROL_RETRIEVE_DOCK_DATA, *PPLUGPLAY_CONTROL_RETRIEVE_DOCK_DATA;
533
534 // Class 0x14
535 typedef struct _PLUGPLAY_CONTROL_RESET_DEVICE_DATA
536 {
537 UNICODE_STRING DeviceInstance;
538 } PLUGPLAY_CONTROL_RESET_DEVICE_DATA, *PPLUGPLAY_CONTROL_RESET_DEVICE_DATA;
539
540 //
541 // Plug and Play Bus Type Definition
542 //
543 typedef struct _PLUGPLAY_BUS_TYPE
544 {
545 PLUGPLAY_BUS_CLASS BusClass;
546 union
547 {
548 INTERFACE_TYPE SystemBusType;
549 PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType;
550 };
551 } PLUGPLAY_BUS_TYPE, *PPLUGPLAY_BUS_TYPE;
552
553 //
554 // Plug and Play Bus Instance Definition
555 //
556 typedef struct _PLUGPLAY_BUS_INSTANCE
557 {
558 PLUGPLAY_BUS_TYPE BusType;
559 ULONG BusNumber;
560 WCHAR BusName[MAX_BUS_NAME];
561 } PLUGPLAY_BUS_INSTANCE, *PPLUGPLAY_BUS_INSTANCE;
562
563 #ifdef NTOS_MODE_USER
564
565 //
566 // Partial Resource Descriptor and List for Hardware
567 //
568 #include <pshpack1.h>
569 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
570 {
571 UCHAR Type;
572 UCHAR ShareDisposition;
573 USHORT Flags;
574 union
575 {
576 struct
577 {
578 PHYSICAL_ADDRESS Start;
579 ULONG Length;
580 } Generic;
581 struct
582 {
583 PHYSICAL_ADDRESS Start;
584 ULONG Length;
585 } Port;
586 struct
587 {
588 ULONG Level;
589 ULONG Vector;
590 KAFFINITY Affinity;
591 } Interrupt;
592 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
593 struct
594 {
595 union
596 {
597 struct
598 {
599 USHORT Reserved;
600 USHORT MessageCount;
601 ULONG Vector;
602 KAFFINITY Affinity;
603 } Raw;
604 struct
605 {
606 ULONG Level;
607 ULONG Vector;
608 KAFFINITY Affinity;
609 } Translated;
610 };
611 } MessageInterrupt;
612 #endif
613 struct
614 {
615 PHYSICAL_ADDRESS Start;
616 ULONG Length;
617 } Memory;
618 struct
619 {
620 ULONG Channel;
621 ULONG Port;
622 ULONG Reserved1;
623 } Dma;
624 struct
625 {
626 ULONG Data[3];
627 } DevicePrivate;
628 struct
629 {
630 ULONG Start;
631 ULONG Length;
632 ULONG Reserved;
633 } BusNumber;
634 struct
635 {
636 ULONG DataSize;
637 ULONG Reserved1;
638 ULONG Reserved2;
639 } DeviceSpecificData;
640 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
641 struct
642 {
643 PHYSICAL_ADDRESS Start;
644 ULONG Length40;
645 } Memory40;
646 struct
647 {
648 PHYSICAL_ADDRESS Start;
649 ULONG Length48;
650 } Memory48;
651 struct
652 {
653 PHYSICAL_ADDRESS Start;
654 ULONG Length64;
655 } Memory64;
656 #endif
657 } u;
658 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
659
660 typedef struct _CM_PARTIAL_RESOURCE_LIST
661 {
662 USHORT Version;
663 USHORT Revision;
664 ULONG Count;
665 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
666 } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
667
668 //
669 // Full Resource Descriptor and List for Hardware
670 //
671 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
672 {
673 INTERFACE_TYPE InterfaceType;
674 ULONG BusNumber;
675 CM_PARTIAL_RESOURCE_LIST PartialResourceList;
676 } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
677
678 typedef struct _CM_RESOURCE_LIST
679 {
680 ULONG Count;
681 CM_FULL_RESOURCE_DESCRIPTOR List[1];
682 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
683
684 //
685 // ROM Block Structure
686 //
687 typedef struct _CM_ROM_BLOCK
688 {
689 ULONG Address;
690 ULONG Size;
691 } CM_ROM_BLOCK, *PCM_ROM_BLOCK;
692
693 //
694 // Disk/INT13 Structures
695 //
696 typedef struct _CM_INT13_DRIVE_PARAMETER
697 {
698 USHORT DriveSelect;
699 ULONG MaxCylinders;
700 USHORT SectorsPerTrack;
701 USHORT MaxHeads;
702 USHORT NumberDrives;
703 } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
704
705 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
706 {
707 ULONG BytesPerSector;
708 ULONG NumberOfCylinders;
709 ULONG SectorsPerTrack;
710 ULONG NumberOfHeads;
711 } CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;
712
713 #include <poppack.h>
714
715 #endif // _!NTOS_MODE_USER
716
717 #endif // _CMTYPES_H
718
719
720