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