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,
323 IN PKSDATAFORMAT DataFormat,
324 IN PDEVICE_OBJECT DeviceObject,
327 IN PVOID SilenceBuffer) PURE;
329 STDMETHOD_(NTSTATUS, AddMapping)(THIS_
331 OUT PULONG Data) PURE;
333 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
335 OUT PULONG BufferSize) PURE;
337 STDMETHOD_(VOID, UpdateMapping)(THIS_
338 IN ULONG BytesWritten) PURE;
340 STDMETHOD_(ULONG, NumMappings)(THIS) PURE;
342 STDMETHOD_(ULONG, NumData)(THIS) PURE;
344 STDMETHOD_(BOOL, MinimumDataAvailable)(THIS) PURE;
346 STDMETHOD_(BOOL, CancelBuffers)(THIS) PURE;
348 STDMETHOD_(VOID, UpdateFormat)(THIS_
349 IN PKSDATAFORMAT DataFormat) PURE;
351 STDMETHOD_(NTSTATUS, GetMappingWithTag)(THIS_
353 OUT PPHYSICAL_ADDRESS PhysicalAddress,
354 OUT PVOID *VirtualAddress,
355 OUT PULONG ByteCount,
356 OUT PULONG Flags) PURE;
358 STDMETHOD_(NTSTATUS, ReleaseMappingWithTag)(THIS_
361 STDMETHOD_(BOOL, HasLastMappingFailed)(THIS) PURE;
362 STDMETHOD_(ULONG, GetCurrentIrpOffset)(THIS) PURE;
363 STDMETHOD_(VOID, SetMinimumDataThreshold)(THIS_
364 IN ULONG MinimumDataThreshold) PURE;
365 STDMETHOD_(ULONG, GetMinimumDataThreshold)(THIS) PURE;
369 #define IMP_IIrpQueue \
370 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
371 IN KSPIN_CONNECT *ConnectDetails, \
372 IN PKSDATAFORMAT DataFormat, \
373 IN PDEVICE_OBJECT DeviceObject, \
374 IN ULONG FrameSize, \
375 IN ULONG Alignment, \
376 IN PVOID SilenceBuffer); \
378 STDMETHODIMP_(NTSTATUS) AddMapping(THIS_ \
382 STDMETHODIMP_(NTSTATUS) GetMapping(THIS_ \
383 OUT PUCHAR * Buffer, \
384 OUT PULONG BufferSize); \
386 STDMETHODIMP_(VOID) UpdateMapping(THIS_ \
387 IN ULONG BytesWritten); \
389 STDMETHODIMP_(ULONG) NumMappings(THIS); \
391 STDMETHODIMP_(ULONG) NumData(THIS); \
393 STDMETHODIMP_(BOOL) MinimumDataAvailable(THIS); \
395 STDMETHODIMP_(BOOL) CancelBuffers(THIS); \
397 STDMETHODIMP_(VOID) UpdateFormat(THIS_ \
398 IN PKSDATAFORMAT DataFormat); \
400 STDMETHODIMP_(NTSTATUS) GetMappingWithTag(THIS_ \
402 OUT PPHYSICAL_ADDRESS PhysicalAddress, \
403 OUT PVOID *VirtualAddress, \
404 OUT PULONG ByteCount, \
407 STDMETHODIMP_(NTSTATUS) ReleaseMappingWithTag( \
410 STDMETHODIMP_(BOOL) HasLastMappingFailed(THIS); \
411 STDMETHODIMP_(ULONG) GetCurrentIrpOffset(THIS); \
412 STDMETHODIMP_(VOID) SetMinimumDataThreshold( \
413 IN ULONG MinimumDataThreshold); \
414 STDMETHODIMP_(ULONG) GetMinimumDataThreshold(VOID)
416 /*****************************************************************************
418 *****************************************************************************
421 #define INTERFACE IKsWorkSink
423 DECLARE_INTERFACE_(IKsWorkSink, IUnknown)
425 DEFINE_ABSTRACT_UNKNOWN()
427 STDMETHOD_(NTSTATUS, Work)(THIS);
430 /*****************************************************************************
432 *****************************************************************************
435 #define INTERFACE IIrpStreamNotify
437 struct IRPSTREAMPOSITION;
439 DECLARE_INTERFACE_(IIrpStreamNotify, IUnknown)
441 DEFINE_ABSTRACT_UNKNOWN()
443 STDMETHOD_(NTSTATUS, IrpSubmitted)(THIS_
445 IN BOOLEAN WAIT)PURE;
447 STDMETHOD_(NTSTATUS, GetPosition)(THIS_
448 OUT struct IRPSTREAMPOSITION * Position)PURE;
451 /*****************************************************************************
453 *****************************************************************************
457 #define INTERFACE IKsShellTransport
459 #define DEFINE_ABSTRACT_IKSSHELLTRANSPORT() \
460 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
462 OUT IKsShellTransport ** Transport) PURE; \
464 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
465 IN IKsShellTransport * StartTransport, \
466 OUT IKsShellTransport ** EndTransport, \
467 IN KSPIN_DATAFLOW DataFlow)PURE; \
469 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
472 OUT IKsShellTransport ** EndTransport)PURE; \
474 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
476 OUT IKsShellTransport ** EndTransport)PURE;
479 DECLARE_INTERFACE_(IKsShellTransport, IUnknown)
481 DEFINE_ABSTRACT_UNKNOWN()
483 DEFINE_ABSTRACT_IKSSHELLTRANSPORT()
486 /*****************************************************************************
488 *****************************************************************************
490 struct IRPSTREAM_POSITION;
491 struct IRPSTREAMPACKETINFO;
493 #define DEFINE_ABSTRACT_IRPSTREAM() \
494 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
496 OUT IKsShellTransport ** Transport) PURE; \
498 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
499 IN IKsShellTransport * StartTransport, \
500 OUT IKsShellTransport ** EndTransport, \
501 IN KSPIN_DATAFLOW DataFlow)PURE; \
503 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
506 OUT IKsShellTransport ** EndTransport)PURE; \
508 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
510 OUT IKsShellTransport ** EndTransport)PURE; \
512 STDMETHOD_(NTSTATUS, GetPosition)(THIS_ \
513 IN OUT struct IRPSTREAM_POSITION * Position) PURE; \
515 STDMETHOD_(NTSTATUS, Init)(THIS_ \
517 KSPIN_CONNECT *ConnectDetails, \
518 PDEVICE_OBJECT DeviceObject, \
519 PDMA_ADAPTER DmaAdapter) PURE; \
521 STDMETHOD_(NTSTATUS, CancelAllIrps)(THIS_ \
524 STDMETHOD_(VOID, TerminatePacket)(THIS); \
526 STDMETHOD_(NTSTATUS, ChangeOptionsFlag)(THIS_ \
530 ULONG Unknown4)PURE; \
532 STDMETHOD_(NTSTATUS, GetPacketInfo)(THIS_ \
533 struct IRPSTREAMPACKETINFO * Info1, \
534 struct IRPSTREAMPACKETINFO * Info2)PURE; \
536 STDMETHOD_(NTSTATUS, SetPacketOffsets)(THIS_ \
538 ULONG Unknown2)PURE; \
540 STDMETHOD_(NTSTATUS, RegisterNotifySink)(THIS_ \
541 IN IIrpStreamNotify * NotifyStream)PURE;
546 #define INTERFACE IIrpStream
548 DECLARE_INTERFACE_(IIrpStream, IUnknown)
550 DEFINE_ABSTRACT_UNKNOWN()
552 DEFINE_ABSTRACT_IRPSTREAM()
556 /*****************************************************************************
558 *****************************************************************************
561 #define INTERFACE IIrpStreamPhysical
563 DECLARE_INTERFACE_(IIrpStreamPhysical, IIrpStream)
565 DEFINE_ABSTRACT_UNKNOWN()
567 DEFINE_ABSTRACT_IRPSTREAM()
569 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
571 OUT PPHYSICAL_ADDRESS PhysicalAddress,
572 OUT PVOID * VirtualAddress,
573 OUT PULONG ByteCount,
574 OUT PULONG Flags)PURE;
578 /*****************************************************************************
580 *****************************************************************************
583 #define INTERFACE IIrpStreamVirtual
585 DECLARE_INTERFACE_(IIrpStreamVirtual, IIrpStream)
587 DEFINE_ABSTRACT_UNKNOWN()
589 DEFINE_ABSTRACT_IRPSTREAM()
591 STDMETHOD_(NTSTATUS, GetLockedRegion)(THIS_
593 OUT PVOID * OutBuffer)PURE;
595 STDMETHOD_(NTSTATUS, Copy)(THIS_
599 OUT PVOID Result)PURE;
601 STDMETHOD_(NTSTATUS, Complete)(THIS_
605 STDMETHOD_(ULONG, GetIrpStreamPositionLock)(THIS);
608 /*****************************************************************************
610 *****************************************************************************
614 #define INTERFACE IPortFilterWavePci
616 DECLARE_INTERFACE_(IPortFilterWavePci, IIrpTarget)
618 DEFINE_ABSTRACT_UNKNOWN()
620 DEFINE_ABSTRACT_IRPTARGET()
622 STDMETHOD_(NTSTATUS, Init)(THIS_
623 IN PPORTWAVEPCI Port)PURE;
626 typedef IPortFilterWavePci *PPORTFILTERWAVEPCI;
628 #define IMP_IPortFilterPci \
630 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
631 IN PPORTWAVEPCI Port)
633 /*****************************************************************************
635 *****************************************************************************
639 #define INTERFACE IPortPinWavePci
641 DECLARE_INTERFACE_(IPortPinWavePci, IIrpTarget)
643 DEFINE_ABSTRACT_UNKNOWN()
645 DEFINE_ABSTRACT_IRPTARGET()
647 STDMETHOD_(NTSTATUS, Init)(THIS_
648 IN PPORTWAVEPCI Port,
649 IN PPORTFILTERWAVEPCI Filter,
650 IN KSPIN_CONNECT * ConnectDetails,
651 IN KSPIN_DESCRIPTOR * PinDescriptor,
652 IN PDEVICE_OBJECT DeviceObject) PURE;
654 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
655 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
658 #define IMP_IPortPinWavePci \
660 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
661 IN PPORTWAVEPCI Port, \
662 IN PPORTFILTERWAVEPCI Filter, \
663 IN KSPIN_CONNECT * ConnectDetails, \
664 IN KSPIN_DESCRIPTOR * PinDescriptor, \
665 IN PDEVICE_OBJECT DeviceObject); \
667 STDMETHODIMP_(PVOID) GetIrpStream(); \
668 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
672 typedef IPortPinWavePci *PPORTPINWAVEPCI;
675 #if (NTDDI_VERSION >= NTDDI_VISTA)
677 /*****************************************************************************
679 *****************************************************************************
683 #define INTERFACE IPortFilterWaveRT
686 typedef IPortWaveRT *PPORTWAVERT;
689 DECLARE_INTERFACE_(IPortFilterWaveRT, IIrpTarget)
691 DEFINE_ABSTRACT_UNKNOWN()
693 DEFINE_ABSTRACT_IRPTARGET()
695 STDMETHOD_(NTSTATUS, Init)(THIS_
696 IN PPORTWAVERT Port)PURE;
699 typedef IPortFilterWaveRT *PPORTFILTERWAVERT;
701 #define IMP_IPortFilterWaveRT \
703 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
707 /*****************************************************************************
709 *****************************************************************************
713 #define INTERFACE IPortPinWaveRT
715 DECLARE_INTERFACE_(IPortPinWaveRT, IIrpTarget)
717 DEFINE_ABSTRACT_UNKNOWN()
719 DEFINE_ABSTRACT_IRPTARGET()
721 STDMETHOD_(NTSTATUS, Init)(THIS_
723 IN PPORTFILTERWAVERT Filter,
724 IN KSPIN_CONNECT * ConnectDetails,
725 IN KSPIN_DESCRIPTOR * PinDescriptor,
726 IN PDEVICE_OBJECT DeviceObject) PURE;
729 typedef IPortPinWaveRT *PPORTPINWAVERT;
731 #define IMP_IPortPinWaveRT \
733 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
734 IN PPORTWAVERT Port, \
735 IN PPORTFILTERWAVERT Filter, \
736 IN KSPIN_CONNECT * ConnectDetails, \
737 IN KSPIN_DESCRIPTOR * PinDescriptor, \
738 IN PDEVICE_OBJECT DeviceObject)
743 /*****************************************************************************
744 * IPortFilterWaveCyclic
745 *****************************************************************************
749 #define INTERFACE IPortFilterWaveCyclic
751 struct IPortPinWaveCyclic;
753 DECLARE_INTERFACE_(IPortFilterWaveCyclic, IIrpTarget)
755 DEFINE_ABSTRACT_UNKNOWN()
757 DEFINE_ABSTRACT_IRPTARGET()
759 STDMETHOD_(NTSTATUS, Init)(THIS_
760 IN PPORTWAVECYCLIC Port)PURE;
762 STDMETHOD_(NTSTATUS, FreePin)(THIS_
763 IN struct IPortPinWaveCyclic* Pin)PURE;
766 typedef IPortFilterWaveCyclic *PPORTFILTERWAVECYCLIC;
768 #define IMP_IPortFilterWaveCyclic \
770 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
771 IN PPORTWAVECYCLIC Port); \
772 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
773 IN struct IPortPinWaveCyclic* Pin)
776 /*****************************************************************************
778 *****************************************************************************
782 #define INTERFACE IPortPinWaveCyclic
784 DECLARE_INTERFACE_(IPortPinWaveCyclic, IIrpTarget)
786 DEFINE_ABSTRACT_UNKNOWN()
788 DEFINE_ABSTRACT_IRPTARGET()
790 STDMETHOD_(NTSTATUS, Init)(THIS_
791 IN PPORTWAVECYCLIC Port,
792 IN PPORTFILTERWAVECYCLIC Filter,
793 IN KSPIN_CONNECT * ConnectDetails,
794 IN KSPIN_DESCRIPTOR * PinDescriptor) PURE;
796 STDMETHOD_(ULONG, GetCompletedPosition)(THIS) PURE;
797 STDMETHOD_(ULONG, GetCycleCount)(THIS) PURE;
798 STDMETHOD_(ULONG, GetDeviceBufferSize)(THIS) PURE;
799 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
800 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
803 typedef IPortPinWaveCyclic *PPORTPINWAVECYCLIC;
805 #define IMP_IPortPinWaveCyclic \
807 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
808 IN PPORTWAVECYCLIC Port, \
809 IN PPORTFILTERWAVECYCLIC Filter, \
810 IN KSPIN_CONNECT * ConnectDetails, \
811 IN KSPIN_DESCRIPTOR * PinDescriptor); \
812 STDMETHODIMP_(ULONG) GetCompletedPosition(THIS); \
813 STDMETHODIMP_(ULONG) GetCycleCount(THIS); \
814 STDMETHODIMP_(ULONG) GetDeviceBufferSize(THIS); \
815 STDMETHODIMP_(PVOID) GetIrpStream(THIS); \
816 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
819 /*****************************************************************************
821 *****************************************************************************
825 #define INTERFACE IPortFilterDMus
829 DECLARE_INTERFACE_(IPortFilterDMus, IUnknown)
831 DEFINE_ABSTRACT_UNKNOWN()
833 DEFINE_ABSTRACT_IRPTARGET()
835 STDMETHOD_(NTSTATUS, Init)(THIS_
836 IN PPORTDMUS Port)PURE;
838 STDMETHOD_(NTSTATUS, FreePin)(THIS_
839 IN struct IPortPinDMus* Pin)PURE;
841 STDMETHOD_(VOID, NotifyPins)(THIS) PURE;
844 typedef IPortFilterDMus *PPORTFILTERDMUS;
846 #define IMP_IPortFilterDMus \
848 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
849 IN PPORTDMUS Port); \
850 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
851 IN struct IPortPinDMus* Pin); \
852 STDMETHODIMP_(VOID) NotifyPins(THIS)
854 /*****************************************************************************
856 *****************************************************************************
860 #define INTERFACE IPortPinDMus
862 DECLARE_INTERFACE_(IPortPinDMus, IIrpTarget)
864 DEFINE_ABSTRACT_UNKNOWN()
866 DEFINE_ABSTRACT_IRPTARGET()
868 STDMETHOD_(NTSTATUS, Init)(THIS_
870 IN PPORTFILTERDMUS Filter,
871 IN KSPIN_CONNECT * ConnectDetails,
872 IN KSPIN_DESCRIPTOR * PinDescriptor,
873 IN PDEVICE_OBJECT DeviceObject) PURE;
875 STDMETHOD_(VOID, Notify)(THIS) PURE;
878 #define IMP_IPortPinDMus \
880 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
882 IN PPORTFILTERDMUS Filter, \
883 IN KSPIN_CONNECT * ConnectDetails, \
884 IN KSPIN_DESCRIPTOR * PinDescriptor, \
885 IN PDEVICE_OBJECT DeviceObject); \
886 STDMETHODIMP_(VOID) Notify(THIS)
888 typedef IPortPinDMus *PPORTPINDMUS;
890 /*****************************************************************************
892 *****************************************************************************
895 #define IMP_IDmaChannelEx \
896 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
897 IN ULONG BufferSize, \
898 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
900 STDMETHODIMP_(void) FreeBuffer(void); \
901 STDMETHODIMP_(ULONG) TransferCount(void); \
902 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
903 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
904 STDMETHODIMP_(ULONG) BufferSize(void); \
906 STDMETHODIMP_(void) SetBufferSize( \
907 IN ULONG BufferSize); \
909 STDMETHODIMP_(PVOID) SystemAddress(void); \
910 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress( \
911 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
912 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
914 STDMETHODIMP_(void) CopyTo( \
915 IN PVOID Destination, \
917 IN ULONG ByteCount); \
919 STDMETHODIMP_(void) CopyFrom( \
920 IN PVOID Destination, \
924 #define IMP_IDmaChannelSlaveEx \
926 STDMETHODIMP_(NTSTATUS) Start( \
928 IN BOOLEAN WriteToDevice); \
930 STDMETHODIMP_(NTSTATUS) Stop(void); \
931 STDMETHODIMP_(ULONG) ReadCounter(void); \
933 STDMETHODIMP_(NTSTATUS) WaitForTC( \
936 #define IMP_IDmaChannelInit\
937 IMP_IDmaChannelSlaveEx;\
938 STDMETHODIMP_(NTSTATUS) Init( \
939 IN PDEVICE_DESCRIPTION DeviceDescription, \
940 IN PDEVICE_OBJECT DeviceObject)
942 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \
943 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
944 IN ULONG BufferSize, \
945 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
947 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
948 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
949 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
950 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
951 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
953 STDMETHOD_(void, SetBufferSize)( THIS_ \
954 IN ULONG BufferSize) PURE; \
956 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
957 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_ \
958 IN PPHYSICAL_ADDRESS Address) PURE; \
959 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
961 STDMETHOD_(void, CopyTo)( THIS_ \
962 IN PVOID Destination, \
964 IN ULONG ByteCount) PURE; \
966 STDMETHOD_(void, CopyFrom)( THIS_ \
967 IN PVOID Destination, \
969 IN ULONG ByteCount) PURE;
972 #define INTERFACE IDmaChannelInit
974 DECLARE_INTERFACE_(IDmaChannelInit, IUnknown)
976 DEFINE_ABSTRACT_UNKNOWN()
977 DEFINE_ABSTRACT_DMACHANNEL_EX()
978 DEFINE_ABSTRACT_DMACHANNELSLAVE()
980 STDMETHOD_(NTSTATUS, Init)( THIS_
981 IN PDEVICE_DESCRIPTION DeviceDescription,
982 IN PDEVICE_OBJECT DeviceObject) PURE;
987 /*****************************************************************************
988 * IPortFilterTopology
989 *****************************************************************************
993 #define INTERFACE IPortFilterTopology
995 DECLARE_INTERFACE_(IPortFilterTopology, IIrpTarget)
997 DEFINE_ABSTRACT_UNKNOWN()
999 DEFINE_ABSTRACT_IRPTARGET()
1001 STDMETHOD_(NTSTATUS, Init)(THIS_
1002 IN PPORTTOPOLOGY Port)PURE;
1005 typedef IPortFilterTopology *PPORTFILTERTOPOLOGY;
1007 #define IMP_IPortFilterTopology \
1009 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
1010 IN PPORTTOPOLOGY Port)
1014 /*****************************************************************************
1015 * IPortWaveRTStreamInit
1016 *****************************************************************************
1020 #define INTERFACE IPortWaveRTStreamInit
1023 DECLARE_INTERFACE_(IPortWaveRTStreamInit, IUnknown)
1025 DEFINE_ABSTRACT_UNKNOWN()
1027 STDMETHOD_(PMDL, AllocatePagesForMdl)
1029 IN PHYSICAL_ADDRESS HighAddress,
1030 IN SIZE_T TotalBytes
1033 STDMETHOD_(PMDL, AllocateContiguousPagesForMdl)
1035 IN PHYSICAL_ADDRESS LowAddress,
1036 IN PHYSICAL_ADDRESS HighAddress,
1037 IN SIZE_T TotalBytes
1040 STDMETHOD_(PVOID, MapAllocatedPages)
1042 IN PMDL MemoryDescriptorList,
1043 IN MEMORY_CACHING_TYPE CacheType
1046 STDMETHOD_(VOID, UnmapAllocatedPages)
1048 IN PVOID BaseAddress,
1049 IN PMDL MemoryDescriptorList
1052 STDMETHOD_(VOID, FreePagesFromMdl)
1054 IN PMDL MemoryDescriptorList
1057 STDMETHOD_(ULONG, GetPhysicalPagesCount)
1059 IN PMDL MemoryDescriptorList
1062 STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress)
1064 IN PPHYSICAL_ADDRESS Address,
1065 IN PMDL MemoryDescriptorList,
1072 #define IMP_IPortWaveRTStreamInit \
1073 STDMETHODIMP_(PMDL) AllocatePagesForMdl \
1075 IN PHYSICAL_ADDRESS HighAddress, \
1076 IN SIZE_T TotalBytes \
1079 STDMETHODIMP_(PMDL) AllocateContiguousPagesForMdl \
1081 IN PHYSICAL_ADDRESS LowAddress, \
1082 IN PHYSICAL_ADDRESS HighAddress, \
1083 IN SIZE_T TotalBytes \
1086 STDMETHODIMP_(PVOID) MapAllocatedPages \
1088 IN PMDL MemoryDescriptorList, \
1089 IN MEMORY_CACHING_TYPE CacheType \
1092 STDMETHODIMP_(VOID) UnmapAllocatedPages \
1094 IN PVOID BaseAddress, \
1095 IN PMDL MemoryDescriptorList \
1098 STDMETHODIMP_(VOID) FreePagesFromMdl \
1100 IN PMDL MemoryDescriptorList \
1103 STDMETHODIMP_(ULONG) GetPhysicalPagesCount \
1105 IN PMDL MemoryDescriptorList \
1108 STDMETHODIMP_(PHYSICAL_ADDRESS) GetPhysicalPageAddress \
1110 IN PPHYSICAL_ADDRESS Address, \
1111 IN PMDL MemoryDescriptorList, \
1115 #ifndef IMP_IPortClsVersion
1117 #define IMP_IPortClsVersion \
1118 STDMETHODIMP_(DWORD) GetVersion(void);
1122 #ifdef IMP_IPortWaveRT
1123 #define IMP_IPortWaveRT IMP_IPort