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);
9 /*****************************************************************************
11 *****************************************************************************
14 #define IMP_IIrpTarget \
15 STDMETHODIMP_(NTSTATUS) NewIrpTarget(THIS_ \
16 OUT struct IIrpTarget **OutTarget, \
18 IN PUNKNOWN Unknown, \
19 IN POOL_TYPE PoolType, \
20 IN PDEVICE_OBJECT DeviceObject, \
22 IN KSOBJECT_CREATE *CreateObject); \
24 STDMETHODIMP_(NTSTATUS) DeviceIoControl(THIS_ \
25 IN PDEVICE_OBJECT DeviceObject, \
28 STDMETHODIMP_(NTSTATUS) Read(THIS_ \
29 IN PDEVICE_OBJECT DeviceObject, \
32 STDMETHODIMP_(NTSTATUS) Write(THIS_ \
33 IN PDEVICE_OBJECT DeviceObject, \
36 STDMETHODIMP_(NTSTATUS) Flush(THIS_ \
37 IN PDEVICE_OBJECT DeviceObject, \
40 STDMETHODIMP_(NTSTATUS) Close(THIS_ \
41 IN PDEVICE_OBJECT DeviceObject, \
44 STDMETHODIMP_(NTSTATUS) QuerySecurity(THIS_ \
45 IN PDEVICE_OBJECT DeviceObject, \
48 STDMETHODIMP_(NTSTATUS) SetSecurity(THIS_ \
49 IN PDEVICE_OBJECT DeviceObject, \
52 STDMETHODIMP_(BOOLEAN) FastDeviceIoControl(THIS_ \
53 IN PFILE_OBJECT FileObject, \
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); \
63 STDMETHODIMP_(BOOLEAN) FastRead(THIS_ \
64 IN PFILE_OBJECT FileObject, \
65 IN PLARGE_INTEGER FileOffset, \
70 OUT PIO_STATUS_BLOCK StatusBlock, \
71 IN PDEVICE_OBJECT DeviceObject); \
73 STDMETHODIMP_(BOOLEAN) FastWrite(THIS_ \
74 IN PFILE_OBJECT FileObject, \
75 IN PLARGE_INTEGER FileOffset, \
80 OUT PIO_STATUS_BLOCK StatusBlock, \
81 IN PDEVICE_OBJECT DeviceObject)
83 #define DEFINE_ABSTRACT_IRPTARGET() \
84 STDMETHOD_(NTSTATUS, NewIrpTarget)(THIS_ \
85 OUT struct IIrpTarget **OutTarget, \
87 IN PUNKNOWN Unknown, \
88 IN POOL_TYPE PoolType, \
89 IN PDEVICE_OBJECT DeviceObject, \
91 IN KSOBJECT_CREATE *CreateObject) PURE; \
93 STDMETHOD_(NTSTATUS, DeviceIoControl)(THIS_ \
94 IN PDEVICE_OBJECT DeviceObject, \
97 STDMETHOD_(NTSTATUS, Read)(THIS_ \
98 IN PDEVICE_OBJECT DeviceObject, \
101 STDMETHOD_(NTSTATUS, Write)(THIS_ \
102 IN PDEVICE_OBJECT DeviceObject, \
105 STDMETHOD_(NTSTATUS, Flush)(THIS_ \
106 IN PDEVICE_OBJECT DeviceObject, \
109 STDMETHOD_(NTSTATUS, Close)(THIS_ \
110 IN PDEVICE_OBJECT DeviceObject, \
113 STDMETHOD_(NTSTATUS, QuerySecurity)(THIS_ \
114 IN PDEVICE_OBJECT DeviceObject, \
117 STDMETHOD_(NTSTATUS, SetSecurity)(THIS_ \
118 IN PDEVICE_OBJECT DeviceObject, \
121 STDMETHOD_(BOOLEAN, FastDeviceIoControl)(THIS_ \
122 IN PFILE_OBJECT FileObject, \
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; \
132 STDMETHOD_(BOOLEAN, FastRead)(THIS_ \
133 IN PFILE_OBJECT FileObject, \
134 IN PLARGE_INTEGER FileOffset, \
139 OUT PIO_STATUS_BLOCK StatusBlock, \
140 IN PDEVICE_OBJECT DeviceObject)PURE; \
142 STDMETHOD_(BOOLEAN, FastWrite)(THIS_ \
143 IN PFILE_OBJECT FileObject, \
144 IN PLARGE_INTEGER FileOffset, \
149 OUT PIO_STATUS_BLOCK StatusBlock, \
150 IN PDEVICE_OBJECT DeviceObject)PURE;
155 #define INTERFACE IIrpTarget
157 DECLARE_INTERFACE_(IIrpTarget, IUnknown)
159 DEFINE_ABSTRACT_UNKNOWN()
161 DEFINE_ABSTRACT_IRPTARGET()
164 typedef IIrpTarget *PIRPTARGET;
166 /*****************************************************************************
168 *****************************************************************************
171 struct IIrpTargetFactory;
176 UNICODE_STRING SymbolicLink;
177 }SYMBOLICLINK_ENTRY, *PSYMBOLICLINK_ENTRY;
183 KSPIN_PHYSICALCONNECTION Connection;
184 }PHYSICAL_CONNECTION_ENTRY, *PPHYSICAL_CONNECTION_ENTRY;
188 ULONG MaxGlobalInstanceCount;
189 ULONG MaxFilterInstanceCount;
190 ULONG MinFilterInstanceCount;
191 ULONG CurrentPinInstanceCount;
193 }PIN_INSTANCE_INFO, *PPIN_INSTANCE_INFO;
198 ULONG PinDescriptorCount;
199 ULONG PinDescriptorSize;
200 KSPIN_DESCRIPTOR * KsPinDescriptor;
201 PIN_INSTANCE_INFO * Instances;
206 ULONG InterfaceCount;
208 KSPIN_FACTORY Factory;
209 ULONG FilterPropertySetCount;
210 PKSPROPERTY_SET FilterPropertySet;
213 PKSEVENT_SET EventSet;
214 PLIST_ENTRY EventList;
215 PKSPIN_LOCK EventListLock;
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;
225 }SUBDEVICE_DESCRIPTOR, *PSUBDEVICE_DESCRIPTOR;
228 #define INTERFACE ISubdevice
230 #define DEFINE_ABSTRACT_ISUBDEVICE() \
231 STDMETHOD_(NTSTATUS, NewIrpTarget)(THIS_ \
232 OUT IIrpTarget **OutTarget, \
234 IN PUNKNOWN Unknown, \
235 IN POOL_TYPE PoolType, \
236 IN PDEVICE_OBJECT DeviceObject, \
238 IN KSOBJECT_CREATE *CreateObject) PURE; \
240 STDMETHOD_(NTSTATUS, ReleaseChildren)(THIS) PURE; \
242 STDMETHOD_(NTSTATUS, GetDescriptor)(THIS_ \
243 IN SUBDEVICE_DESCRIPTOR **) PURE; \
245 STDMETHOD_(NTSTATUS, DataRangeIntersection)(THIS_ \
247 IN PKSDATARANGE DataRange, \
248 IN PKSDATARANGE MatchingDataRange, \
249 IN ULONG OutputBufferLength, \
250 OUT PVOID ResultantFormat OPTIONAL, \
251 OUT PULONG ResultantFormatLength) PURE; \
253 STDMETHOD_(NTSTATUS, PowerChangeNotify)(THIS_ \
254 IN POWER_STATE PowerState) PURE; \
256 STDMETHOD_(NTSTATUS, PinCount)(THIS_ \
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;
266 #define IMP_ISubdevice \
267 STDMETHODIMP_(NTSTATUS) NewIrpTarget( \
268 OUT IIrpTarget **OutTarget, \
270 IN PUNKNOWN Unknown, \
271 IN POOL_TYPE PoolType, \
272 IN PDEVICE_OBJECT DeviceObject, \
274 IN KSOBJECT_CREATE *CreateObject); \
276 STDMETHODIMP_(NTSTATUS) ReleaseChildren(THIS); \
278 STDMETHODIMP_(NTSTATUS) GetDescriptor(THIS_ \
279 IN SUBDEVICE_DESCRIPTOR **); \
281 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
283 IN PKSDATARANGE DataRange, \
284 IN PKSDATARANGE MatchingDataRange, \
285 IN ULONG OutputBufferLength, \
286 OUT PVOID ResultantFormat OPTIONAL, \
287 OUT PULONG ResultantFormatLength); \
289 STDMETHODIMP_(NTSTATUS) PowerChangeNotify( \
290 IN POWER_STATE PowerState); \
292 STDMETHODIMP_(NTSTATUS) PinCount( \
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)
301 DECLARE_INTERFACE_(ISubdevice, IUnknown)
303 DEFINE_ABSTRACT_UNKNOWN()
304 DEFINE_ABSTRACT_ISUBDEVICE()
307 typedef ISubdevice *PSUBDEVICE;
309 /*****************************************************************************
311 *****************************************************************************
315 #define INTERFACE IIrpQueue
317 DECLARE_INTERFACE_(IIrpQueue, IUnknown)
319 DEFINE_ABSTRACT_UNKNOWN()
321 STDMETHOD_(NTSTATUS, Init)(THIS_
322 IN PKSPIN_CONNECT ConnectDetails,
323 IN PKSPIN_DESCRIPTOR Descriptor,
326 IN ULONG TagSupportEnabled) PURE;
328 STDMETHOD_(NTSTATUS, AddMapping)(THIS_
330 OUT PULONG Data) PURE;
332 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
334 OUT PULONG BufferSize) PURE;
336 STDMETHOD_(VOID, UpdateMapping)(THIS_
337 IN ULONG BytesWritten) PURE;
339 STDMETHOD_(ULONG, NumData)(THIS) PURE;
341 STDMETHOD_(BOOL, CancelBuffers)(THIS) PURE;
343 STDMETHOD_(NTSTATUS, GetMappingWithTag)(THIS_
345 OUT PPHYSICAL_ADDRESS PhysicalAddress,
346 OUT PVOID *VirtualAddress,
347 OUT PULONG ByteCount,
348 OUT PULONG Flags) PURE;
350 STDMETHOD_(NTSTATUS, ReleaseMappingWithTag)(THIS_
353 STDMETHOD_(BOOLEAN, HasLastMappingFailed)(THIS) PURE;
354 STDMETHOD_(ULONG, GetCurrentIrpOffset)(THIS) PURE;
356 STDMETHOD_(BOOLEAN, GetAcquiredTagRange)(THIS_
358 IN PVOID * LastTag) PURE;
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); \
371 STDMETHODIMP_(NTSTATUS) AddMapping(THIS_ \
375 STDMETHODIMP_(NTSTATUS) GetMapping(THIS_ \
376 OUT PUCHAR * Buffer, \
377 OUT PULONG BufferSize); \
379 STDMETHODIMP_(VOID) UpdateMapping(THIS_ \
380 IN ULONG BytesWritten); \
382 STDMETHODIMP_(ULONG) NumData(THIS); \
384 STDMETHODIMP_(BOOL) CancelBuffers(THIS); \
386 STDMETHODIMP_(NTSTATUS) GetMappingWithTag(THIS_ \
388 OUT PPHYSICAL_ADDRESS PhysicalAddress, \
389 OUT PVOID *VirtualAddress, \
390 OUT PULONG ByteCount, \
393 STDMETHODIMP_(NTSTATUS) ReleaseMappingWithTag( \
396 STDMETHODIMP_(BOOLEAN) HasLastMappingFailed(THIS); \
397 STDMETHODIMP_(ULONG) GetCurrentIrpOffset(THIS); \
398 STDMETHODIMP_(BOOLEAN) GetAcquiredTagRange(THIS_ \
399 IN PVOID * FirstTag, \
404 /*****************************************************************************
406 *****************************************************************************
409 #define INTERFACE IKsWorkSink
411 DECLARE_INTERFACE_(IKsWorkSink, IUnknown)
413 DEFINE_ABSTRACT_UNKNOWN()
415 STDMETHOD_(NTSTATUS, Work)(THIS);
418 /*****************************************************************************
420 *****************************************************************************
423 #define INTERFACE IIrpStreamNotify
425 struct IRPSTREAMPOSITION;
427 DECLARE_INTERFACE_(IIrpStreamNotify, IUnknown)
429 DEFINE_ABSTRACT_UNKNOWN()
431 STDMETHOD_(NTSTATUS, IrpSubmitted)(THIS_
433 IN BOOLEAN WAIT)PURE;
435 STDMETHOD_(NTSTATUS, GetPosition)(THIS_
436 OUT struct IRPSTREAMPOSITION * Position)PURE;
439 /*****************************************************************************
441 *****************************************************************************
445 #define INTERFACE IKsShellTransport
447 #define DEFINE_ABSTRACT_IKSSHELLTRANSPORT() \
448 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
450 OUT IKsShellTransport ** Transport) PURE; \
452 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
453 IN IKsShellTransport * StartTransport, \
454 OUT IKsShellTransport ** EndTransport, \
455 IN KSPIN_DATAFLOW DataFlow)PURE; \
457 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
460 OUT IKsShellTransport ** EndTransport)PURE; \
462 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
464 OUT IKsShellTransport ** EndTransport)PURE;
467 DECLARE_INTERFACE_(IKsShellTransport, IUnknown)
469 DEFINE_ABSTRACT_UNKNOWN()
471 DEFINE_ABSTRACT_IKSSHELLTRANSPORT()
474 /*****************************************************************************
476 *****************************************************************************
478 struct IRPSTREAM_POSITION;
479 struct IRPSTREAMPACKETINFO;
481 #define DEFINE_ABSTRACT_IRPSTREAM() \
482 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
484 OUT IKsShellTransport ** Transport) PURE; \
486 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
487 IN IKsShellTransport * StartTransport, \
488 OUT IKsShellTransport ** EndTransport, \
489 IN KSPIN_DATAFLOW DataFlow)PURE; \
491 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
494 OUT IKsShellTransport ** EndTransport)PURE; \
496 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
498 OUT IKsShellTransport ** EndTransport)PURE; \
500 STDMETHOD_(NTSTATUS, GetPosition)(THIS_ \
501 IN OUT struct IRPSTREAM_POSITION * Position) PURE; \
503 STDMETHOD_(NTSTATUS, Init)(THIS_ \
505 KSPIN_CONNECT *ConnectDetails, \
506 PDEVICE_OBJECT DeviceObject, \
507 PDMA_ADAPTER DmaAdapter) PURE; \
509 STDMETHOD_(NTSTATUS, CancelAllIrps)(THIS_ \
512 STDMETHOD_(VOID, TerminatePacket)(THIS); \
514 STDMETHOD_(NTSTATUS, ChangeOptionsFlag)(THIS_ \
518 ULONG Unknown4)PURE; \
520 STDMETHOD_(NTSTATUS, GetPacketInfo)(THIS_ \
521 struct IRPSTREAMPACKETINFO * Info1, \
522 struct IRPSTREAMPACKETINFO * Info2)PURE; \
524 STDMETHOD_(NTSTATUS, SetPacketOffsets)(THIS_ \
526 ULONG Unknown2)PURE; \
528 STDMETHOD_(NTSTATUS, RegisterNotifySink)(THIS_ \
529 IN IIrpStreamNotify * NotifyStream)PURE;
534 #define INTERFACE IIrpStream
536 DECLARE_INTERFACE_(IIrpStream, IUnknown)
538 DEFINE_ABSTRACT_UNKNOWN()
540 DEFINE_ABSTRACT_IRPSTREAM()
544 /*****************************************************************************
546 *****************************************************************************
549 #define INTERFACE IIrpStreamPhysical
551 DECLARE_INTERFACE_(IIrpStreamPhysical, IIrpStream)
553 DEFINE_ABSTRACT_UNKNOWN()
555 DEFINE_ABSTRACT_IRPSTREAM()
557 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
559 OUT PPHYSICAL_ADDRESS PhysicalAddress,
560 OUT PVOID * VirtualAddress,
561 OUT PULONG ByteCount,
562 OUT PULONG Flags)PURE;
566 /*****************************************************************************
568 *****************************************************************************
571 #define INTERFACE IIrpStreamVirtual
573 DECLARE_INTERFACE_(IIrpStreamVirtual, IIrpStream)
575 DEFINE_ABSTRACT_UNKNOWN()
577 DEFINE_ABSTRACT_IRPSTREAM()
579 STDMETHOD_(NTSTATUS, GetLockedRegion)(THIS_
581 OUT PVOID * OutBuffer)PURE;
583 STDMETHOD_(NTSTATUS, Copy)(THIS_
587 OUT PVOID Result)PURE;
589 STDMETHOD_(NTSTATUS, Complete)(THIS_
593 STDMETHOD_(ULONG, GetIrpStreamPositionLock)(THIS);
596 /*****************************************************************************
598 *****************************************************************************
602 #define INTERFACE IPortFilterWavePci
604 struct IPortPinWavePci;
606 DECLARE_INTERFACE_(IPortFilterWavePci, IIrpTarget)
608 DEFINE_ABSTRACT_UNKNOWN()
610 DEFINE_ABSTRACT_IRPTARGET()
612 STDMETHOD_(NTSTATUS, Init)(THIS_
613 IN PPORTWAVEPCI Port)PURE;
615 STDMETHOD_(NTSTATUS, FreePin)(THIS_
616 IN struct IPortPinWavePci* Pin)PURE;
619 typedef IPortFilterWavePci *PPORTFILTERWAVEPCI;
621 #define IMP_IPortFilterPci \
623 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
624 IN PPORTWAVEPCI Port); \
625 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
626 IN struct IPortPinWavePci* Pin)
629 /*****************************************************************************
631 *****************************************************************************
635 #define INTERFACE IPortPinWavePci
637 DECLARE_INTERFACE_(IPortPinWavePci, IIrpTarget)
639 DEFINE_ABSTRACT_UNKNOWN()
641 DEFINE_ABSTRACT_IRPTARGET()
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;
650 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
651 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
654 #define IMP_IPortPinWavePci \
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); \
663 STDMETHODIMP_(PVOID) GetIrpStream(); \
664 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
668 typedef IPortPinWavePci *PPORTPINWAVEPCI;
671 #if (NTDDI_VERSION >= NTDDI_VISTA)
673 /*****************************************************************************
675 *****************************************************************************
679 #define INTERFACE IPortFilterWaveRT
682 typedef IPortWaveRT *PPORTWAVERT;
685 DECLARE_INTERFACE_(IPortFilterWaveRT, IIrpTarget)
687 DEFINE_ABSTRACT_UNKNOWN()
689 DEFINE_ABSTRACT_IRPTARGET()
691 STDMETHOD_(NTSTATUS, Init)(THIS_
692 IN PPORTWAVERT Port)PURE;
695 typedef IPortFilterWaveRT *PPORTFILTERWAVERT;
697 #define IMP_IPortFilterWaveRT \
699 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
703 /*****************************************************************************
705 *****************************************************************************
709 #define INTERFACE IPortPinWaveRT
711 DECLARE_INTERFACE_(IPortPinWaveRT, IIrpTarget)
713 DEFINE_ABSTRACT_UNKNOWN()
715 DEFINE_ABSTRACT_IRPTARGET()
717 STDMETHOD_(NTSTATUS, Init)(THIS_
719 IN PPORTFILTERWAVERT Filter,
720 IN KSPIN_CONNECT * ConnectDetails,
721 IN KSPIN_DESCRIPTOR * PinDescriptor,
722 IN PDEVICE_OBJECT DeviceObject) PURE;
725 typedef IPortPinWaveRT *PPORTPINWAVERT;
727 #define IMP_IPortPinWaveRT \
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)
739 /*****************************************************************************
740 * IPortFilterWaveCyclic
741 *****************************************************************************
745 #define INTERFACE IPortFilterWaveCyclic
747 struct IPortPinWaveCyclic;
749 DECLARE_INTERFACE_(IPortFilterWaveCyclic, IIrpTarget)
751 DEFINE_ABSTRACT_UNKNOWN()
753 DEFINE_ABSTRACT_IRPTARGET()
755 STDMETHOD_(NTSTATUS, Init)(THIS_
756 IN PPORTWAVECYCLIC Port)PURE;
758 STDMETHOD_(NTSTATUS, FreePin)(THIS_
759 IN struct IPortPinWaveCyclic* Pin)PURE;
762 typedef IPortFilterWaveCyclic *PPORTFILTERWAVECYCLIC;
764 #define IMP_IPortFilterWaveCyclic \
766 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
767 IN PPORTWAVECYCLIC Port); \
768 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
769 IN struct IPortPinWaveCyclic* Pin)
772 /*****************************************************************************
774 *****************************************************************************
778 #define INTERFACE IPortPinWaveCyclic
780 DECLARE_INTERFACE_(IPortPinWaveCyclic, IIrpTarget)
782 DEFINE_ABSTRACT_UNKNOWN()
784 DEFINE_ABSTRACT_IRPTARGET()
786 STDMETHOD_(NTSTATUS, Init)(THIS_
787 IN PPORTWAVECYCLIC Port,
788 IN PPORTFILTERWAVECYCLIC Filter,
789 IN KSPIN_CONNECT * ConnectDetails,
790 IN KSPIN_DESCRIPTOR * PinDescriptor) PURE;
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;
799 typedef IPortPinWaveCyclic *PPORTPINWAVECYCLIC;
801 #define IMP_IPortPinWaveCyclic \
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)
815 /*****************************************************************************
817 *****************************************************************************
821 #define INTERFACE IPortFilterDMus
825 DECLARE_INTERFACE_(IPortFilterDMus, IUnknown)
827 DEFINE_ABSTRACT_UNKNOWN()
829 DEFINE_ABSTRACT_IRPTARGET()
831 STDMETHOD_(NTSTATUS, Init)(THIS_
832 IN PPORTDMUS Port)PURE;
834 STDMETHOD_(NTSTATUS, FreePin)(THIS_
835 IN struct IPortPinDMus* Pin)PURE;
837 STDMETHOD_(VOID, NotifyPins)(THIS) PURE;
840 typedef IPortFilterDMus *PPORTFILTERDMUS;
842 #define IMP_IPortFilterDMus \
844 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
845 IN PPORTDMUS Port); \
846 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
847 IN struct IPortPinDMus* Pin); \
848 STDMETHODIMP_(VOID) NotifyPins(THIS)
850 /*****************************************************************************
852 *****************************************************************************
856 #define INTERFACE IPortPinDMus
858 DECLARE_INTERFACE_(IPortPinDMus, IIrpTarget)
860 DEFINE_ABSTRACT_UNKNOWN()
862 DEFINE_ABSTRACT_IRPTARGET()
864 STDMETHOD_(NTSTATUS, Init)(THIS_
866 IN PPORTFILTERDMUS Filter,
867 IN KSPIN_CONNECT * ConnectDetails,
868 IN KSPIN_DESCRIPTOR * PinDescriptor,
869 IN PDEVICE_OBJECT DeviceObject) PURE;
871 STDMETHOD_(VOID, Notify)(THIS) PURE;
874 #define IMP_IPortPinDMus \
876 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
878 IN PPORTFILTERDMUS Filter, \
879 IN KSPIN_CONNECT * ConnectDetails, \
880 IN KSPIN_DESCRIPTOR * PinDescriptor, \
881 IN PDEVICE_OBJECT DeviceObject); \
882 STDMETHODIMP_(VOID) Notify(THIS)
884 typedef IPortPinDMus *PPORTPINDMUS;
886 /*****************************************************************************
888 *****************************************************************************
891 #define IMP_IDmaChannelEx \
892 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
893 IN ULONG BufferSize, \
894 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
896 STDMETHODIMP_(void) FreeBuffer(void); \
897 STDMETHODIMP_(ULONG) TransferCount(void); \
898 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
899 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
900 STDMETHODIMP_(ULONG) BufferSize(void); \
902 STDMETHODIMP_(void) SetBufferSize( \
903 IN ULONG BufferSize); \
905 STDMETHODIMP_(PVOID) SystemAddress(void); \
906 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress( \
907 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
908 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
910 STDMETHODIMP_(void) CopyTo( \
911 IN PVOID Destination, \
913 IN ULONG ByteCount); \
915 STDMETHODIMP_(void) CopyFrom( \
916 IN PVOID Destination, \
920 #define IMP_IDmaChannelSlaveEx \
922 STDMETHODIMP_(NTSTATUS) Start( \
924 IN BOOLEAN WriteToDevice); \
926 STDMETHODIMP_(NTSTATUS) Stop(void); \
927 STDMETHODIMP_(ULONG) ReadCounter(void); \
929 STDMETHODIMP_(NTSTATUS) WaitForTC( \
932 #define IMP_IDmaChannelInit\
933 IMP_IDmaChannelSlaveEx;\
934 STDMETHODIMP_(NTSTATUS) Init( \
935 IN PDEVICE_DESCRIPTION DeviceDescription, \
936 IN PDEVICE_OBJECT DeviceObject)
938 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \
939 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
940 IN ULONG BufferSize, \
941 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
943 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
944 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
945 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
946 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
947 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
949 STDMETHOD_(void, SetBufferSize)( THIS_ \
950 IN ULONG BufferSize) PURE; \
952 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
953 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_ \
954 IN PPHYSICAL_ADDRESS Address) PURE; \
955 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
957 STDMETHOD_(void, CopyTo)( THIS_ \
958 IN PVOID Destination, \
960 IN ULONG ByteCount) PURE; \
962 STDMETHOD_(void, CopyFrom)( THIS_ \
963 IN PVOID Destination, \
965 IN ULONG ByteCount) PURE;
968 #define INTERFACE IDmaChannelInit
970 DECLARE_INTERFACE_(IDmaChannelInit, IUnknown)
972 DEFINE_ABSTRACT_UNKNOWN()
973 DEFINE_ABSTRACT_DMACHANNEL_EX()
974 DEFINE_ABSTRACT_DMACHANNELSLAVE()
976 STDMETHOD_(NTSTATUS, Init)( THIS_
977 IN PDEVICE_DESCRIPTION DeviceDescription,
978 IN PDEVICE_OBJECT DeviceObject) PURE;
983 /*****************************************************************************
984 * IPortFilterTopology
985 *****************************************************************************
989 #define INTERFACE IPortFilterTopology
991 DECLARE_INTERFACE_(IPortFilterTopology, IIrpTarget)
993 DEFINE_ABSTRACT_UNKNOWN()
995 DEFINE_ABSTRACT_IRPTARGET()
997 STDMETHOD_(NTSTATUS, Init)(THIS_
998 IN PPORTTOPOLOGY Port)PURE;
1001 typedef IPortFilterTopology *PPORTFILTERTOPOLOGY;
1003 #define IMP_IPortFilterTopology \
1005 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
1006 IN PPORTTOPOLOGY Port)
1010 /*****************************************************************************
1011 * IPortWaveRTStreamInit
1012 *****************************************************************************
1016 #define INTERFACE IPortWaveRTStreamInit
1019 DECLARE_INTERFACE_(IPortWaveRTStreamInit, IUnknown)
1021 DEFINE_ABSTRACT_UNKNOWN()
1023 STDMETHOD_(PMDL, AllocatePagesForMdl)
1025 IN PHYSICAL_ADDRESS HighAddress,
1026 IN SIZE_T TotalBytes
1029 STDMETHOD_(PMDL, AllocateContiguousPagesForMdl)
1031 IN PHYSICAL_ADDRESS LowAddress,
1032 IN PHYSICAL_ADDRESS HighAddress,
1033 IN SIZE_T TotalBytes
1036 STDMETHOD_(PVOID, MapAllocatedPages)
1038 IN PMDL MemoryDescriptorList,
1039 IN MEMORY_CACHING_TYPE CacheType
1042 STDMETHOD_(VOID, UnmapAllocatedPages)
1044 IN PVOID BaseAddress,
1045 IN PMDL MemoryDescriptorList
1048 STDMETHOD_(VOID, FreePagesFromMdl)
1050 IN PMDL MemoryDescriptorList
1053 STDMETHOD_(ULONG, GetPhysicalPagesCount)
1055 IN PMDL MemoryDescriptorList
1058 STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress)
1060 IN PPHYSICAL_ADDRESS Address,
1061 IN PMDL MemoryDescriptorList,
1068 #define IMP_IPortWaveRTStreamInit \
1069 STDMETHODIMP_(PMDL) AllocatePagesForMdl \
1071 IN PHYSICAL_ADDRESS HighAddress, \
1072 IN SIZE_T TotalBytes \
1075 STDMETHODIMP_(PMDL) AllocateContiguousPagesForMdl \
1077 IN PHYSICAL_ADDRESS LowAddress, \
1078 IN PHYSICAL_ADDRESS HighAddress, \
1079 IN SIZE_T TotalBytes \
1082 STDMETHODIMP_(PVOID) MapAllocatedPages \
1084 IN PMDL MemoryDescriptorList, \
1085 IN MEMORY_CACHING_TYPE CacheType \
1088 STDMETHODIMP_(VOID) UnmapAllocatedPages \
1090 IN PVOID BaseAddress, \
1091 IN PMDL MemoryDescriptorList \
1094 STDMETHODIMP_(VOID) FreePagesFromMdl \
1096 IN PMDL MemoryDescriptorList \
1099 STDMETHODIMP_(ULONG) GetPhysicalPagesCount \
1101 IN PMDL MemoryDescriptorList \
1104 STDMETHODIMP_(PHYSICAL_ADDRESS) GetPhysicalPageAddress \
1106 IN PPHYSICAL_ADDRESS Address, \
1107 IN PMDL MemoryDescriptorList, \
1111 #ifndef IMP_IPortClsVersion
1113 #define IMP_IPortClsVersion \
1114 STDMETHODIMP_(DWORD) GetVersion(void);
1118 #ifdef IMP_IPortWaveRT
1119 #define IMP_IPortWaveRT IMP_IPort