1 #ifndef INTERFACES_H__ 2 #define INTERFACES_H__ 3 4 DEFINE_GUID(IID_IIrpTarget, 0xB4C90A60, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, 0xA0, 0xC9, 0x11, 0xB5, 0x44); 5 DEFINE_GUID(IID_ISubdevice, 0xB4C90A61, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, 0xA0, 0xC9, 0x11, 0xB5, 0x44); 6 DEFINE_GUID(IID_IIrpTargetFactory, 0xB4C90A62, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, 0xA0, 0xC9, 0x11, 0xB5, 0x44); 7 8 9 /***************************************************************************** 10 * IIrpTarget 11 ***************************************************************************** 12 */ 13 14 #define IMP_IIrpTarget \ 15 STDMETHODIMP_(NTSTATUS) NewIrpTarget(THIS_ \ 16 OUT struct IIrpTarget **OutTarget, \ 17 IN PCWSTR Name, \ 18 IN PUNKNOWN Unknown, \ 19 IN POOL_TYPE PoolType, \ 20 IN PDEVICE_OBJECT DeviceObject, \ 21 IN PIRP Irp, \ 22 IN KSOBJECT_CREATE *CreateObject); \ 23 \ 24 STDMETHODIMP_(NTSTATUS) DeviceIoControl(THIS_ \ 25 IN PDEVICE_OBJECT DeviceObject, \ 26 IN PIRP Irp); \ 27 \ 28 STDMETHODIMP_(NTSTATUS) Read(THIS_ \ 29 IN PDEVICE_OBJECT DeviceObject, \ 30 IN PIRP Irp); \ 31 \ 32 STDMETHODIMP_(NTSTATUS) Write(THIS_ \ 33 IN PDEVICE_OBJECT DeviceObject, \ 34 IN PIRP Irp); \ 35 \ 36 STDMETHODIMP_(NTSTATUS) Flush(THIS_ \ 37 IN PDEVICE_OBJECT DeviceObject, \ 38 IN PIRP Irp); \ 39 \ 40 STDMETHODIMP_(NTSTATUS) Close(THIS_ \ 41 IN PDEVICE_OBJECT DeviceObject, \ 42 IN PIRP Irp); \ 43 \ 44 STDMETHODIMP_(NTSTATUS) QuerySecurity(THIS_ \ 45 IN PDEVICE_OBJECT DeviceObject, \ 46 IN PIRP Irp); \ 47 \ 48 STDMETHODIMP_(NTSTATUS) SetSecurity(THIS_ \ 49 IN PDEVICE_OBJECT DeviceObject, \ 50 IN PIRP Irp); \ 51 \ 52 STDMETHODIMP_(BOOLEAN) FastDeviceIoControl(THIS_ \ 53 IN PFILE_OBJECT FileObject, \ 54 IN BOOLEAN Wait, \ 55 IN PVOID InputBuffer, \ 56 IN ULONG InputBufferLength, \ 57 OUT PVOID OutputBuffer, \ 58 IN ULONG OutputBufferLength, \ 59 IN ULONG IoControlCode, \ 60 OUT PIO_STATUS_BLOCK StatusBlock, \ 61 IN PDEVICE_OBJECT DeviceObject); \ 62 \ 63 STDMETHODIMP_(BOOLEAN) FastRead(THIS_ \ 64 IN PFILE_OBJECT FileObject, \ 65 IN PLARGE_INTEGER FileOffset, \ 66 IN ULONG Length, \ 67 IN BOOLEAN Wait, \ 68 IN ULONG LockKey, \ 69 IN PVOID Buffer, \ 70 OUT PIO_STATUS_BLOCK StatusBlock, \ 71 IN PDEVICE_OBJECT DeviceObject); \ 72 \ 73 STDMETHODIMP_(BOOLEAN) FastWrite(THIS_ \ 74 IN PFILE_OBJECT FileObject, \ 75 IN PLARGE_INTEGER FileOffset, \ 76 IN ULONG Length, \ 77 IN BOOLEAN Wait, \ 78 IN ULONG LockKey, \ 79 IN PVOID Buffer, \ 80 OUT PIO_STATUS_BLOCK StatusBlock, \ 81 IN PDEVICE_OBJECT DeviceObject) 82 83 #define DEFINE_ABSTRACT_IRPTARGET() \ 84 STDMETHOD_(NTSTATUS, NewIrpTarget)(THIS_ \ 85 OUT struct IIrpTarget **OutTarget, \ 86 IN PCWSTR Name, \ 87 IN PUNKNOWN Unknown, \ 88 IN POOL_TYPE PoolType, \ 89 IN PDEVICE_OBJECT DeviceObject, \ 90 IN PIRP Irp, \ 91 IN KSOBJECT_CREATE *CreateObject) PURE; \ 92 \ 93 STDMETHOD_(NTSTATUS, DeviceIoControl)(THIS_ \ 94 IN PDEVICE_OBJECT DeviceObject, \ 95 IN PIRP Irp)PURE; \ 96 \ 97 STDMETHOD_(NTSTATUS, Read)(THIS_ \ 98 IN PDEVICE_OBJECT DeviceObject, \ 99 IN PIRP Irp)PURE; \ 100 \ 101 STDMETHOD_(NTSTATUS, Write)(THIS_ \ 102 IN PDEVICE_OBJECT DeviceObject, \ 103 IN PIRP Irp)PURE; \ 104 \ 105 STDMETHOD_(NTSTATUS, Flush)(THIS_ \ 106 IN PDEVICE_OBJECT DeviceObject, \ 107 IN PIRP Irp)PURE; \ 108 \ 109 STDMETHOD_(NTSTATUS, Close)( \ 110 IN PDEVICE_OBJECT DeviceObject, \ 111 IN PIRP Irp)PURE; \ 112 \ 113 STDMETHOD_(NTSTATUS, QuerySecurity)(THIS_ \ 114 IN PDEVICE_OBJECT DeviceObject, \ 115 IN PIRP Irp)PURE; \ 116 \ 117 STDMETHOD_(NTSTATUS, SetSecurity)(THIS_ \ 118 IN PDEVICE_OBJECT DeviceObject, \ 119 IN PIRP Irp)PURE; \ 120 \ 121 STDMETHOD_(BOOLEAN, FastDeviceIoControl)(THIS_ \ 122 IN PFILE_OBJECT FileObject, \ 123 IN BOOLEAN Wait, \ 124 IN PVOID InputBuffer, \ 125 IN ULONG InputBufferLength, \ 126 OUT PVOID OutputBuffer, \ 127 IN ULONG OutputBufferLength, \ 128 IN ULONG IoControlCode, \ 129 OUT PIO_STATUS_BLOCK StatusBlock, \ 130 IN PDEVICE_OBJECT DeviceObject)PURE; \ 131 \ 132 STDMETHOD_(BOOLEAN, FastRead)(THIS_ \ 133 IN PFILE_OBJECT FileObject, \ 134 IN PLARGE_INTEGER FileOffset, \ 135 IN ULONG Length, \ 136 IN BOOLEAN Wait, \ 137 IN ULONG LockKey, \ 138 IN PVOID Buffer, \ 139 OUT PIO_STATUS_BLOCK StatusBlock, \ 140 IN PDEVICE_OBJECT DeviceObject)PURE; \ 141 \ 142 STDMETHOD_(BOOLEAN, FastWrite)(THIS_ \ 143 IN PFILE_OBJECT FileObject, \ 144 IN PLARGE_INTEGER FileOffset, \ 145 IN ULONG Length, \ 146 IN BOOLEAN Wait, \ 147 IN ULONG LockKey, \ 148 IN PVOID Buffer, \ 149 OUT PIO_STATUS_BLOCK StatusBlock, \ 150 IN PDEVICE_OBJECT DeviceObject)PURE; 151 152 153 154 #undef INTERFACE 155 #define INTERFACE IIrpTarget 156 157 DECLARE_INTERFACE_(IIrpTarget, IUnknown) 158 { 159 DEFINE_ABSTRACT_UNKNOWN() 160 161 DEFINE_ABSTRACT_IRPTARGET() 162 }; 163 164 typedef IIrpTarget *PIRPTARGET; 165 166 /***************************************************************************** 167 * ISubdevice 168 ***************************************************************************** 169 */ 170 171 struct IIrpTargetFactory; 172 173 typedef struct 174 { 175 LIST_ENTRY Entry; 176 UNICODE_STRING SymbolicLink; 177 }SYMBOLICLINK_ENTRY, *PSYMBOLICLINK_ENTRY; 178 179 typedef struct 180 { 181 LIST_ENTRY Entry; 182 ULONG FromPin; 183 KSPIN_PHYSICALCONNECTION Connection; 184 }PHYSICAL_CONNECTION_ENTRY, *PPHYSICAL_CONNECTION_ENTRY; 185 186 typedef struct 187 { 188 ULONG MaxGlobalInstanceCount; 189 ULONG MaxFilterInstanceCount; 190 ULONG MinFilterInstanceCount; 191 ULONG CurrentPinInstanceCount; 192 193 }PIN_INSTANCE_INFO, *PPIN_INSTANCE_INFO; 194 195 196 typedef struct 197 { 198 ULONG PinDescriptorCount; 199 ULONG PinDescriptorSize; 200 KSPIN_DESCRIPTOR * KsPinDescriptor; 201 PIN_INSTANCE_INFO * Instances; 202 }KSPIN_FACTORY; 203 204 typedef struct 205 { 206 ULONG InterfaceCount; 207 GUID *Interfaces; 208 KSPIN_FACTORY Factory; 209 ULONG FilterPropertySetCount; 210 PKSPROPERTY_SET FilterPropertySet; 211 212 ULONG EventSetCount; 213 PKSEVENT_SET EventSet; 214 PLIST_ENTRY EventList; 215 PKSPIN_LOCK EventListLock; 216 217 PPCFILTER_DESCRIPTOR DeviceDescriptor; 218 KSTOPOLOGY* Topology; 219 LIST_ENTRY SymbolicLinkList; 220 LIST_ENTRY PhysicalConnectionList; 221 UNICODE_STRING RefString; 222 PUNKNOWN UnknownMiniport; 223 PUNKNOWN UnknownStream; 224 PVOID PortPin; 225 }SUBDEVICE_DESCRIPTOR, *PSUBDEVICE_DESCRIPTOR; 226 227 #undef INTERFACE 228 #define INTERFACE ISubdevice 229 230 #define DEFINE_ABSTRACT_ISUBDEVICE() \ 231 STDMETHOD_(NTSTATUS, NewIrpTarget)(THIS_ \ 232 OUT IIrpTarget **OutTarget, \ 233 IN PCWSTR Name, \ 234 IN PUNKNOWN Unknown, \ 235 IN POOL_TYPE PoolType, \ 236 IN PDEVICE_OBJECT DeviceObject, \ 237 IN PIRP Irp, \ 238 IN KSOBJECT_CREATE *CreateObject) PURE; \ 239 \ 240 STDMETHOD_(NTSTATUS, ReleaseChildren)(THIS) PURE; \ 241 \ 242 STDMETHOD_(NTSTATUS, GetDescriptor)(THIS_ \ 243 IN SUBDEVICE_DESCRIPTOR **) PURE; \ 244 \ 245 STDMETHOD_(NTSTATUS, DataRangeIntersection)(THIS_ \ 246 IN ULONG PinId, \ 247 IN PKSDATARANGE DataRange, \ 248 IN PKSDATARANGE MatchingDataRange, \ 249 IN ULONG OutputBufferLength, \ 250 OUT PVOID ResultantFormat OPTIONAL, \ 251 OUT PULONG ResultantFormatLength) PURE; \ 252 \ 253 STDMETHOD_(NTSTATUS, PowerChangeNotify)(THIS_ \ 254 IN POWER_STATE PowerState) PURE; \ 255 \ 256 STDMETHOD_(NTSTATUS, PinCount)(THIS_ \ 257 IN ULONG PinId, \ 258 IN OUT PULONG FilterNecessary, \ 259 IN OUT PULONG FilterCurrent, \ 260 IN OUT PULONG FilterPossible, \ 261 IN OUT PULONG GlobalCurrent, \ 262 IN OUT PULONG GlobalPossible)PURE; 263 264 265 266 #define IMP_ISubdevice \ 267 STDMETHODIMP_(NTSTATUS) NewIrpTarget( \ 268 OUT IIrpTarget **OutTarget, \ 269 IN PCWSTR Name, \ 270 IN PUNKNOWN Unknown, \ 271 IN POOL_TYPE PoolType, \ 272 IN PDEVICE_OBJECT DeviceObject, \ 273 IN PIRP Irp, \ 274 IN KSOBJECT_CREATE *CreateObject); \ 275 \ 276 STDMETHODIMP_(NTSTATUS) ReleaseChildren(THIS); \ 277 \ 278 STDMETHODIMP_(NTSTATUS) GetDescriptor(THIS_ \ 279 IN SUBDEVICE_DESCRIPTOR **); \ 280 \ 281 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \ 282 IN ULONG PinId, \ 283 IN PKSDATARANGE DataRange, \ 284 IN PKSDATARANGE MatchingDataRange, \ 285 IN ULONG OutputBufferLength, \ 286 OUT PVOID ResultantFormat OPTIONAL, \ 287 OUT PULONG ResultantFormatLength); \ 288 \ 289 STDMETHODIMP_(NTSTATUS) PowerChangeNotify( \ 290 IN POWER_STATE PowerState); \ 291 \ 292 STDMETHODIMP_(NTSTATUS) PinCount( \ 293 IN ULONG PinId, \ 294 IN OUT PULONG FilterNecessary, \ 295 IN OUT PULONG FilterCurrent, \ 296 IN OUT PULONG FilterPossible, \ 297 IN OUT PULONG GlobalCurrent, \ 298 IN OUT PULONG GlobalPossible) 299 300 301 DECLARE_INTERFACE_(ISubdevice, IUnknown) 302 { 303 DEFINE_ABSTRACT_UNKNOWN() 304 DEFINE_ABSTRACT_ISUBDEVICE() 305 }; 306 307 typedef ISubdevice *PSUBDEVICE; 308 309 /***************************************************************************** 310 * IIrpQueue 311 ***************************************************************************** 312 */ 313 314 #undef INTERFACE 315 #define INTERFACE IIrpQueue 316 317 DECLARE_INTERFACE_(IIrpQueue, IUnknown) 318 { 319 DEFINE_ABSTRACT_UNKNOWN() 320 321 STDMETHOD_(NTSTATUS, Init)(THIS_ 322 IN PKSPIN_CONNECT ConnectDetails, 323 IN PKSPIN_DESCRIPTOR Descriptor, 324 IN ULONG FrameSize, 325 IN ULONG Alignment, 326 IN ULONG TagSupportEnabled) PURE; 327 328 STDMETHOD_(NTSTATUS, AddMapping)(THIS_ 329 IN PIRP Irp, 330 OUT PULONG Data) PURE; 331 332 STDMETHOD_(NTSTATUS, GetMapping)(THIS_ 333 OUT PUCHAR * Buffer, 334 OUT PULONG BufferSize) PURE; 335 336 STDMETHOD_(VOID, UpdateMapping)(THIS_ 337 IN ULONG BytesWritten) PURE; 338 339 STDMETHOD_(ULONG, NumData)(THIS) PURE; 340 341 STDMETHOD_(BOOL, CancelBuffers)(THIS) PURE; 342 343 STDMETHOD_(NTSTATUS, GetMappingWithTag)(THIS_ 344 IN PVOID Tag, 345 OUT PPHYSICAL_ADDRESS PhysicalAddress, 346 OUT PVOID *VirtualAddress, 347 OUT PULONG ByteCount, 348 OUT PULONG Flags) PURE; 349 350 STDMETHOD_(NTSTATUS, ReleaseMappingWithTag)(THIS_ 351 IN PVOID Tag) PURE; 352 353 STDMETHOD_(BOOLEAN, HasLastMappingFailed)(THIS) PURE; 354 STDMETHOD_(ULONG, GetCurrentIrpOffset)(THIS) PURE; 355 356 STDMETHOD_(BOOLEAN, GetAcquiredTagRange)(THIS_ 357 IN PVOID * FirstTag, 358 IN PVOID * LastTag) PURE; 359 360 }; 361 362 363 #define IMP_IIrpQueue \ 364 STDMETHODIMP_(NTSTATUS) Init(THIS_ \ 365 IN PKSPIN_CONNECT ConnectDetails, \ 366 IN PKSPIN_DESCRIPTOR Descriptor, \ 367 IN ULONG FrameSize, \ 368 IN ULONG Alignment, \ 369 IN ULONG TagSupportEnabled); \ 370 \ 371 STDMETHODIMP_(NTSTATUS) AddMapping(THIS_ \ 372 IN PIRP Irp, \ 373 OUT PULONG Data); \ 374 \ 375 STDMETHODIMP_(NTSTATUS) GetMapping(THIS_ \ 376 OUT PUCHAR * Buffer, \ 377 OUT PULONG BufferSize); \ 378 \ 379 STDMETHODIMP_(VOID) UpdateMapping(THIS_ \ 380 IN ULONG BytesWritten); \ 381 \ 382 STDMETHODIMP_(ULONG) NumData(THIS); \ 383 \ 384 STDMETHODIMP_(BOOL) CancelBuffers(THIS); \ 385 \ 386 STDMETHODIMP_(NTSTATUS) GetMappingWithTag(THIS_ \ 387 IN PVOID Tag, \ 388 OUT PPHYSICAL_ADDRESS PhysicalAddress, \ 389 OUT PVOID *VirtualAddress, \ 390 OUT PULONG ByteCount, \ 391 OUT PULONG Flags); \ 392 \ 393 STDMETHODIMP_(NTSTATUS) ReleaseMappingWithTag( \ 394 IN PVOID Tag); \ 395 \ 396 STDMETHODIMP_(BOOLEAN) HasLastMappingFailed(THIS); \ 397 STDMETHODIMP_(ULONG) GetCurrentIrpOffset(THIS); \ 398 STDMETHODIMP_(BOOLEAN) GetAcquiredTagRange(THIS_ \ 399 IN PVOID * FirstTag, \ 400 IN PVOID * LastTag); 401 402 403 404 /***************************************************************************** 405 * IKsWorkSink 406 ***************************************************************************** 407 */ 408 #undef INTERFACE 409 #define INTERFACE IKsWorkSink 410 411 DECLARE_INTERFACE_(IKsWorkSink, IUnknown) 412 { 413 DEFINE_ABSTRACT_UNKNOWN() 414 415 STDMETHOD_(NTSTATUS, Work)(THIS); 416 }; 417 418 /***************************************************************************** 419 * IIrpStreamNotify 420 ***************************************************************************** 421 */ 422 #undef INTERFACE 423 #define INTERFACE IIrpStreamNotify 424 425 struct IRPSTREAMPOSITION; 426 427 DECLARE_INTERFACE_(IIrpStreamNotify, IUnknown) 428 { 429 DEFINE_ABSTRACT_UNKNOWN() 430 431 STDMETHOD_(NTSTATUS, IrpSubmitted)(THIS_ 432 IN PIRP Irp, 433 IN BOOLEAN WAIT)PURE; 434 435 STDMETHOD_(NTSTATUS, GetPosition)(THIS_ 436 OUT struct IRPSTREAMPOSITION * Position)PURE; 437 }; 438 439 /***************************************************************************** 440 * IKsShellTransport 441 ***************************************************************************** 442 */ 443 444 #undef INTERFACE 445 #define INTERFACE IKsShellTransport 446 447 #define DEFINE_ABSTRACT_IKSSHELLTRANSPORT() \ 448 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \ 449 IN PIRP Irp, \ 450 OUT IKsShellTransport ** Transport) PURE; \ 451 \ 452 STDMETHOD_(NTSTATUS, Connect)(THIS_ \ 453 IN IKsShellTransport * StartTransport, \ 454 OUT IKsShellTransport ** EndTransport, \ 455 IN KSPIN_DATAFLOW DataFlow)PURE; \ 456 \ 457 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \ 458 IN KSSTATE State1, \ 459 IN KSSTATE State2, \ 460 OUT IKsShellTransport ** EndTransport)PURE; \ 461 \ 462 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \ 463 IN KSRESET State1, \ 464 OUT IKsShellTransport ** EndTransport)PURE; 465 466 467 DECLARE_INTERFACE_(IKsShellTransport, IUnknown) 468 { 469 DEFINE_ABSTRACT_UNKNOWN() 470 471 DEFINE_ABSTRACT_IKSSHELLTRANSPORT() 472 }; 473 474 /***************************************************************************** 475 * IIrpStream 476 ***************************************************************************** 477 */ 478 struct IRPSTREAM_POSITION; 479 struct IRPSTREAMPACKETINFO; 480 481 #define DEFINE_ABSTRACT_IRPSTREAM() \ 482 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \ 483 IN PIRP Irp, \ 484 OUT IKsShellTransport ** Transport) PURE; \ 485 \ 486 STDMETHOD_(NTSTATUS, Connect)(THIS_ \ 487 IN IKsShellTransport * StartTransport, \ 488 OUT IKsShellTransport ** EndTransport, \ 489 IN KSPIN_DATAFLOW DataFlow)PURE; \ 490 \ 491 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \ 492 IN KSSTATE State1, \ 493 IN KSSTATE State2, \ 494 OUT IKsShellTransport ** EndTransport)PURE; \ 495 \ 496 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \ 497 IN KSRESET State1, \ 498 OUT IKsShellTransport ** EndTransport)PURE; \ 499 \ 500 STDMETHOD_(NTSTATUS, GetPosition)(THIS_ \ 501 IN OUT struct IRPSTREAM_POSITION * Position) PURE; \ 502 \ 503 STDMETHOD_(NTSTATUS, Init)(THIS_ \ 504 IN BOOLEAN Wait, \ 505 KSPIN_CONNECT *ConnectDetails, \ 506 PDEVICE_OBJECT DeviceObject, \ 507 PDMA_ADAPTER DmaAdapter) PURE; \ 508 \ 509 STDMETHOD_(NTSTATUS, CancelAllIrps)(THIS_ \ 510 ULONG Wait)PURE; \ 511 \ 512 STDMETHOD_(VOID, TerminatePacket)(THIS); \ 513 \ 514 STDMETHOD_(NTSTATUS, ChangeOptionsFlag)(THIS_ \ 515 ULONG Unknown1, \ 516 ULONG Unknown2, \ 517 ULONG Unknown3, \ 518 ULONG Unknown4)PURE; \ 519 \ 520 STDMETHOD_(NTSTATUS, GetPacketInfo)(THIS_ \ 521 struct IRPSTREAMPACKETINFO * Info1, \ 522 struct IRPSTREAMPACKETINFO * Info2)PURE; \ 523 \ 524 STDMETHOD_(NTSTATUS, SetPacketOffsets)(THIS_ \ 525 ULONG Unknown1, \ 526 ULONG Unknown2)PURE; \ 527 \ 528 STDMETHOD_(NTSTATUS, RegisterNotifySink)(THIS_ \ 529 IN IIrpStreamNotify * NotifyStream)PURE; 530 531 532 533 #undef INTERFACE 534 #define INTERFACE IIrpStream 535 536 DECLARE_INTERFACE_(IIrpStream, IUnknown) 537 { 538 DEFINE_ABSTRACT_UNKNOWN() 539 540 DEFINE_ABSTRACT_IRPSTREAM() 541 }; 542 543 544 /***************************************************************************** 545 * IIrpStreamPhysical 546 ***************************************************************************** 547 */ 548 #undef INTERFACE 549 #define INTERFACE IIrpStreamPhysical 550 551 DECLARE_INTERFACE_(IIrpStreamPhysical, IIrpStream) 552 { 553 DEFINE_ABSTRACT_UNKNOWN() 554 555 DEFINE_ABSTRACT_IRPSTREAM() 556 557 STDMETHOD_(NTSTATUS, GetMapping)(THIS_ 558 IN PVOID Tag, 559 OUT PPHYSICAL_ADDRESS PhysicalAddress, 560 OUT PVOID * VirtualAddress, 561 OUT PULONG ByteCount, 562 OUT PULONG Flags)PURE; 563 564 }; 565 566 /***************************************************************************** 567 * IIrpStreamVirtual 568 ***************************************************************************** 569 */ 570 #undef INTERFACE 571 #define INTERFACE IIrpStreamVirtual 572 573 DECLARE_INTERFACE_(IIrpStreamVirtual, IIrpStream) 574 { 575 DEFINE_ABSTRACT_UNKNOWN() 576 577 DEFINE_ABSTRACT_IRPSTREAM() 578 579 STDMETHOD_(NTSTATUS, GetLockedRegion)(THIS_ 580 OUT PULONG OutSize, 581 OUT PVOID * OutBuffer)PURE; 582 583 STDMETHOD_(NTSTATUS, Copy)(THIS_ 584 IN BOOLEAN Wait, 585 OUT ULONG Size, 586 IN PULONG Buffer, 587 OUT PVOID Result)PURE; 588 589 STDMETHOD_(NTSTATUS, Complete)(THIS_ 590 IN ULONG Unknown1, 591 IN PULONG Data)PURE; 592 593 STDMETHOD_(ULONG, GetIrpStreamPositionLock)(THIS); 594 }; 595 596 /***************************************************************************** 597 * IPortFilterWavePci 598 ***************************************************************************** 599 */ 600 601 #undef INTERFACE 602 #define INTERFACE IPortFilterWavePci 603 604 struct IPortPinWavePci; 605 606 DECLARE_INTERFACE_(IPortFilterWavePci, IIrpTarget) 607 { 608 DEFINE_ABSTRACT_UNKNOWN() 609 610 DEFINE_ABSTRACT_IRPTARGET() 611 612 STDMETHOD_(NTSTATUS, Init)(THIS_ 613 IN PPORTWAVEPCI Port)PURE; 614 615 STDMETHOD_(NTSTATUS, FreePin)(THIS_ 616 IN struct IPortPinWavePci* Pin)PURE; 617 }; 618 619 typedef IPortFilterWavePci *PPORTFILTERWAVEPCI; 620 621 #define IMP_IPortFilterPci \ 622 IMP_IIrpTarget; \ 623 STDMETHODIMP_(NTSTATUS) Init(THIS_ \ 624 IN PPORTWAVEPCI Port); \ 625 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \ 626 IN struct IPortPinWavePci* Pin) 627 628 629 /***************************************************************************** 630 * IPortPinWavePci 631 ***************************************************************************** 632 */ 633 634 #undef INTERFACE 635 #define INTERFACE IPortPinWavePci 636 637 DECLARE_INTERFACE_(IPortPinWavePci, IIrpTarget) 638 { 639 DEFINE_ABSTRACT_UNKNOWN() 640 641 DEFINE_ABSTRACT_IRPTARGET() 642 643 STDMETHOD_(NTSTATUS, Init)(THIS_ 644 IN PPORTWAVEPCI Port, 645 IN PPORTFILTERWAVEPCI Filter, 646 IN KSPIN_CONNECT * ConnectDetails, 647 IN KSPIN_DESCRIPTOR * PinDescriptor, 648 IN PDEVICE_OBJECT DeviceObject) PURE; 649 650 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE; 651 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE; 652 }; 653 654 #define IMP_IPortPinWavePci \ 655 IMP_IIrpTarget; \ 656 STDMETHODIMP_(NTSTATUS) Init(THIS_ \ 657 IN PPORTWAVEPCI Port, \ 658 IN PPORTFILTERWAVEPCI Filter, \ 659 IN KSPIN_CONNECT * ConnectDetails, \ 660 IN KSPIN_DESCRIPTOR * PinDescriptor, \ 661 IN PDEVICE_OBJECT DeviceObject); \ 662 \ 663 STDMETHODIMP_(PVOID) GetIrpStream(); \ 664 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS) 665 666 667 668 typedef IPortPinWavePci *PPORTPINWAVEPCI; 669 670 671 #if (NTDDI_VERSION >= NTDDI_VISTA) 672 673 /***************************************************************************** 674 * IPortFilterWaveRT 675 ***************************************************************************** 676 */ 677 678 #undef INTERFACE 679 #define INTERFACE IPortFilterWaveRT 680 681 #ifndef PPORTWAVERT 682 typedef IPortWaveRT *PPORTWAVERT; 683 #endif 684 685 DECLARE_INTERFACE_(IPortFilterWaveRT, IIrpTarget) 686 { 687 DEFINE_ABSTRACT_UNKNOWN() 688 689 DEFINE_ABSTRACT_IRPTARGET() 690 691 STDMETHOD_(NTSTATUS, Init)(THIS_ 692 IN PPORTWAVERT Port)PURE; 693 }; 694 695 typedef IPortFilterWaveRT *PPORTFILTERWAVERT; 696 697 #define IMP_IPortFilterWaveRT \ 698 IMP_IIrpTarget; \ 699 STDMETHODIMP_(NTSTATUS) Init(THIS_ \ 700 IN PPORTWAVERT Port) 701 702 703 /***************************************************************************** 704 * IPortPinWaveRT 705 ***************************************************************************** 706 */ 707 708 #undef INTERFACE 709 #define INTERFACE IPortPinWaveRT 710 711 DECLARE_INTERFACE_(IPortPinWaveRT, IIrpTarget) 712 { 713 DEFINE_ABSTRACT_UNKNOWN() 714 715 DEFINE_ABSTRACT_IRPTARGET() 716 717 STDMETHOD_(NTSTATUS, Init)(THIS_ 718 IN PPORTWAVERT Port, 719 IN PPORTFILTERWAVERT Filter, 720 IN KSPIN_CONNECT * ConnectDetails, 721 IN KSPIN_DESCRIPTOR * PinDescriptor, 722 IN PDEVICE_OBJECT DeviceObject) PURE; 723 }; 724 725 typedef IPortPinWaveRT *PPORTPINWAVERT; 726 727 #define IMP_IPortPinWaveRT \ 728 IMP_IIrpTarget; \ 729 STDMETHODIMP_(NTSTATUS) Init(THIS_ \ 730 IN PPORTWAVERT Port, \ 731 IN PPORTFILTERWAVERT Filter, \ 732 IN KSPIN_CONNECT * ConnectDetails, \ 733 IN KSPIN_DESCRIPTOR * PinDescriptor, \ 734 IN PDEVICE_OBJECT DeviceObject) 735 736 737 #endif 738 739 /***************************************************************************** 740 * IPortFilterWaveCyclic 741 ***************************************************************************** 742 */ 743 744 #undef INTERFACE 745 #define INTERFACE IPortFilterWaveCyclic 746 747 struct IPortPinWaveCyclic; 748 749 DECLARE_INTERFACE_(IPortFilterWaveCyclic, IIrpTarget) 750 { 751 DEFINE_ABSTRACT_UNKNOWN() 752 753 DEFINE_ABSTRACT_IRPTARGET() 754 755 STDMETHOD_(NTSTATUS, Init)(THIS_ 756 IN PPORTWAVECYCLIC Port)PURE; 757 758 STDMETHOD_(NTSTATUS, FreePin)(THIS_ 759 IN struct IPortPinWaveCyclic* Pin)PURE; 760 }; 761 762 typedef IPortFilterWaveCyclic *PPORTFILTERWAVECYCLIC; 763 764 #define IMP_IPortFilterWaveCyclic \ 765 IMP_IIrpTarget; \ 766 STDMETHODIMP_(NTSTATUS) Init(THIS_ \ 767 IN PPORTWAVECYCLIC Port); \ 768 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \ 769 IN struct IPortPinWaveCyclic* Pin) 770 771 772 /***************************************************************************** 773 * IPortPinWaveCyclic 774 ***************************************************************************** 775 */ 776 777 #undef INTERFACE 778 #define INTERFACE IPortPinWaveCyclic 779 780 DECLARE_INTERFACE_(IPortPinWaveCyclic, IIrpTarget) 781 { 782 DEFINE_ABSTRACT_UNKNOWN() 783 784 DEFINE_ABSTRACT_IRPTARGET() 785 786 STDMETHOD_(NTSTATUS, Init)(THIS_ 787 IN PPORTWAVECYCLIC Port, 788 IN PPORTFILTERWAVECYCLIC Filter, 789 IN KSPIN_CONNECT * ConnectDetails, 790 IN KSPIN_DESCRIPTOR * PinDescriptor) PURE; 791 792 STDMETHOD_(ULONG, GetCompletedPosition)(THIS) PURE; 793 STDMETHOD_(ULONG, GetCycleCount)(THIS) PURE; 794 STDMETHOD_(ULONG, GetDeviceBufferSize)(THIS) PURE; 795 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE; 796 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE; 797 }; 798 799 typedef IPortPinWaveCyclic *PPORTPINWAVECYCLIC; 800 801 #define IMP_IPortPinWaveCyclic \ 802 IMP_IIrpTarget; \ 803 STDMETHODIMP_(NTSTATUS) Init(THIS_ \ 804 IN PPORTWAVECYCLIC Port, \ 805 IN PPORTFILTERWAVECYCLIC Filter, \ 806 IN KSPIN_CONNECT * ConnectDetails, \ 807 IN KSPIN_DESCRIPTOR * PinDescriptor); \ 808 STDMETHODIMP_(ULONG) GetCompletedPosition(THIS); \ 809 STDMETHODIMP_(ULONG) GetCycleCount(THIS); \ 810 STDMETHODIMP_(ULONG) GetDeviceBufferSize(THIS); \ 811 STDMETHODIMP_(PVOID) GetIrpStream(THIS); \ 812 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS) 813 814 815 /***************************************************************************** 816 * IPortFilterDMus 817 ***************************************************************************** 818 */ 819 820 #undef INTERFACE 821 #define INTERFACE IPortFilterDMus 822 823 struct IPortPinDMus; 824 825 DECLARE_INTERFACE_(IPortFilterDMus, IUnknown) 826 { 827 DEFINE_ABSTRACT_UNKNOWN() 828 829 DEFINE_ABSTRACT_IRPTARGET() 830 831 STDMETHOD_(NTSTATUS, Init)(THIS_ 832 IN PPORTDMUS Port)PURE; 833 834 STDMETHOD_(NTSTATUS, FreePin)(THIS_ 835 IN struct IPortPinDMus* Pin)PURE; 836 837 STDMETHOD_(VOID, NotifyPins)(THIS) PURE; 838 }; 839 840 typedef IPortFilterDMus *PPORTFILTERDMUS; 841 842 #define IMP_IPortFilterDMus \ 843 IMP_IIrpTarget; \ 844 STDMETHODIMP_(NTSTATUS) Init(THIS_ \ 845 IN PPORTDMUS Port); \ 846 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \ 847 IN struct IPortPinDMus* Pin); \ 848 STDMETHODIMP_(VOID) NotifyPins(THIS) 849 850 /***************************************************************************** 851 * IPortPinDMus 852 ***************************************************************************** 853 */ 854 855 #undef INTERFACE 856 #define INTERFACE IPortPinDMus 857 858 DECLARE_INTERFACE_(IPortPinDMus, IIrpTarget) 859 { 860 DEFINE_ABSTRACT_UNKNOWN() 861 862 DEFINE_ABSTRACT_IRPTARGET() 863 864 STDMETHOD_(NTSTATUS, Init)(THIS_ 865 IN PPORTDMUS Port, 866 IN PPORTFILTERDMUS Filter, 867 IN KSPIN_CONNECT * ConnectDetails, 868 IN KSPIN_DESCRIPTOR * PinDescriptor, 869 IN PDEVICE_OBJECT DeviceObject) PURE; 870 871 STDMETHOD_(VOID, Notify)(THIS) PURE; 872 }; 873 874 #define IMP_IPortPinDMus \ 875 IMP_IIrpTarget; \ 876 STDMETHODIMP_(NTSTATUS) Init(THIS_ \ 877 IN PPORTDMUS Port, \ 878 IN PPORTFILTERDMUS Filter, \ 879 IN KSPIN_CONNECT * ConnectDetails, \ 880 IN KSPIN_DESCRIPTOR * PinDescriptor, \ 881 IN PDEVICE_OBJECT DeviceObject); \ 882 STDMETHODIMP_(VOID) Notify(THIS) 883 884 typedef IPortPinDMus *PPORTPINDMUS; 885 886 /***************************************************************************** 887 * IDmaChannelInit 888 ***************************************************************************** 889 */ 890 891 #ifdef _MSC_VER 892 893 #define IMP_IDmaChannelEx \ 894 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \ 895 IN ULONG BufferSize, \ 896 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \ 897 \ 898 STDMETHODIMP_(void) FreeBuffer(void); \ 899 STDMETHODIMP_(ULONG) TransferCount(void); \ 900 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \ 901 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \ 902 STDMETHODIMP_(ULONG) BufferSize(void); \ 903 \ 904 STDMETHODIMP_(void) SetBufferSize( \ 905 IN ULONG BufferSize); \ 906 \ 907 STDMETHODIMP_(PVOID) SystemAddress(void); \ 908 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(); \ 909 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \ 910 \ 911 STDMETHODIMP_(void) CopyTo( \ 912 IN PVOID Destination, \ 913 IN PVOID Source, \ 914 IN ULONG ByteCount); \ 915 \ 916 STDMETHODIMP_(void) CopyFrom( \ 917 IN PVOID Destination, \ 918 IN PVOID Source, \ 919 IN ULONG ByteCount) 920 921 #else 922 923 #define IMP_IDmaChannelEx \ 924 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \ 925 IN ULONG BufferSize, \ 926 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \ 927 \ 928 STDMETHODIMP_(void) FreeBuffer(void); \ 929 STDMETHODIMP_(ULONG) TransferCount(void); \ 930 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \ 931 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \ 932 STDMETHODIMP_(ULONG) BufferSize(void); \ 933 \ 934 STDMETHODIMP_(void) SetBufferSize( \ 935 IN ULONG BufferSize); \ 936 \ 937 STDMETHODIMP_(PVOID) SystemAddress(void); \ 938 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress( \ 939 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \ 940 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \ 941 \ 942 STDMETHODIMP_(void) CopyTo( \ 943 IN PVOID Destination, \ 944 IN PVOID Source, \ 945 IN ULONG ByteCount); \ 946 \ 947 STDMETHODIMP_(void) CopyFrom( \ 948 IN PVOID Destination, \ 949 IN PVOID Source, \ 950 IN ULONG ByteCount) 951 952 953 954 #endif 955 956 957 #define IMP_IDmaChannelSlaveEx \ 958 IMP_IDmaChannelEx; \ 959 STDMETHODIMP_(NTSTATUS) Start( \ 960 IN ULONG MapSize, \ 961 IN BOOLEAN WriteToDevice); \ 962 \ 963 STDMETHODIMP_(NTSTATUS) Stop(void); \ 964 STDMETHODIMP_(ULONG) ReadCounter(void); \ 965 \ 966 STDMETHODIMP_(NTSTATUS) WaitForTC( \ 967 ULONG Timeout) 968 969 #define IMP_IDmaChannelInit\ 970 IMP_IDmaChannelSlaveEx;\ 971 STDMETHODIMP_(NTSTATUS) Init( \ 972 IN PDEVICE_DESCRIPTION DeviceDescription, \ 973 IN PDEVICE_OBJECT DeviceObject) 974 975 #ifdef _MSC_VER 976 977 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \ 978 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \ 979 IN ULONG BufferSize, \ 980 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \ 981 \ 982 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \ 983 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \ 984 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \ 985 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \ 986 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \ 987 \ 988 STDMETHOD_(void, SetBufferSize)( THIS_ \ 989 IN ULONG BufferSize) PURE; \ 990 \ 991 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \ 992 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS) PURE; \ 993 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \ 994 \ 995 STDMETHOD_(void, CopyTo)( THIS_ \ 996 IN PVOID Destination, \ 997 IN PVOID Source, \ 998 IN ULONG ByteCount) PURE; \ 999 \ 1000 STDMETHOD_(void, CopyFrom)( THIS_ \ 1001 IN PVOID Destination, \ 1002 IN PVOID Source, \ 1003 IN ULONG ByteCount) PURE; 1004 #else 1005 1006 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \ 1007 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \ 1008 IN ULONG BufferSize, \ 1009 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \ 1010 \ 1011 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \ 1012 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \ 1013 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \ 1014 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \ 1015 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \ 1016 \ 1017 STDMETHOD_(void, SetBufferSize)( THIS_ \ 1018 IN ULONG BufferSize) PURE; \ 1019 \ 1020 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \ 1021 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_ \ 1022 IN PPHYSICAL_ADDRESS Address) PURE; \ 1023 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \ 1024 \ 1025 STDMETHOD_(void, CopyTo)( THIS_ \ 1026 IN PVOID Destination, \ 1027 IN PVOID Source, \ 1028 IN ULONG ByteCount) PURE; \ 1029 \ 1030 STDMETHOD_(void, CopyFrom)( THIS_ \ 1031 IN PVOID Destination, \ 1032 IN PVOID Source, \ 1033 IN ULONG ByteCount) PURE; 1034 1035 #endif 1036 #undef INTERFACE 1037 #define INTERFACE IDmaChannelInit 1038 1039 DECLARE_INTERFACE_(IDmaChannelInit, IUnknown) 1040 { 1041 DEFINE_ABSTRACT_UNKNOWN() 1042 DEFINE_ABSTRACT_DMACHANNEL_EX() 1043 DEFINE_ABSTRACT_DMACHANNELSLAVE() 1044 1045 STDMETHOD_(NTSTATUS, Init)( THIS_ 1046 IN PDEVICE_DESCRIPTION DeviceDescription, 1047 IN PDEVICE_OBJECT DeviceObject) PURE; 1048 }; 1049 1050 #undef INTERFACE 1051 1052 /***************************************************************************** 1053 * IPortFilterTopology 1054 ***************************************************************************** 1055 */ 1056 1057 #undef INTERFACE 1058 #define INTERFACE IPortFilterTopology 1059 1060 DECLARE_INTERFACE_(IPortFilterTopology, IIrpTarget) 1061 { 1062 DEFINE_ABSTRACT_UNKNOWN() 1063 1064 DEFINE_ABSTRACT_IRPTARGET() 1065 1066 STDMETHOD_(NTSTATUS, Init)(THIS_ 1067 IN PPORTTOPOLOGY Port)PURE; 1068 }; 1069 1070 typedef IPortFilterTopology *PPORTFILTERTOPOLOGY; 1071 1072 #define IMP_IPortFilterTopology \ 1073 IMP_IIrpTarget; \ 1074 STDMETHODIMP_(NTSTATUS) Init(THIS_ \ 1075 IN PPORTTOPOLOGY Port) 1076 1077 #undef INTERFACE 1078 1079 /***************************************************************************** 1080 * IPortWaveRTStreamInit 1081 ***************************************************************************** 1082 */ 1083 1084 #undef INTERFACE 1085 #define INTERFACE IPortWaveRTStreamInit 1086 1087 1088 DECLARE_INTERFACE_(IPortWaveRTStreamInit, IUnknown) 1089 { 1090 DEFINE_ABSTRACT_UNKNOWN() 1091 1092 STDMETHOD_(PMDL, AllocatePagesForMdl) 1093 ( THIS_ 1094 IN PHYSICAL_ADDRESS HighAddress, 1095 IN SIZE_T TotalBytes 1096 ) PURE; 1097 1098 STDMETHOD_(PMDL, AllocateContiguousPagesForMdl) 1099 ( THIS_ 1100 IN PHYSICAL_ADDRESS LowAddress, 1101 IN PHYSICAL_ADDRESS HighAddress, 1102 IN SIZE_T TotalBytes 1103 ) PURE; 1104 1105 STDMETHOD_(PVOID, MapAllocatedPages) 1106 ( THIS_ 1107 IN PMDL MemoryDescriptorList, 1108 IN MEMORY_CACHING_TYPE CacheType 1109 ) PURE; 1110 1111 STDMETHOD_(VOID, UnmapAllocatedPages) 1112 ( THIS_ 1113 IN PVOID BaseAddress, 1114 IN PMDL MemoryDescriptorList 1115 ) PURE; 1116 1117 STDMETHOD_(VOID, FreePagesFromMdl) 1118 ( THIS_ 1119 IN PMDL MemoryDescriptorList 1120 ) PURE; 1121 1122 STDMETHOD_(ULONG, GetPhysicalPagesCount) 1123 ( THIS_ 1124 IN PMDL MemoryDescriptorList 1125 ) PURE; 1126 1127 STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress) 1128 ( THIS_ 1129 IN PPHYSICAL_ADDRESS Address, 1130 IN PMDL MemoryDescriptorList, 1131 IN ULONG Index 1132 ) PURE; 1133 }; 1134 1135 #undef INTERFACE 1136 1137 #define IMP_IPortWaveRTStreamInit \ 1138 STDMETHODIMP_(PMDL) AllocatePagesForMdl \ 1139 ( THIS_ \ 1140 IN PHYSICAL_ADDRESS HighAddress, \ 1141 IN SIZE_T TotalBytes \ 1142 ); \ 1143 \ 1144 STDMETHODIMP_(PMDL) AllocateContiguousPagesForMdl \ 1145 ( THIS_ \ 1146 IN PHYSICAL_ADDRESS LowAddress, \ 1147 IN PHYSICAL_ADDRESS HighAddress, \ 1148 IN SIZE_T TotalBytes \ 1149 ); \ 1150 \ 1151 STDMETHODIMP_(PVOID) MapAllocatedPages \ 1152 ( THIS_ \ 1153 IN PMDL MemoryDescriptorList, \ 1154 IN MEMORY_CACHING_TYPE CacheType \ 1155 ); \ 1156 \ 1157 STDMETHODIMP_(VOID) UnmapAllocatedPages \ 1158 ( THIS_ \ 1159 IN PVOID BaseAddress, \ 1160 IN PMDL MemoryDescriptorList \ 1161 ); \ 1162 \ 1163 STDMETHODIMP_(VOID) FreePagesFromMdl \ 1164 ( THIS_ \ 1165 IN PMDL MemoryDescriptorList \ 1166 ); \ 1167 \ 1168 STDMETHODIMP_(ULONG) GetPhysicalPagesCount \ 1169 ( THIS_ \ 1170 IN PMDL MemoryDescriptorList \ 1171 ); \ 1172 \ 1173 STDMETHODIMP_(PHYSICAL_ADDRESS) GetPhysicalPageAddress \ 1174 ( THIS_ \ 1175 IN PPHYSICAL_ADDRESS Address, \ 1176 IN PMDL MemoryDescriptorList, \ 1177 IN ULONG Index \ 1178 ) 1179 1180 #ifndef IMP_IPortClsVersion 1181 1182 #define IMP_IPortClsVersion \ 1183 STDMETHODIMP_(DWORD) GetVersion(void); 1184 1185 #endif 1186 1187 #ifdef IMP_IPortWaveRT 1188 #define IMP_IPortWaveRT IMP_IPort 1189 #endif 1190 1191 #endif 1192