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 /*****************************************************************************
166 *****************************************************************************
169 struct IIrpTargetFactory;
173 ULONG MaxGlobalInstanceCount;
174 ULONG MaxFilterInstanceCount;
175 ULONG MinFilterInstanceCount;
176 ULONG CurrentPinInstanceCount;
178 }PIN_INSTANCE_INFO, *PPIN_INSTANCE_INFO;
183 ULONG PinDescriptorCount;
184 ULONG PinDescriptorSize;
185 KSPIN_DESCRIPTOR * KsPinDescriptor;
186 PIN_INSTANCE_INFO * Instances;
191 ULONG MaxKsPropertySetCount;
192 ULONG FreeKsPropertySetOffset;
193 PKSPROPERTY_SET Properties;
194 }KSPROPERTY_SET_LIST;
198 ULONG InterfaceCount;
200 KSPIN_FACTORY Factory;
201 KSPROPERTY_SET_LIST FilterPropertySet;
203 PPCFILTER_DESCRIPTOR DeviceDescriptor;
204 KSTOPOLOGY* Topology;
205 }SUBDEVICE_DESCRIPTOR, *PSUBDEVICE_DESCRIPTOR;
208 #define INTERFACE ISubdevice
210 #define DEFINE_ABSTRACT_ISUBDEVICE() \
211 STDMETHOD_(NTSTATUS, NewIrpTarget)(THIS_ \
212 OUT IIrpTarget **OutTarget, \
214 IN PUNKNOWN Unknown, \
215 IN POOL_TYPE PoolType, \
216 IN PDEVICE_OBJECT DeviceObject, \
218 IN KSOBJECT_CREATE *CreateObject) PURE; \
220 STDMETHOD_(NTSTATUS, ReleaseChildren)(THIS) PURE; \
222 STDMETHOD_(NTSTATUS, GetDescriptor)(THIS_ \
223 IN SUBDEVICE_DESCRIPTOR **) PURE; \
225 STDMETHOD_(NTSTATUS, DataRangeIntersection)(THIS_ \
227 IN PKSDATARANGE DataRange, \
228 IN PKSDATARANGE MatchingDataRange, \
229 IN ULONG OutputBufferLength, \
230 OUT PVOID ResultantFormat OPTIONAL, \
231 OUT PULONG ResultantFormatLength) PURE; \
233 STDMETHOD_(NTSTATUS, PowerChangeNotify)(THIS_ \
234 IN POWER_STATE PowerState) PURE; \
236 STDMETHOD_(NTSTATUS, PinCount)(THIS_ \
238 IN OUT PULONG FilterNecessary, \
239 IN OUT PULONG FilterCurrent, \
240 IN OUT PULONG FilterPossible, \
241 IN OUT PULONG GlobalCurrent, \
242 IN OUT PULONG GlobalPossible)PURE;
246 #define IMP_ISubdevice \
247 STDMETHODIMP_(NTSTATUS) NewIrpTarget( \
248 OUT IIrpTarget **OutTarget, \
250 IN PUNKNOWN Unknown, \
251 IN POOL_TYPE PoolType, \
252 IN PDEVICE_OBJECT DeviceObject, \
254 IN KSOBJECT_CREATE *CreateObject); \
256 STDMETHODIMP_(NTSTATUS) ReleaseChildren(THIS); \
258 STDMETHODIMP_(NTSTATUS) GetDescriptor(THIS_ \
259 IN SUBDEVICE_DESCRIPTOR **); \
261 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
263 IN PKSDATARANGE DataRange, \
264 IN PKSDATARANGE MatchingDataRange, \
265 IN ULONG OutputBufferLength, \
266 OUT PVOID ResultantFormat OPTIONAL, \
267 OUT PULONG ResultantFormatLength); \
269 STDMETHODIMP_(NTSTATUS) PowerChangeNotify( \
270 IN POWER_STATE PowerState); \
272 STDMETHODIMP_(NTSTATUS) PinCount( \
274 IN OUT PULONG FilterNecessary, \
275 IN OUT PULONG FilterCurrent, \
276 IN OUT PULONG FilterPossible, \
277 IN OUT PULONG GlobalCurrent, \
278 IN OUT PULONG GlobalPossible)
281 DECLARE_INTERFACE_(ISubdevice, IUnknown)
283 DEFINE_ABSTRACT_UNKNOWN()
284 DEFINE_ABSTRACT_ISUBDEVICE()
287 typedef ISubdevice *PSUBDEVICE;
289 /*****************************************************************************
291 *****************************************************************************
295 #define INTERFACE IIrpQueue
297 DECLARE_INTERFACE_(IIrpQueue, IUnknown)
299 DEFINE_ABSTRACT_UNKNOWN()
301 STDMETHOD_(NTSTATUS, Init)(THIS_
302 IN KSPIN_CONNECT *ConnectDetails,
303 IN PKSDATAFORMAT DataFormat,
304 IN PDEVICE_OBJECT DeviceObject,
307 IN PVOID SilenceBuffer);
309 STDMETHOD_(NTSTATUS, AddMapping)(THIS_
314 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
316 OUT PULONG BufferSize);
318 STDMETHOD_(VOID, UpdateMapping)(THIS_
319 IN ULONG BytesWritten);
321 STDMETHOD_(ULONG, NumMappings)(THIS);
323 STDMETHOD_(ULONG, NumData)(THIS);
325 STDMETHOD_(BOOL, MinimumDataAvailable)(THIS);
327 STDMETHOD_(BOOL, CancelBuffers)(THIS);
329 STDMETHOD_(VOID, UpdateFormat)(THIS_
330 IN PKSDATAFORMAT DataFormat);
332 STDMETHOD_(NTSTATUS, GetMappingWithTag)(THIS_
334 OUT PPHYSICAL_ADDRESS PhysicalAddress,
335 OUT PVOID *VirtualAddress,
336 OUT PULONG ByteCount,
339 STDMETHOD_(NTSTATUS, ReleaseMappingWithTag)(THIS_
342 STDMETHOD_(BOOL, HasLastMappingFailed)(THIS);
343 STDMETHOD_(VOID, PrintQueueStatus)(THIS);
344 STDMETHOD_(VOID, SetMinimumDataThreshold)(THIS_
345 IN ULONG MinimumDataThreshold);
346 STDMETHOD_(ULONG, GetMinimumDataThreshold)(THIS);
350 #define IMP_IIrpQueue \
351 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
352 IN KSPIN_CONNECT *ConnectDetails, \
353 IN PKSDATAFORMAT DataFormat, \
354 IN PDEVICE_OBJECT DeviceObject, \
355 IN ULONG FrameSize, \
356 IN ULONG Alignment, \
357 IN PVOID SilenceBuffer); \
359 STDMETHODIMP_(NTSTATUS) AddMapping(THIS_ \
361 IN ULONG BufferSize, \
364 STDMETHODIMP_(NTSTATUS) GetMapping(THIS_ \
365 OUT PUCHAR * Buffer, \
366 OUT PULONG BufferSize); \
368 STDMETHODIMP_(VOID) UpdateMapping(THIS_ \
369 IN ULONG BytesWritten); \
371 STDMETHODIMP_(ULONG) NumMappings(THIS); \
373 STDMETHODIMP_(ULONG) NumData(THIS); \
375 STDMETHODIMP_(BOOL) MinimumDataAvailable(THIS); \
377 STDMETHODIMP_(BOOL) CancelBuffers(THIS); \
379 STDMETHODIMP_(VOID) UpdateFormat(THIS_ \
380 IN PKSDATAFORMAT DataFormat); \
382 STDMETHODIMP_(NTSTATUS) GetMappingWithTag(THIS_ \
384 OUT PPHYSICAL_ADDRESS PhysicalAddress, \
385 OUT PVOID *VirtualAddress, \
386 OUT PULONG ByteCount, \
389 STDMETHODIMP_(NTSTATUS) ReleaseMappingWithTag( \
392 STDMETHODIMP_(BOOL) HasLastMappingFailed(THIS); \
393 STDMETHODIMP_(VOID) PrintQueueStatus(THIS); \
394 STDMETHODIMP_(VOID) SetMinimumDataThreshold( \
395 IN ULONG MinimumDataThreshold); \
396 STDMETHODIMP_(ULONG) GetMinimumDataThreshold(VOID)
398 /*****************************************************************************
400 *****************************************************************************
403 #define INTERFACE IKsWorkSink
405 DECLARE_INTERFACE_(IKsWorkSink, IUnknown)
407 DEFINE_ABSTRACT_UNKNOWN()
409 STDMETHOD_(NTSTATUS, Work)(THIS);
412 /*****************************************************************************
414 *****************************************************************************
417 #define INTERFACE IIrpStreamNotify
419 struct IRPSTREAMPOSITION;
421 DECLARE_INTERFACE_(IIrpStreamNotify, IUnknown)
423 DEFINE_ABSTRACT_UNKNOWN()
425 STDMETHOD_(NTSTATUS, IrpSubmitted)(THIS_
427 IN BOOLEAN WAIT)PURE;
429 STDMETHOD_(NTSTATUS, GetPosition)(THIS_
430 OUT struct IRPSTREAMPOSITION * Position)PURE;
433 /*****************************************************************************
435 *****************************************************************************
439 #define INTERFACE IKsShellTransport
441 #define DEFINE_ABSTRACT_IKSSHELLTRANSPORT() \
442 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
444 OUT IKsShellTransport ** Transport) PURE; \
446 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
447 IN IKsShellTransport * StartTransport, \
448 OUT IKsShellTransport ** EndTransport, \
449 IN KSPIN_DATAFLOW DataFlow)PURE; \
451 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
454 OUT IKsShellTransport ** EndTransport)PURE; \
456 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
458 OUT IKsShellTransport ** EndTransport)PURE;
461 DECLARE_INTERFACE_(IKsShellTransport, IUnknown)
463 DEFINE_ABSTRACT_UNKNOWN()
465 DEFINE_ABSTRACT_IKSSHELLTRANSPORT()
468 /*****************************************************************************
470 *****************************************************************************
472 struct IRPSTREAM_POSITION;
473 struct IRPSTREAMPACKETINFO;
475 #define DEFINE_ABSTRACT_IRPSTREAM() \
476 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
478 OUT IKsShellTransport ** Transport) PURE; \
480 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
481 IN IKsShellTransport * StartTransport, \
482 OUT IKsShellTransport ** EndTransport, \
483 IN KSPIN_DATAFLOW DataFlow)PURE; \
485 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
488 OUT IKsShellTransport ** EndTransport)PURE; \
490 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
492 OUT IKsShellTransport ** EndTransport)PURE; \
494 STDMETHOD_(NTSTATUS, GetPosition)(THIS_ \
495 IN OUT struct IRPSTREAM_POSITION * Position) PURE; \
497 STDMETHOD_(NTSTATUS, Init)(THIS_ \
499 KSPIN_CONNECT *ConnectDetails, \
500 PDEVICE_OBJECT DeviceObject, \
501 PDMA_ADAPTER DmaAdapter) PURE; \
503 STDMETHOD_(NTSTATUS, CancelAllIrps)(THIS_ \
506 STDMETHOD_(VOID, TerminatePacket)(THIS); \
508 STDMETHOD_(NTSTATUS, ChangeOptionsFlag)(THIS_ \
512 ULONG Unknown4)PURE; \
514 STDMETHOD_(NTSTATUS, GetPacketInfo)(THIS_ \
515 struct IRPSTREAMPACKETINFO * Info1, \
516 struct IRPSTREAMPACKETINFO * Info2)PURE; \
518 STDMETHOD_(NTSTATUS, SetPacketOffsets)(THIS_ \
520 ULONG Unknown2)PURE; \
522 STDMETHOD_(NTSTATUS, RegisterNotifySink)(THIS_ \
523 IN IIrpStreamNotify * NotifyStream)PURE;
528 #define INTERFACE IIrpStream
530 DECLARE_INTERFACE_(IIrpStream, IUnknown)
532 DEFINE_ABSTRACT_UNKNOWN()
534 DEFINE_ABSTRACT_IRPSTREAM()
538 /*****************************************************************************
540 *****************************************************************************
543 #define INTERFACE IIrpStreamPhysical
545 DECLARE_INTERFACE_(IIrpStreamPhysical, IIrpStream)
547 DEFINE_ABSTRACT_UNKNOWN()
549 DEFINE_ABSTRACT_IRPSTREAM()
551 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
553 OUT PPHYSICAL_ADDRESS PhysicalAddress,
554 OUT PVOID * VirtualAddress,
555 OUT PULONG ByteCount,
556 OUT PULONG Flags)PURE;
560 /*****************************************************************************
562 *****************************************************************************
565 #define INTERFACE IIrpStreamVirtual
567 DECLARE_INTERFACE_(IIrpStreamVirtual, IIrpStream)
569 DEFINE_ABSTRACT_UNKNOWN()
571 DEFINE_ABSTRACT_IRPSTREAM()
573 STDMETHOD_(NTSTATUS, GetLockedRegion)(THIS_
575 OUT PVOID * OutBuffer)PURE;
577 STDMETHOD_(NTSTATUS, Copy)(THIS_
581 OUT PVOID Result)PURE;
583 STDMETHOD_(NTSTATUS, Complete)(THIS_
587 STDMETHOD_(ULONG, GetIrpStreamPositionLock)(THIS);
590 /*****************************************************************************
592 *****************************************************************************
596 #define INTERFACE IPortFilterWavePci
598 DECLARE_INTERFACE_(IPortFilterWavePci, IIrpTarget)
600 DEFINE_ABSTRACT_UNKNOWN()
602 DEFINE_ABSTRACT_IRPTARGET()
604 STDMETHOD_(NTSTATUS, Init)(THIS_
605 IN PPORTWAVEPCI Port)PURE;
608 typedef IPortFilterWavePci *PPORTFILTERWAVEPCI;
610 #define IMP_IPortFilterPci \
612 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
613 IN PPORTWAVEPCI Port)
615 /*****************************************************************************
617 *****************************************************************************
621 #define INTERFACE IPortPinWavePci
623 DECLARE_INTERFACE_(IPortPinWavePci, IIrpTarget)
625 DEFINE_ABSTRACT_UNKNOWN()
627 DEFINE_ABSTRACT_IRPTARGET()
629 STDMETHOD_(NTSTATUS, Init)(THIS_
630 IN PPORTWAVEPCI Port,
631 IN PPORTFILTERWAVEPCI Filter,
632 IN KSPIN_CONNECT * ConnectDetails,
633 IN KSPIN_DESCRIPTOR * PinDescriptor,
634 IN PDEVICE_OBJECT DeviceObject) PURE;
636 STDMETHOD_(PVOID, GetIrpStream)(THIS);
637 STDMETHOD_(PMINIPORT, GetMiniport)(THIS);
640 #define IMP_IPortPinWavePci \
642 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
643 IN PPORTWAVEPCI Port, \
644 IN PPORTFILTERWAVEPCI Filter, \
645 IN KSPIN_CONNECT * ConnectDetails, \
646 IN KSPIN_DESCRIPTOR * PinDescriptor, \
647 IN PDEVICE_OBJECT DeviceObject); \
649 STDMETHODIMP_(PVOID) GetIrpStream(THIS); \
650 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
654 typedef IPortPinWavePci *PPORTPINWAVEPCI;
657 #if (NTDDI_VERSION >= NTDDI_VISTA)
659 /*****************************************************************************
661 *****************************************************************************
665 #define INTERFACE IPortFilterWaveRT
667 DECLARE_INTERFACE_(IPortFilterWaveRT, IIrpTarget)
669 DEFINE_ABSTRACT_UNKNOWN()
671 DEFINE_ABSTRACT_IRPTARGET()
673 STDMETHOD_(NTSTATUS, Init)(THIS_
674 IN PPORTWAVERT Port)PURE;
677 typedef IPortFilterWaveRT *PPORTFILTERWAVERT;
679 #define IMP_IPortFilterWaveRT \
681 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
685 /*****************************************************************************
687 *****************************************************************************
691 #define INTERFACE IPortPinWaveRT
693 DECLARE_INTERFACE_(IPortPinWaveRT, IIrpTarget)
695 DEFINE_ABSTRACT_UNKNOWN()
697 DEFINE_ABSTRACT_IRPTARGET()
699 STDMETHOD_(NTSTATUS, Init)(THIS_
701 IN PPORTFILTERWAVERT Filter,
702 IN KSPIN_CONNECT * ConnectDetails,
703 IN KSPIN_DESCRIPTOR * PinDescriptor,
704 IN PDEVICE_OBJECT DeviceObject) PURE;
707 typedef IPortPinWaveRT *PPORTPINWAVERT;
709 #define IMP_IPortPinWaveRT \
711 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
712 IN PPORTWAVERT Port, \
713 IN PPORTFILTERWAVERT Filter, \
714 IN KSPIN_CONNECT * ConnectDetails, \
715 IN KSPIN_DESCRIPTOR * PinDescriptor, \
716 IN PDEVICE_OBJECT DeviceObject)
721 /*****************************************************************************
722 * IPortFilterWaveCyclic
723 *****************************************************************************
727 #define INTERFACE IPortFilterWaveCyclic
729 struct IPortPinWaveCyclic;
731 DECLARE_INTERFACE_(IPortFilterWaveCyclic, IIrpTarget)
733 DEFINE_ABSTRACT_UNKNOWN()
735 DEFINE_ABSTRACT_IRPTARGET()
737 STDMETHOD_(NTSTATUS, Init)(THIS_
738 IN PPORTWAVECYCLIC Port)PURE;
740 STDMETHOD_(NTSTATUS, FreePin)(THIS_
741 IN struct IPortPinWaveCyclic* Pin)PURE;
744 typedef IPortFilterWaveCyclic *PPORTFILTERWAVECYCLIC;
746 #define IMP_IPortFilterWaveCyclic \
748 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
749 IN PPORTWAVECYCLIC Port); \
750 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
751 IN struct IPortPinWaveCyclic* Pin)
754 /*****************************************************************************
756 *****************************************************************************
760 #define INTERFACE IPortPinWaveCyclic
762 DECLARE_INTERFACE_(IPortPinWaveCyclic, IIrpTarget)
764 DEFINE_ABSTRACT_UNKNOWN()
766 DEFINE_ABSTRACT_IRPTARGET()
768 STDMETHOD_(NTSTATUS, Init)(THIS_
769 IN PPORTWAVECYCLIC Port,
770 IN PPORTFILTERWAVECYCLIC Filter,
771 IN KSPIN_CONNECT * ConnectDetails,
772 IN KSPIN_DESCRIPTOR * PinDescriptor) PURE;
774 STDMETHOD_(ULONG, GetCompletedPosition)(THIS);
775 STDMETHOD_(ULONG, GetCycleCount)(THIS);
776 STDMETHOD_(ULONG, GetDeviceBufferSize)(THIS);
777 STDMETHOD_(PVOID, GetIrpStream)(THIS);
778 STDMETHOD_(PMINIPORT, GetMiniport)(THIS);
781 #define IMP_IPortPinWaveCyclic \
783 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
784 IN PPORTWAVECYCLIC Port, \
785 IN PPORTFILTERWAVECYCLIC Filter, \
786 IN KSPIN_CONNECT * ConnectDetails, \
787 IN KSPIN_DESCRIPTOR * PinDescriptor); \
788 STDMETHODIMP_(ULONG) GetCompletedPosition(THIS); \
789 STDMETHODIMP_(ULONG) GetCycleCount(THIS); \
790 STDMETHODIMP_(ULONG) GetDeviceBufferSize(THIS); \
791 STDMETHODIMP_(PVOID) GetIrpStream(THIS); \
792 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
795 /*****************************************************************************
797 *****************************************************************************
801 #define INTERFACE IPortFilterDMus
805 DECLARE_INTERFACE_(IPortFilterDMus, IUnknown)
807 DEFINE_ABSTRACT_UNKNOWN()
809 DEFINE_ABSTRACT_IRPTARGET()
811 STDMETHOD_(NTSTATUS, Init)(THIS_
812 IN PPORTDMUS Port)PURE;
814 STDMETHOD_(NTSTATUS, FreePin)(THIS_
815 IN struct IPortPinDMus* Pin)PURE;
817 STDMETHOD_(VOID, NotifyPins)(THIS);
820 typedef IPortFilterDMus *PPORTFILTERDMUS;
822 #define IMP_IPortFilterDMus \
824 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
825 IN PPORTDMUS Port); \
826 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
827 IN struct IPortPinDMus* Pin); \
828 STDMETHODIMP_(VOID) NotifyPins(THIS)
830 /*****************************************************************************
832 *****************************************************************************
836 #define INTERFACE IPortPinDMus
838 DECLARE_INTERFACE_(IPortPinDMus, IIrpTarget)
840 DEFINE_ABSTRACT_UNKNOWN()
842 DEFINE_ABSTRACT_IRPTARGET()
844 STDMETHOD_(NTSTATUS, Init)(THIS_
846 IN PPORTFILTERDMUS Filter,
847 IN KSPIN_CONNECT * ConnectDetails,
848 IN KSPIN_DESCRIPTOR * PinDescriptor,
849 IN PDEVICE_OBJECT DeviceObject) PURE;
851 STDMETHOD_(VOID, Notify)(THIS);
854 #define IMP_IPortPinDMus \
856 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
858 IN PPORTFILTERDMUS Filter, \
859 IN KSPIN_CONNECT * ConnectDetails, \
860 IN KSPIN_DESCRIPTOR * PinDescriptor, \
861 IN PDEVICE_OBJECT DeviceObject); \
862 STDMETHODIMP_(VOID) Notify(THIS)
864 typedef IPortPinDMus *PPORTPINDMUS;
866 /*****************************************************************************
868 *****************************************************************************
872 #define INTERFACE IDmaChannelInit
874 DECLARE_INTERFACE_(IDmaChannelInit, IUnknown)
876 DEFINE_ABSTRACT_UNKNOWN()
877 DEFINE_ABSTRACT_DMACHANNEL()
878 DEFINE_ABSTRACT_DMACHANNELSLAVE()
880 STDMETHOD_(NTSTATUS, Init)( THIS_
881 IN PDEVICE_DESCRIPTION DeviceDescription,
882 IN PDEVICE_OBJECT DeviceObject) PURE;
887 #define IMP_IDmaChannelInit\
888 IMP_IDmaChannelSlave;\
889 STDMETHODIMP_(NTSTATUS) Init( \
890 IN PDEVICE_DESCRIPTION DeviceDescription, \
891 IN PDEVICE_OBJECT DeviceObject)
896 /*****************************************************************************
897 * IPortFilterTopology
898 *****************************************************************************
902 #define INTERFACE IPortFilterTopology
904 DECLARE_INTERFACE_(IPortFilterTopology, IIrpTarget)
906 DEFINE_ABSTRACT_UNKNOWN()
908 DEFINE_ABSTRACT_IRPTARGET()
910 STDMETHOD_(NTSTATUS, Init)(THIS_
911 IN PPORTTOPOLOGY Port)PURE;
914 typedef IPortFilterTopology *PPORTFILTERTOPOLOGY;
916 #define IMP_IPortFilterTopology \
918 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
919 IN PPORTTOPOLOGY Port)
923 /*****************************************************************************
924 * IPortWaveRTStreamInit
925 *****************************************************************************
929 #define INTERFACE IPortWaveRTStreamInit
932 DECLARE_INTERFACE_(IPortWaveRTStreamInit, IUnknown)
934 DEFINE_ABSTRACT_UNKNOWN()
936 STDMETHOD_(PMDL, AllocatePagesForMdl)
938 IN PHYSICAL_ADDRESS HighAddress,
942 STDMETHOD_(PMDL, AllocateContiguousPagesForMdl)
944 IN PHYSICAL_ADDRESS LowAddress,
945 IN PHYSICAL_ADDRESS HighAddress,
949 STDMETHOD_(PVOID, MapAllocatedPages)
951 IN PMDL MemoryDescriptorList,
952 IN MEMORY_CACHING_TYPE CacheType
955 STDMETHOD_(VOID, UnmapAllocatedPages)
957 IN PVOID BaseAddress,
958 IN PMDL MemoryDescriptorList
961 STDMETHOD_(VOID, FreePagesFromMdl)
963 IN PMDL MemoryDescriptorList
966 STDMETHOD_(ULONG, GetPhysicalPagesCount)
968 IN PMDL MemoryDescriptorList
971 STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress)
973 IN PPHYSICAL_ADDRESS Address,
974 IN PMDL MemoryDescriptorList,
981 #define IMP_IPortWaveRTStreamInit \
982 STDMETHODIMP_(PMDL) AllocatePagesForMdl \
984 IN PHYSICAL_ADDRESS HighAddress, \
985 IN SIZE_T TotalBytes \
988 STDMETHODIMP_(PMDL) AllocateContiguousPagesForMdl \
990 IN PHYSICAL_ADDRESS LowAddress, \
991 IN PHYSICAL_ADDRESS HighAddress, \
992 IN SIZE_T TotalBytes \
995 STDMETHODIMP_(PVOID) MapAllocatedPages \
997 IN PMDL MemoryDescriptorList, \
998 IN MEMORY_CACHING_TYPE CacheType \
1001 STDMETHODIMP_(VOID) UnmapAllocatedPages \
1003 IN PVOID BaseAddress, \
1004 IN PMDL MemoryDescriptorList \
1007 STDMETHODIMP_(VOID) FreePagesFromMdl \
1009 IN PMDL MemoryDescriptorList \
1012 STDMETHODIMP_(ULONG) GetPhysicalPagesCount \
1014 IN PMDL MemoryDescriptorList \
1017 STDMETHODIMP_(PHYSICAL_ADDRESS) GetPhysicalPageAddress \
1019 IN PPHYSICAL_ADDRESS Address, \
1020 IN PMDL MemoryDescriptorList, \