Reactos
1/*++ NDK Version: 0098
2
3Copyright (c) Alex Ionescu. All rights reserved.
4
5Header Name:
6
7 cmtypes.h
8
9Abstract:
10
11 Type definitions for the Configuration Manager.
12
13Author:
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//
95typedef 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#define CM_RESOURCE_INTERRUPT_ALLOW_RESERVED_IDT 0x0008
148#define CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT 0x0010
149#define CM_RESOURCE_INTERRUPT_WAKE_HINT 0x0020
150
151#define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001
152
153#define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2)
154
155//
156// NtInitializeRegistry Flags
157//
158#define CM_BOOT_FLAG_SMSS 0x0000
159#define CM_BOOT_FLAG_SETUP 0x0001
160#define CM_BOOT_FLAG_ACCEPTED 0x0002
161#define CM_BOOT_FLAG_MAX (CM_BOOT_FLAG_ACCEPTED + 999)
162
163#ifdef NTOS_MODE_USER
164
165//
166// Information Classes for NtQueryKey
167//
168typedef enum _KEY_INFORMATION_CLASS
169{
170 KeyBasicInformation,
171 KeyNodeInformation,
172 KeyFullInformation,
173 KeyNameInformation,
174 KeyCachedInformation,
175 KeyFlagsInformation,
176 KeyVirtualizationInformation,
177 KeyHandleTagsInformation,
178 MaxKeyInfoClass
179} KEY_INFORMATION_CLASS;
180
181typedef enum _KEY_VALUE_INFORMATION_CLASS
182{
183 KeyValueBasicInformation,
184 KeyValueFullInformation,
185 KeyValuePartialInformation,
186 KeyValueFullInformationAlign64,
187 KeyValuePartialInformationAlign64,
188 MaxKeyValueInfoClass
189} KEY_VALUE_INFORMATION_CLASS;
190
191typedef enum _KEY_SET_INFORMATION_CLASS
192{
193 KeyWriteTimeInformation,
194 KeyWow64FlagsInformation,
195 KeyControlFlagsInformation,
196 KeySetVirtualizationInformation,
197 KeySetDebugInformation,
198 KeySetHandleTagsInformation,
199 MaxKeySetInfoClass
200} KEY_SET_INFORMATION_CLASS;
201
202#endif
203
204//
205// Plag and Play Classes
206//
207typedef enum _PLUGPLAY_CONTROL_CLASS
208{
209 PlugPlayControlEnumerateDevice,
210 PlugPlayControlRegisterNewDevice,
211 PlugPlayControlDeregisterDevice,
212 PlugPlayControlInitializeDevice,
213 PlugPlayControlStartDevice,
214 PlugPlayControlUnlockDevice,
215 PlugPlayControlQueryAndRemoveDevice,
216 PlugPlayControlUserResponse,
217 PlugPlayControlGenerateLegacyDevice,
218 PlugPlayControlGetInterfaceDeviceList,
219 PlugPlayControlProperty,
220 PlugPlayControlDeviceClassAssociation,
221 PlugPlayControlGetRelatedDevice,
222 PlugPlayControlGetInterfaceDeviceAlias,
223 PlugPlayControlDeviceStatus,
224 PlugPlayControlGetDeviceDepth,
225 PlugPlayControlQueryDeviceRelations,
226 PlugPlayControlTargetDeviceRelation,
227 PlugPlayControlQueryConflictList,
228 PlugPlayControlRetrieveDock,
229 PlugPlayControlResetDevice,
230 PlugPlayControlHaltDevice,
231 PlugPlayControlGetBlockedDriverList,
232 MaxPlugPlayControl
233} PLUGPLAY_CONTROL_CLASS;
234
235typedef enum _PLUGPLAY_BUS_CLASS
236{
237 SystemBus,
238 PlugPlayVirtualBus,
239 MaxPlugPlayBusClass
240} PLUGPLAY_BUS_CLASS, *PPLUGPLAY_BUS_CLASS;
241
242//
243// Plag and Play Bus Types
244//
245typedef enum _PLUGPLAY_VIRTUAL_BUS_TYPE
246{
247 Root,
248 MaxPlugPlayVirtualBusType
249} PLUGPLAY_VIRTUAL_BUS_TYPE, *PPLUGPLAY_VIRTUAL_BUS_TYPE;
250
251//
252// Plag and Play Event Categories
253//
254typedef enum _PLUGPLAY_EVENT_CATEGORY
255{
256 HardwareProfileChangeEvent,
257 TargetDeviceChangeEvent,
258 DeviceClassChangeEvent,
259 CustomDeviceEvent,
260 DeviceInstallEvent,
261 DeviceArrivalEvent,
262 PowerEvent,
263 VetoEvent,
264 BlockedDriverEvent,
265 MaxPlugEventCategory
266} PLUGPLAY_EVENT_CATEGORY;
267
268#ifdef NTOS_MODE_USER
269
270//
271// Information Structures for NtQueryKeyInformation
272//
273typedef struct _KEY_WRITE_TIME_INFORMATION
274{
275 LARGE_INTEGER LastWriteTime;
276} KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
277
278typedef struct _KEY_WOW64_FLAGS_INFORMATION
279{
280 ULONG UserFlags;
281} KEY_WOW64_FLAGS_INFORMATION, *PKEY_WOW64_FLAGS_INFORMATION;
282
283typedef struct _KEY_USER_FLAGS_INFORMATION
284{
285 ULONG UserFlags;
286} KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION;
287
288typedef struct _KEY_HANDLE_TAGS_INFORMATION
289{
290 ULONG HandleTags;
291} KEY_HANDLE_TAGS_INFORMATION, *PKEY_HANDLE_TAGS_INFORMATION;
292
293typedef struct _KEY_CONTROL_FLAGS_INFORMATION
294{
295 ULONG ControlFlags;
296} KEY_CONTROL_FLAGS_INFORMATION, *PKEY_CONTROL_FLAGS_INFORMATION;
297
298typedef struct _KEY_VIRTUALIZATION_INFORMATION
299{
300 ULONG VirtualizationCandidate:1;
301 ULONG VirtualizationEnabled:1;
302 ULONG VirtualTarget:1;
303 ULONG VirtualStore:1;
304 ULONG VirtualSource:1;
305 ULONG Reserved:27;
306} KEY_VIRTUALIZATION_INFORMATION, *PKEY_VIRTUALIZATION_INFORMATION;
307
308typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION
309{
310 ULONG VirtualTarget:1;
311 ULONG VirtualStore:1;
312 ULONG VirtualSource:1;
313 ULONG Reserved:29;
314} KEY_SET_VIRTUALIZATION_INFORMATION, *PKEY_SET_VIRTUALIZATION_INFORMATION;
315
316
317typedef struct _KEY_FULL_INFORMATION
318{
319 LARGE_INTEGER LastWriteTime;
320 ULONG TitleIndex;
321 ULONG ClassOffset;
322 ULONG ClassLength;
323 ULONG SubKeys;
324 ULONG MaxNameLen;
325 ULONG MaxClassLen;
326 ULONG Values;
327 ULONG MaxValueNameLen;
328 ULONG MaxValueDataLen;
329 WCHAR Class[1];
330} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
331
332typedef struct _KEY_NAME_INFORMATION
333{
334 ULONG NameLength;
335 WCHAR Name[1];
336} KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION;
337
338
339typedef struct _KEY_NODE_INFORMATION
340{
341 LARGE_INTEGER LastWriteTime;
342 ULONG TitleIndex;
343 ULONG ClassOffset;
344 ULONG ClassLength;
345 ULONG NameLength;
346 WCHAR Name[1];
347} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
348
349typedef struct _KEY_VALUE_ENTRY
350{
351 PUNICODE_STRING ValueName;
352 ULONG DataLength;
353 ULONG DataOffset;
354 ULONG Type;
355} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
356
357typedef struct _KEY_VALUE_PARTIAL_INFORMATION
358{
359 ULONG TitleIndex;
360 ULONG Type;
361 ULONG DataLength;
362 UCHAR Data[1];
363} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
364
365typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
366{
367 ULONG Type;
368 ULONG DataLength;
369 UCHAR Data[1];
370} KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64;
371
372typedef struct _KEY_VALUE_BASIC_INFORMATION
373{
374 ULONG TitleIndex;
375 ULONG Type;
376 ULONG NameLength;
377 WCHAR Name[1];
378} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
379
380typedef struct _KEY_VALUE_FULL_INFORMATION
381{
382 ULONG TitleIndex;
383 ULONG Type;
384 ULONG DataOffset;
385 ULONG DataLength;
386 ULONG NameLength;
387 WCHAR Name[1];
388} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
389
390typedef struct _KEY_BASIC_INFORMATION
391{
392 LARGE_INTEGER LastWriteTime;
393 ULONG TitleIndex;
394 ULONG NameLength;
395 WCHAR Name[1];
396} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
397
398#endif
399
400//
401// Plug and Play Event Block
402//
403typedef struct _PLUGPLAY_EVENT_BLOCK
404{
405 GUID EventGuid;
406 PLUGPLAY_EVENT_CATEGORY EventCategory;
407 PULONG Result;
408 ULONG Flags;
409 ULONG TotalSize;
410 PVOID DeviceObject;
411 union
412 {
413 struct
414 {
415 GUID ClassGuid;
416 WCHAR SymbolicLinkName[ANYSIZE_ARRAY];
417 } DeviceClass;
418 struct
419 {
420 WCHAR DeviceIds[ANYSIZE_ARRAY];
421 } TargetDevice;
422 struct
423 {
424 WCHAR DeviceId[ANYSIZE_ARRAY];
425 } InstallDevice;
426 struct
427 {
428 PVOID NotificationStructure;
429 WCHAR DeviceIds[ANYSIZE_ARRAY];
430 } CustomNotification;
431 struct
432 {
433 PVOID Notification;
434 } ProfileNotification;
435 struct
436 {
437 ULONG NotificationCode;
438 ULONG NotificationData;
439 } PowerNotification;
440 struct
441 {
442 PNP_VETO_TYPE VetoType;
443 WCHAR DeviceIdVetoNameBuffer[ANYSIZE_ARRAY];
444 } VetoNotification;
445 struct
446 {
447 GUID BlockedDriverGuid;
448 } BlockedDriverNotification;
449 };
450} PLUGPLAY_EVENT_BLOCK, *PPLUGPLAY_EVENT_BLOCK;
451
452//
453// Plug and Play Control Classes
454//
455
456// PlugPlayControlEnumerateDevice (0x00)
457typedef struct _PLUGPLAY_CONTROL_ENUMERATE_DEVICE_DATA
458{
459 UNICODE_STRING DeviceInstance;
460 ULONG Flags;
461} PLUGPLAY_CONTROL_ENUMERATE_DEVICE_DATA, *PPLUGPLAY_CONTROL_ENUMERATE_DEVICE_DATA;
462
463// PlugPlayControlRegisterNewDevice (0x1)
464// PlugPlayControlDeregisterDevice (0x2)
465// PlugPlayControlInitializeDevice (0x3)
466// PlugPlayControlStartDevice (0x4)
467// PlugPlayControlUnlockDevice (0x5)
468// PlugPlayControlResetDevice (0x14)
469// PlugPlayControlHaltDevice (0x15)
470typedef struct _PLUGPLAY_CONTROL_DEVICE_CONTROL_DATA
471{
472 UNICODE_STRING DeviceInstance;
473} PLUGPLAY_CONTROL_DEVICE_CONTROL_DATA, *PPLUGPLAY_CONTROL_DEVICE_CONTROL_DATA;
474
475// PlugPlayControlQueryAndRemoveDevice (0x06)
476typedef struct _PLUGPLAY_CONTROL_QUERY_REMOVE_DATA
477{
478 UNICODE_STRING DeviceInstance;
479 ULONG Flags;
480 PNP_VETO_TYPE VetoType;
481 LPWSTR VetoName;
482 ULONG NameLength;
483} PLUGPLAY_CONTROL_QUERY_REMOVE_DATA, *PPLUGPLAY_CONTROL_QUERY_REMOVE_DATA;
484
485// PlugPlayControlUserResponse (0x07)
486typedef struct _PLUGPLAY_CONTROL_USER_RESPONSE_DATA
487{
488 ULONG Unknown1;
489 ULONG Unknown2;
490 ULONG Unknown3;
491 ULONG Unknown4;
492} PLUGPLAY_CONTROL_USER_RESPONSE_DATA, *PPLUGPLAY_CONTROL_USER_RESPONSE_DATA;
493
494// PlugPlayControlGetInterfaceDeviceList (0x09)
495typedef struct _PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA
496{
497 UNICODE_STRING DeviceInstance;
498 LPGUID FilterGuid;
499 ULONG Flags;
500 PVOID Buffer;
501 ULONG BufferSize;
502} PLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA, *PPLUGPLAY_CONTROL_INTERFACE_DEVICE_LIST_DATA;
503
504// PlugPlayControlProperty (0x0A)
505typedef struct _PLUGPLAY_CONTROL_PROPERTY_DATA
506{
507 UNICODE_STRING DeviceInstance;
508 ULONG Property;
509 PVOID Buffer;
510 ULONG BufferSize;
511} PLUGPLAY_CONTROL_PROPERTY_DATA, *PPLUGPLAY_CONTROL_PROPERTY_DATA;
512
513// PlugPlayControlDeviceClassAssociation (0x0B)
514typedef struct _PLUGPLAY_CONTROL_CLASS_ASSOCIATION_DATA
515{
516 UNICODE_STRING DeviceInstance;
517 GUID *InterfaceGuid;
518 UNICODE_STRING Reference;
519 BOOLEAN Register;
520 PWCHAR SymbolicLinkName;
521 ULONG SymbolicLinkNameLength;
522} PLUGPLAY_CONTROL_CLASS_ASSOCIATION_DATA, *PPLUGPLAY_CONTROL_CLASS_ASSOCIATION_DATA;
523
524// PlugPlayControlGetRelatedDevice (0x0C)
525typedef struct _PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
526{
527 UNICODE_STRING TargetDeviceInstance;
528 ULONG Relation;
529 PWCHAR RelatedDeviceInstance;
530 ULONG RelatedDeviceInstanceLength;
531} PLUGPLAY_CONTROL_RELATED_DEVICE_DATA, *PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA;
532
533// PlugPlayControlGetInterfaceDeviceAlias (0x0D)
534typedef struct _PLUGPLAY_CONTROL_INTERFACE_ALIAS_DATA
535{
536 UNICODE_STRING SymbolicLinkName;
537 GUID *AliasInterfaceClassGuid;
538 PWCHAR AliasSymbolicLinkName;
539 ULONG AliasSymbolicLinkNameLength;
540} PLUGPLAY_CONTROL_INTERFACE_ALIAS_DATA, *PPLUGPLAY_CONTROL_INTERFACE_ALIAS_DATA;
541
542// PlugPlayControlDeviceStatus (0x0E)
543typedef struct _PLUGPLAY_CONTOL_STATUS_DATA
544{
545 UNICODE_STRING DeviceInstance;
546 ULONG Operation;
547 ULONG DeviceStatus;
548 ULONG DeviceProblem;
549} PLUGPLAY_CONTROL_STATUS_DATA, *PPLUGPLAY_CONTROL_STATUS_DATA;
550
551// PlugPlayControlGetDeviceDepth (0x0F)
552typedef struct _PLUGPLAY_CONTROL_DEPTH_DATA
553{
554 UNICODE_STRING DeviceInstance;
555 ULONG Depth;
556} PLUGPLAY_CONTROL_DEPTH_DATA, *PPLUGPLAY_CONTROL_DEPTH_DATA;
557
558// PlugPlayControlQueryDeviceRelations (0x10)
559typedef struct _PLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA
560{
561 UNICODE_STRING DeviceInstance;
562 ULONG Relations;
563 ULONG BufferSize;
564 PWCHAR Buffer;
565} PLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA, *PPLUGPLAY_CONTROL_DEVICE_RELATIONS_DATA;
566
567// PlugPlayControlRetrieveDock (0x13)
568typedef struct _PLUGPLAY_CONTROL_RETRIEVE_DOCK_DATA
569{
570 ULONG DeviceInstanceLength;
571 PWSTR DeviceInstance;
572} PLUGPLAY_CONTROL_RETRIEVE_DOCK_DATA, *PPLUGPLAY_CONTROL_RETRIEVE_DOCK_DATA;
573
574//
575// Plug and Play Bus Type Definition
576//
577typedef struct _PLUGPLAY_BUS_TYPE
578{
579 PLUGPLAY_BUS_CLASS BusClass;
580 union
581 {
582 INTERFACE_TYPE SystemBusType;
583 PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType;
584 };
585} PLUGPLAY_BUS_TYPE, *PPLUGPLAY_BUS_TYPE;
586
587//
588// Plug and Play Bus Instance Definition
589//
590typedef struct _PLUGPLAY_BUS_INSTANCE
591{
592 PLUGPLAY_BUS_TYPE BusType;
593 ULONG BusNumber;
594 WCHAR BusName[MAX_BUS_NAME];
595} PLUGPLAY_BUS_INSTANCE, *PPLUGPLAY_BUS_INSTANCE;
596
597#ifdef NTOS_MODE_USER
598
599//
600// Partial Resource Descriptor and List for Hardware
601//
602#include <pshpack1.h>
603typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
604{
605 UCHAR Type;
606 UCHAR ShareDisposition;
607 USHORT Flags;
608 union
609 {
610 struct
611 {
612 PHYSICAL_ADDRESS Start;
613 ULONG Length;
614 } Generic;
615 struct
616 {
617 PHYSICAL_ADDRESS Start;
618 ULONG Length;
619 } Port;
620 struct
621 {
622 ULONG Level;
623 ULONG Vector;
624 KAFFINITY Affinity;
625 } Interrupt;
626#if (NTDDI_VERSION >= NTDDI_LONGHORN)
627 struct
628 {
629 union
630 {
631 struct
632 {
633 USHORT Reserved;
634 USHORT MessageCount;
635 ULONG Vector;
636 KAFFINITY Affinity;
637 } Raw;
638 struct
639 {
640 ULONG Level;
641 ULONG Vector;
642 KAFFINITY Affinity;
643 } Translated;
644 };
645 } MessageInterrupt;
646#endif
647 struct
648 {
649 PHYSICAL_ADDRESS Start;
650 ULONG Length;
651 } Memory;
652 struct
653 {
654 ULONG Channel;
655 ULONG Port;
656 ULONG Reserved1;
657 } Dma;
658 struct
659 {
660 ULONG Data[3];
661 } DevicePrivate;
662 struct
663 {
664 ULONG Start;
665 ULONG Length;
666 ULONG Reserved;
667 } BusNumber;
668 struct
669 {
670 ULONG DataSize;
671 ULONG Reserved1;
672 ULONG Reserved2;
673 } DeviceSpecificData;
674#if (NTDDI_VERSION >= NTDDI_LONGHORN)
675 struct
676 {
677 PHYSICAL_ADDRESS Start;
678 ULONG Length40;
679 } Memory40;
680 struct
681 {
682 PHYSICAL_ADDRESS Start;
683 ULONG Length48;
684 } Memory48;
685 struct
686 {
687 PHYSICAL_ADDRESS Start;
688 ULONG Length64;
689 } Memory64;
690#endif
691 } u;
692} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
693
694typedef struct _CM_PARTIAL_RESOURCE_LIST
695{
696 USHORT Version;
697 USHORT Revision;
698 ULONG Count;
699 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
700} CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
701
702//
703// Full Resource Descriptor and List for Hardware
704//
705typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
706{
707 INTERFACE_TYPE InterfaceType;
708 ULONG BusNumber;
709 CM_PARTIAL_RESOURCE_LIST PartialResourceList;
710} CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
711
712typedef struct _CM_RESOURCE_LIST
713{
714 ULONG Count;
715 CM_FULL_RESOURCE_DESCRIPTOR List[1];
716} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
717
718//
719// ROM Block Structure
720//
721typedef struct _CM_ROM_BLOCK
722{
723 ULONG Address;
724 ULONG Size;
725} CM_ROM_BLOCK, *PCM_ROM_BLOCK;
726
727//
728// Disk/INT13 Structures
729//
730typedef struct _CM_INT13_DRIVE_PARAMETER
731{
732 USHORT DriveSelect;
733 ULONG MaxCylinders;
734 USHORT SectorsPerTrack;
735 USHORT MaxHeads;
736 USHORT NumberDrives;
737} CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
738
739typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
740{
741 ULONG BytesPerSector;
742 ULONG NumberOfCylinders;
743 ULONG SectorsPerTrack;
744 ULONG NumberOfHeads;
745} CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;
746
747#include <poppack.h>
748
749#endif // _!NTOS_MODE_USER
750
751#endif // _CMTYPES_H
752
753
754