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 KSPIN_CONNECT *ConnectDetails,
325 IN PVOID SilenceBuffer) PURE;
327 STDMETHOD_(NTSTATUS, AddMapping)(THIS_
329 OUT PULONG Data) PURE;
331 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
333 OUT PULONG BufferSize) PURE;
335 STDMETHOD_(VOID, UpdateMapping)(THIS_
336 IN ULONG BytesWritten) PURE;
338 STDMETHOD_(ULONG, NumData)(THIS) PURE;
340 STDMETHOD_(BOOL, CancelBuffers)(THIS) PURE;
342 STDMETHOD_(NTSTATUS, GetMappingWithTag)(THIS_
344 OUT PPHYSICAL_ADDRESS PhysicalAddress,
345 OUT PVOID *VirtualAddress,
346 OUT PULONG ByteCount,
347 OUT PULONG Flags) PURE;
349 STDMETHOD_(NTSTATUS, ReleaseMappingWithTag)(THIS_
352 STDMETHOD_(BOOLEAN, HasLastMappingFailed)(THIS) PURE;
353 STDMETHOD_(ULONG, GetCurrentIrpOffset)(THIS) PURE;
355 STDMETHOD_(BOOLEAN, GetAcquiredTagRange)(THIS_
357 IN PVOID * LastTag) PURE;
362 #define IMP_IIrpQueue \
363 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
364 IN KSPIN_CONNECT *ConnectDetails, \
365 IN ULONG FrameSize, \
366 IN ULONG Alignment, \
367 IN PVOID SilenceBuffer); \
369 STDMETHODIMP_(NTSTATUS) AddMapping(THIS_ \
373 STDMETHODIMP_(NTSTATUS) GetMapping(THIS_ \
374 OUT PUCHAR * Buffer, \
375 OUT PULONG BufferSize); \
377 STDMETHODIMP_(VOID) UpdateMapping(THIS_ \
378 IN ULONG BytesWritten); \
380 STDMETHODIMP_(ULONG) NumData(THIS); \
382 STDMETHODIMP_(BOOL) CancelBuffers(THIS); \
384 STDMETHODIMP_(NTSTATUS) GetMappingWithTag(THIS_ \
386 OUT PPHYSICAL_ADDRESS PhysicalAddress, \
387 OUT PVOID *VirtualAddress, \
388 OUT PULONG ByteCount, \
391 STDMETHODIMP_(NTSTATUS) ReleaseMappingWithTag( \
394 STDMETHODIMP_(BOOLEAN) HasLastMappingFailed(THIS); \
395 STDMETHODIMP_(ULONG) GetCurrentIrpOffset(THIS); \
396 STDMETHODIMP_(BOOLEAN) GetAcquiredTagRange(THIS_ \
397 IN PVOID * FirstTag, \
402 /*****************************************************************************
404 *****************************************************************************
407 #define INTERFACE IKsWorkSink
409 DECLARE_INTERFACE_(IKsWorkSink, IUnknown)
411 DEFINE_ABSTRACT_UNKNOWN()
413 STDMETHOD_(NTSTATUS, Work)(THIS);
416 /*****************************************************************************
418 *****************************************************************************
421 #define INTERFACE IIrpStreamNotify
423 struct IRPSTREAMPOSITION;
425 DECLARE_INTERFACE_(IIrpStreamNotify, IUnknown)
427 DEFINE_ABSTRACT_UNKNOWN()
429 STDMETHOD_(NTSTATUS, IrpSubmitted)(THIS_
431 IN BOOLEAN WAIT)PURE;
433 STDMETHOD_(NTSTATUS, GetPosition)(THIS_
434 OUT struct IRPSTREAMPOSITION * Position)PURE;
437 /*****************************************************************************
439 *****************************************************************************
443 #define INTERFACE IKsShellTransport
445 #define DEFINE_ABSTRACT_IKSSHELLTRANSPORT() \
446 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
448 OUT IKsShellTransport ** Transport) PURE; \
450 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
451 IN IKsShellTransport * StartTransport, \
452 OUT IKsShellTransport ** EndTransport, \
453 IN KSPIN_DATAFLOW DataFlow)PURE; \
455 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
458 OUT IKsShellTransport ** EndTransport)PURE; \
460 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
462 OUT IKsShellTransport ** EndTransport)PURE;
465 DECLARE_INTERFACE_(IKsShellTransport, IUnknown)
467 DEFINE_ABSTRACT_UNKNOWN()
469 DEFINE_ABSTRACT_IKSSHELLTRANSPORT()
472 /*****************************************************************************
474 *****************************************************************************
476 struct IRPSTREAM_POSITION;
477 struct IRPSTREAMPACKETINFO;
479 #define DEFINE_ABSTRACT_IRPSTREAM() \
480 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
482 OUT IKsShellTransport ** Transport) PURE; \
484 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
485 IN IKsShellTransport * StartTransport, \
486 OUT IKsShellTransport ** EndTransport, \
487 IN KSPIN_DATAFLOW DataFlow)PURE; \
489 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
492 OUT IKsShellTransport ** EndTransport)PURE; \
494 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
496 OUT IKsShellTransport ** EndTransport)PURE; \
498 STDMETHOD_(NTSTATUS, GetPosition)(THIS_ \
499 IN OUT struct IRPSTREAM_POSITION * Position) PURE; \
501 STDMETHOD_(NTSTATUS, Init)(THIS_ \
503 KSPIN_CONNECT *ConnectDetails, \
504 PDEVICE_OBJECT DeviceObject, \
505 PDMA_ADAPTER DmaAdapter) PURE; \
507 STDMETHOD_(NTSTATUS, CancelAllIrps)(THIS_ \
510 STDMETHOD_(VOID, TerminatePacket)(THIS); \
512 STDMETHOD_(NTSTATUS, ChangeOptionsFlag)(THIS_ \
516 ULONG Unknown4)PURE; \
518 STDMETHOD_(NTSTATUS, GetPacketInfo)(THIS_ \
519 struct IRPSTREAMPACKETINFO * Info1, \
520 struct IRPSTREAMPACKETINFO * Info2)PURE; \
522 STDMETHOD_(NTSTATUS, SetPacketOffsets)(THIS_ \
524 ULONG Unknown2)PURE; \
526 STDMETHOD_(NTSTATUS, RegisterNotifySink)(THIS_ \
527 IN IIrpStreamNotify * NotifyStream)PURE;
532 #define INTERFACE IIrpStream
534 DECLARE_INTERFACE_(IIrpStream, IUnknown)
536 DEFINE_ABSTRACT_UNKNOWN()
538 DEFINE_ABSTRACT_IRPSTREAM()
542 /*****************************************************************************
544 *****************************************************************************
547 #define INTERFACE IIrpStreamPhysical
549 DECLARE_INTERFACE_(IIrpStreamPhysical, IIrpStream)
551 DEFINE_ABSTRACT_UNKNOWN()
553 DEFINE_ABSTRACT_IRPSTREAM()
555 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
557 OUT PPHYSICAL_ADDRESS PhysicalAddress,
558 OUT PVOID * VirtualAddress,
559 OUT PULONG ByteCount,
560 OUT PULONG Flags)PURE;
564 /*****************************************************************************
566 *****************************************************************************
569 #define INTERFACE IIrpStreamVirtual
571 DECLARE_INTERFACE_(IIrpStreamVirtual, IIrpStream)
573 DEFINE_ABSTRACT_UNKNOWN()
575 DEFINE_ABSTRACT_IRPSTREAM()
577 STDMETHOD_(NTSTATUS, GetLockedRegion)(THIS_
579 OUT PVOID * OutBuffer)PURE;
581 STDMETHOD_(NTSTATUS, Copy)(THIS_
585 OUT PVOID Result)PURE;
587 STDMETHOD_(NTSTATUS, Complete)(THIS_
591 STDMETHOD_(ULONG, GetIrpStreamPositionLock)(THIS);
594 /*****************************************************************************
596 *****************************************************************************
600 #define INTERFACE IPortFilterWavePci
602 DECLARE_INTERFACE_(IPortFilterWavePci, IIrpTarget)
604 DEFINE_ABSTRACT_UNKNOWN()
606 DEFINE_ABSTRACT_IRPTARGET()
608 STDMETHOD_(NTSTATUS, Init)(THIS_
609 IN PPORTWAVEPCI Port)PURE;
612 typedef IPortFilterWavePci *PPORTFILTERWAVEPCI;
614 #define IMP_IPortFilterPci \
616 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
617 IN PPORTWAVEPCI Port)
619 /*****************************************************************************
621 *****************************************************************************
625 #define INTERFACE IPortPinWavePci
627 DECLARE_INTERFACE_(IPortPinWavePci, IIrpTarget)
629 DEFINE_ABSTRACT_UNKNOWN()
631 DEFINE_ABSTRACT_IRPTARGET()
633 STDMETHOD_(NTSTATUS, Init)(THIS_
634 IN PPORTWAVEPCI Port,
635 IN PPORTFILTERWAVEPCI Filter,
636 IN KSPIN_CONNECT * ConnectDetails,
637 IN KSPIN_DESCRIPTOR * PinDescriptor,
638 IN PDEVICE_OBJECT DeviceObject) PURE;
640 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
641 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
644 #define IMP_IPortPinWavePci \
646 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
647 IN PPORTWAVEPCI Port, \
648 IN PPORTFILTERWAVEPCI Filter, \
649 IN KSPIN_CONNECT * ConnectDetails, \
650 IN KSPIN_DESCRIPTOR * PinDescriptor, \
651 IN PDEVICE_OBJECT DeviceObject); \
653 STDMETHODIMP_(PVOID) GetIrpStream(); \
654 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
658 typedef IPortPinWavePci *PPORTPINWAVEPCI;
661 #if (NTDDI_VERSION >= NTDDI_VISTA)
663 /*****************************************************************************
665 *****************************************************************************
669 #define INTERFACE IPortFilterWaveRT
672 typedef IPortWaveRT *PPORTWAVERT;
675 DECLARE_INTERFACE_(IPortFilterWaveRT, IIrpTarget)
677 DEFINE_ABSTRACT_UNKNOWN()
679 DEFINE_ABSTRACT_IRPTARGET()
681 STDMETHOD_(NTSTATUS, Init)(THIS_
682 IN PPORTWAVERT Port)PURE;
685 typedef IPortFilterWaveRT *PPORTFILTERWAVERT;
687 #define IMP_IPortFilterWaveRT \
689 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
693 /*****************************************************************************
695 *****************************************************************************
699 #define INTERFACE IPortPinWaveRT
701 DECLARE_INTERFACE_(IPortPinWaveRT, IIrpTarget)
703 DEFINE_ABSTRACT_UNKNOWN()
705 DEFINE_ABSTRACT_IRPTARGET()
707 STDMETHOD_(NTSTATUS, Init)(THIS_
709 IN PPORTFILTERWAVERT Filter,
710 IN KSPIN_CONNECT * ConnectDetails,
711 IN KSPIN_DESCRIPTOR * PinDescriptor,
712 IN PDEVICE_OBJECT DeviceObject) PURE;
715 typedef IPortPinWaveRT *PPORTPINWAVERT;
717 #define IMP_IPortPinWaveRT \
719 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
720 IN PPORTWAVERT Port, \
721 IN PPORTFILTERWAVERT Filter, \
722 IN KSPIN_CONNECT * ConnectDetails, \
723 IN KSPIN_DESCRIPTOR * PinDescriptor, \
724 IN PDEVICE_OBJECT DeviceObject)
729 /*****************************************************************************
730 * IPortFilterWaveCyclic
731 *****************************************************************************
735 #define INTERFACE IPortFilterWaveCyclic
737 struct IPortPinWaveCyclic;
739 DECLARE_INTERFACE_(IPortFilterWaveCyclic, IIrpTarget)
741 DEFINE_ABSTRACT_UNKNOWN()
743 DEFINE_ABSTRACT_IRPTARGET()
745 STDMETHOD_(NTSTATUS, Init)(THIS_
746 IN PPORTWAVECYCLIC Port)PURE;
748 STDMETHOD_(NTSTATUS, FreePin)(THIS_
749 IN struct IPortPinWaveCyclic* Pin)PURE;
752 typedef IPortFilterWaveCyclic *PPORTFILTERWAVECYCLIC;
754 #define IMP_IPortFilterWaveCyclic \
756 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
757 IN PPORTWAVECYCLIC Port); \
758 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
759 IN struct IPortPinWaveCyclic* Pin)
762 /*****************************************************************************
764 *****************************************************************************
768 #define INTERFACE IPortPinWaveCyclic
770 DECLARE_INTERFACE_(IPortPinWaveCyclic, IIrpTarget)
772 DEFINE_ABSTRACT_UNKNOWN()
774 DEFINE_ABSTRACT_IRPTARGET()
776 STDMETHOD_(NTSTATUS, Init)(THIS_
777 IN PPORTWAVECYCLIC Port,
778 IN PPORTFILTERWAVECYCLIC Filter,
779 IN KSPIN_CONNECT * ConnectDetails,
780 IN KSPIN_DESCRIPTOR * PinDescriptor) PURE;
782 STDMETHOD_(ULONG, GetCompletedPosition)(THIS) PURE;
783 STDMETHOD_(ULONG, GetCycleCount)(THIS) PURE;
784 STDMETHOD_(ULONG, GetDeviceBufferSize)(THIS) PURE;
785 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
786 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
789 typedef IPortPinWaveCyclic *PPORTPINWAVECYCLIC;
791 #define IMP_IPortPinWaveCyclic \
793 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
794 IN PPORTWAVECYCLIC Port, \
795 IN PPORTFILTERWAVECYCLIC Filter, \
796 IN KSPIN_CONNECT * ConnectDetails, \
797 IN KSPIN_DESCRIPTOR * PinDescriptor); \
798 STDMETHODIMP_(ULONG) GetCompletedPosition(THIS); \
799 STDMETHODIMP_(ULONG) GetCycleCount(THIS); \
800 STDMETHODIMP_(ULONG) GetDeviceBufferSize(THIS); \
801 STDMETHODIMP_(PVOID) GetIrpStream(THIS); \
802 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
805 /*****************************************************************************
807 *****************************************************************************
811 #define INTERFACE IPortFilterDMus
815 DECLARE_INTERFACE_(IPortFilterDMus, IUnknown)
817 DEFINE_ABSTRACT_UNKNOWN()
819 DEFINE_ABSTRACT_IRPTARGET()
821 STDMETHOD_(NTSTATUS, Init)(THIS_
822 IN PPORTDMUS Port)PURE;
824 STDMETHOD_(NTSTATUS, FreePin)(THIS_
825 IN struct IPortPinDMus* Pin)PURE;
827 STDMETHOD_(VOID, NotifyPins)(THIS) PURE;
830 typedef IPortFilterDMus *PPORTFILTERDMUS;
832 #define IMP_IPortFilterDMus \
834 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
835 IN PPORTDMUS Port); \
836 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
837 IN struct IPortPinDMus* Pin); \
838 STDMETHODIMP_(VOID) NotifyPins(THIS)
840 /*****************************************************************************
842 *****************************************************************************
846 #define INTERFACE IPortPinDMus
848 DECLARE_INTERFACE_(IPortPinDMus, IIrpTarget)
850 DEFINE_ABSTRACT_UNKNOWN()
852 DEFINE_ABSTRACT_IRPTARGET()
854 STDMETHOD_(NTSTATUS, Init)(THIS_
856 IN PPORTFILTERDMUS Filter,
857 IN KSPIN_CONNECT * ConnectDetails,
858 IN KSPIN_DESCRIPTOR * PinDescriptor,
859 IN PDEVICE_OBJECT DeviceObject) PURE;
861 STDMETHOD_(VOID, Notify)(THIS) PURE;
864 #define IMP_IPortPinDMus \
866 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
868 IN PPORTFILTERDMUS Filter, \
869 IN KSPIN_CONNECT * ConnectDetails, \
870 IN KSPIN_DESCRIPTOR * PinDescriptor, \
871 IN PDEVICE_OBJECT DeviceObject); \
872 STDMETHODIMP_(VOID) Notify(THIS)
874 typedef IPortPinDMus *PPORTPINDMUS;
876 /*****************************************************************************
878 *****************************************************************************
881 #define IMP_IDmaChannelEx \
882 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
883 IN ULONG BufferSize, \
884 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
886 STDMETHODIMP_(void) FreeBuffer(void); \
887 STDMETHODIMP_(ULONG) TransferCount(void); \
888 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
889 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
890 STDMETHODIMP_(ULONG) BufferSize(void); \
892 STDMETHODIMP_(void) SetBufferSize( \
893 IN ULONG BufferSize); \
895 STDMETHODIMP_(PVOID) SystemAddress(void); \
896 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress( \
897 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
898 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
900 STDMETHODIMP_(void) CopyTo( \
901 IN PVOID Destination, \
903 IN ULONG ByteCount); \
905 STDMETHODIMP_(void) CopyFrom( \
906 IN PVOID Destination, \
910 #define IMP_IDmaChannelSlaveEx \
912 STDMETHODIMP_(NTSTATUS) Start( \
914 IN BOOLEAN WriteToDevice); \
916 STDMETHODIMP_(NTSTATUS) Stop(void); \
917 STDMETHODIMP_(ULONG) ReadCounter(void); \
919 STDMETHODIMP_(NTSTATUS) WaitForTC( \
922 #define IMP_IDmaChannelInit\
923 IMP_IDmaChannelSlaveEx;\
924 STDMETHODIMP_(NTSTATUS) Init( \
925 IN PDEVICE_DESCRIPTION DeviceDescription, \
926 IN PDEVICE_OBJECT DeviceObject)
928 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \
929 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
930 IN ULONG BufferSize, \
931 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
933 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
934 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
935 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
936 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
937 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
939 STDMETHOD_(void, SetBufferSize)( THIS_ \
940 IN ULONG BufferSize) PURE; \
942 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
943 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_ \
944 IN PPHYSICAL_ADDRESS Address) PURE; \
945 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
947 STDMETHOD_(void, CopyTo)( THIS_ \
948 IN PVOID Destination, \
950 IN ULONG ByteCount) PURE; \
952 STDMETHOD_(void, CopyFrom)( THIS_ \
953 IN PVOID Destination, \
955 IN ULONG ByteCount) PURE;
958 #define INTERFACE IDmaChannelInit
960 DECLARE_INTERFACE_(IDmaChannelInit, IUnknown)
962 DEFINE_ABSTRACT_UNKNOWN()
963 DEFINE_ABSTRACT_DMACHANNEL_EX()
964 DEFINE_ABSTRACT_DMACHANNELSLAVE()
966 STDMETHOD_(NTSTATUS, Init)( THIS_
967 IN PDEVICE_DESCRIPTION DeviceDescription,
968 IN PDEVICE_OBJECT DeviceObject) PURE;
973 /*****************************************************************************
974 * IPortFilterTopology
975 *****************************************************************************
979 #define INTERFACE IPortFilterTopology
981 DECLARE_INTERFACE_(IPortFilterTopology, IIrpTarget)
983 DEFINE_ABSTRACT_UNKNOWN()
985 DEFINE_ABSTRACT_IRPTARGET()
987 STDMETHOD_(NTSTATUS, Init)(THIS_
988 IN PPORTTOPOLOGY Port)PURE;
991 typedef IPortFilterTopology *PPORTFILTERTOPOLOGY;
993 #define IMP_IPortFilterTopology \
995 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
996 IN PPORTTOPOLOGY Port)
1000 /*****************************************************************************
1001 * IPortWaveRTStreamInit
1002 *****************************************************************************
1006 #define INTERFACE IPortWaveRTStreamInit
1009 DECLARE_INTERFACE_(IPortWaveRTStreamInit, IUnknown)
1011 DEFINE_ABSTRACT_UNKNOWN()
1013 STDMETHOD_(PMDL, AllocatePagesForMdl)
1015 IN PHYSICAL_ADDRESS HighAddress,
1016 IN SIZE_T TotalBytes
1019 STDMETHOD_(PMDL, AllocateContiguousPagesForMdl)
1021 IN PHYSICAL_ADDRESS LowAddress,
1022 IN PHYSICAL_ADDRESS HighAddress,
1023 IN SIZE_T TotalBytes
1026 STDMETHOD_(PVOID, MapAllocatedPages)
1028 IN PMDL MemoryDescriptorList,
1029 IN MEMORY_CACHING_TYPE CacheType
1032 STDMETHOD_(VOID, UnmapAllocatedPages)
1034 IN PVOID BaseAddress,
1035 IN PMDL MemoryDescriptorList
1038 STDMETHOD_(VOID, FreePagesFromMdl)
1040 IN PMDL MemoryDescriptorList
1043 STDMETHOD_(ULONG, GetPhysicalPagesCount)
1045 IN PMDL MemoryDescriptorList
1048 STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress)
1050 IN PPHYSICAL_ADDRESS Address,
1051 IN PMDL MemoryDescriptorList,
1058 #define IMP_IPortWaveRTStreamInit \
1059 STDMETHODIMP_(PMDL) AllocatePagesForMdl \
1061 IN PHYSICAL_ADDRESS HighAddress, \
1062 IN SIZE_T TotalBytes \
1065 STDMETHODIMP_(PMDL) AllocateContiguousPagesForMdl \
1067 IN PHYSICAL_ADDRESS LowAddress, \
1068 IN PHYSICAL_ADDRESS HighAddress, \
1069 IN SIZE_T TotalBytes \
1072 STDMETHODIMP_(PVOID) MapAllocatedPages \
1074 IN PMDL MemoryDescriptorList, \
1075 IN MEMORY_CACHING_TYPE CacheType \
1078 STDMETHODIMP_(VOID) UnmapAllocatedPages \
1080 IN PVOID BaseAddress, \
1081 IN PMDL MemoryDescriptorList \
1084 STDMETHODIMP_(VOID) FreePagesFromMdl \
1086 IN PMDL MemoryDescriptorList \
1089 STDMETHODIMP_(ULONG) GetPhysicalPagesCount \
1091 IN PMDL MemoryDescriptorList \
1094 STDMETHODIMP_(PHYSICAL_ADDRESS) GetPhysicalPageAddress \
1096 IN PPHYSICAL_ADDRESS Address, \
1097 IN PMDL MemoryDescriptorList, \
1101 #ifndef IMP_IPortClsVersion
1103 #define IMP_IPortClsVersion \
1104 STDMETHODIMP_(DWORD) GetVersion(void);
1108 #ifdef IMP_IPortWaveRT
1109 #define IMP_IPortWaveRT IMP_IPort