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;
212 PPCFILTER_DESCRIPTOR DeviceDescriptor;
213 KSTOPOLOGY* Topology;
214 LIST_ENTRY SymbolicLinkList;
215 LIST_ENTRY PhysicalConnectionList;
216 UNICODE_STRING RefString;
217 PUNKNOWN UnknownMiniport;
218 PUNKNOWN UnknownStream;
220 }SUBDEVICE_DESCRIPTOR, *PSUBDEVICE_DESCRIPTOR;
223 #define INTERFACE ISubdevice
225 #define DEFINE_ABSTRACT_ISUBDEVICE() \
226 STDMETHOD_(NTSTATUS, NewIrpTarget)(THIS_ \
227 OUT IIrpTarget **OutTarget, \
229 IN PUNKNOWN Unknown, \
230 IN POOL_TYPE PoolType, \
231 IN PDEVICE_OBJECT DeviceObject, \
233 IN KSOBJECT_CREATE *CreateObject) PURE; \
235 STDMETHOD_(NTSTATUS, ReleaseChildren)(THIS) PURE; \
237 STDMETHOD_(NTSTATUS, GetDescriptor)(THIS_ \
238 IN SUBDEVICE_DESCRIPTOR **) PURE; \
240 STDMETHOD_(NTSTATUS, DataRangeIntersection)(THIS_ \
242 IN PKSDATARANGE DataRange, \
243 IN PKSDATARANGE MatchingDataRange, \
244 IN ULONG OutputBufferLength, \
245 OUT PVOID ResultantFormat OPTIONAL, \
246 OUT PULONG ResultantFormatLength) PURE; \
248 STDMETHOD_(NTSTATUS, PowerChangeNotify)(THIS_ \
249 IN POWER_STATE PowerState) PURE; \
251 STDMETHOD_(NTSTATUS, PinCount)(THIS_ \
253 IN OUT PULONG FilterNecessary, \
254 IN OUT PULONG FilterCurrent, \
255 IN OUT PULONG FilterPossible, \
256 IN OUT PULONG GlobalCurrent, \
257 IN OUT PULONG GlobalPossible)PURE;
261 #define IMP_ISubdevice \
262 STDMETHODIMP_(NTSTATUS) NewIrpTarget( \
263 OUT IIrpTarget **OutTarget, \
265 IN PUNKNOWN Unknown, \
266 IN POOL_TYPE PoolType, \
267 IN PDEVICE_OBJECT DeviceObject, \
269 IN KSOBJECT_CREATE *CreateObject); \
271 STDMETHODIMP_(NTSTATUS) ReleaseChildren(THIS); \
273 STDMETHODIMP_(NTSTATUS) GetDescriptor(THIS_ \
274 IN SUBDEVICE_DESCRIPTOR **); \
276 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
278 IN PKSDATARANGE DataRange, \
279 IN PKSDATARANGE MatchingDataRange, \
280 IN ULONG OutputBufferLength, \
281 OUT PVOID ResultantFormat OPTIONAL, \
282 OUT PULONG ResultantFormatLength); \
284 STDMETHODIMP_(NTSTATUS) PowerChangeNotify( \
285 IN POWER_STATE PowerState); \
287 STDMETHODIMP_(NTSTATUS) PinCount( \
289 IN OUT PULONG FilterNecessary, \
290 IN OUT PULONG FilterCurrent, \
291 IN OUT PULONG FilterPossible, \
292 IN OUT PULONG GlobalCurrent, \
293 IN OUT PULONG GlobalPossible)
296 DECLARE_INTERFACE_(ISubdevice, IUnknown)
298 DEFINE_ABSTRACT_UNKNOWN()
299 DEFINE_ABSTRACT_ISUBDEVICE()
302 typedef ISubdevice *PSUBDEVICE;
304 /*****************************************************************************
306 *****************************************************************************
310 #define INTERFACE IIrpQueue
312 DECLARE_INTERFACE_(IIrpQueue, IUnknown)
314 DEFINE_ABSTRACT_UNKNOWN()
316 STDMETHOD_(NTSTATUS, Init)(THIS_
317 IN KSPIN_CONNECT *ConnectDetails,
318 IN PKSDATAFORMAT DataFormat,
319 IN PDEVICE_OBJECT DeviceObject,
322 IN PVOID SilenceBuffer) PURE;
324 STDMETHOD_(NTSTATUS, AddMapping)(THIS_
329 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
331 OUT PULONG BufferSize) PURE;
333 STDMETHOD_(VOID, UpdateMapping)(THIS_
334 IN ULONG BytesWritten) PURE;
336 STDMETHOD_(ULONG, NumMappings)(THIS) PURE;
338 STDMETHOD_(ULONG, NumData)(THIS) PURE;
340 STDMETHOD_(BOOL, MinimumDataAvailable)(THIS) PURE;
342 STDMETHOD_(BOOL, CancelBuffers)(THIS) PURE;
344 STDMETHOD_(VOID, UpdateFormat)(THIS_
345 IN PKSDATAFORMAT DataFormat) PURE;
347 STDMETHOD_(NTSTATUS, GetMappingWithTag)(THIS_
349 OUT PPHYSICAL_ADDRESS PhysicalAddress,
350 OUT PVOID *VirtualAddress,
351 OUT PULONG ByteCount,
352 OUT PULONG Flags) PURE;
354 STDMETHOD_(NTSTATUS, ReleaseMappingWithTag)(THIS_
357 STDMETHOD_(BOOL, HasLastMappingFailed)(THIS) PURE;
358 STDMETHOD_(VOID, PrintQueueStatus)(THIS) PURE;
359 STDMETHOD_(VOID, SetMinimumDataThreshold)(THIS_
360 IN ULONG MinimumDataThreshold) PURE;
361 STDMETHOD_(ULONG, GetMinimumDataThreshold)(THIS) PURE;
365 #define IMP_IIrpQueue \
366 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
367 IN KSPIN_CONNECT *ConnectDetails, \
368 IN PKSDATAFORMAT DataFormat, \
369 IN PDEVICE_OBJECT DeviceObject, \
370 IN ULONG FrameSize, \
371 IN ULONG Alignment, \
372 IN PVOID SilenceBuffer); \
374 STDMETHODIMP_(NTSTATUS) AddMapping(THIS_ \
376 IN ULONG BufferSize, \
379 STDMETHODIMP_(NTSTATUS) GetMapping(THIS_ \
380 OUT PUCHAR * Buffer, \
381 OUT PULONG BufferSize); \
383 STDMETHODIMP_(VOID) UpdateMapping(THIS_ \
384 IN ULONG BytesWritten); \
386 STDMETHODIMP_(ULONG) NumMappings(THIS); \
388 STDMETHODIMP_(ULONG) NumData(THIS); \
390 STDMETHODIMP_(BOOL) MinimumDataAvailable(THIS); \
392 STDMETHODIMP_(BOOL) CancelBuffers(THIS); \
394 STDMETHODIMP_(VOID) UpdateFormat(THIS_ \
395 IN PKSDATAFORMAT DataFormat); \
397 STDMETHODIMP_(NTSTATUS) GetMappingWithTag(THIS_ \
399 OUT PPHYSICAL_ADDRESS PhysicalAddress, \
400 OUT PVOID *VirtualAddress, \
401 OUT PULONG ByteCount, \
404 STDMETHODIMP_(NTSTATUS) ReleaseMappingWithTag( \
407 STDMETHODIMP_(BOOL) HasLastMappingFailed(THIS); \
408 STDMETHODIMP_(VOID) PrintQueueStatus(THIS); \
409 STDMETHODIMP_(VOID) SetMinimumDataThreshold( \
410 IN ULONG MinimumDataThreshold); \
411 STDMETHODIMP_(ULONG) GetMinimumDataThreshold(VOID)
413 /*****************************************************************************
415 *****************************************************************************
418 #define INTERFACE IKsWorkSink
420 DECLARE_INTERFACE_(IKsWorkSink, IUnknown)
422 DEFINE_ABSTRACT_UNKNOWN()
424 STDMETHOD_(NTSTATUS, Work)(THIS);
427 /*****************************************************************************
429 *****************************************************************************
432 #define INTERFACE IIrpStreamNotify
434 struct IRPSTREAMPOSITION;
436 DECLARE_INTERFACE_(IIrpStreamNotify, IUnknown)
438 DEFINE_ABSTRACT_UNKNOWN()
440 STDMETHOD_(NTSTATUS, IrpSubmitted)(THIS_
442 IN BOOLEAN WAIT)PURE;
444 STDMETHOD_(NTSTATUS, GetPosition)(THIS_
445 OUT struct IRPSTREAMPOSITION * Position)PURE;
448 /*****************************************************************************
450 *****************************************************************************
454 #define INTERFACE IKsShellTransport
456 #define DEFINE_ABSTRACT_IKSSHELLTRANSPORT() \
457 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
459 OUT IKsShellTransport ** Transport) PURE; \
461 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
462 IN IKsShellTransport * StartTransport, \
463 OUT IKsShellTransport ** EndTransport, \
464 IN KSPIN_DATAFLOW DataFlow)PURE; \
466 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
469 OUT IKsShellTransport ** EndTransport)PURE; \
471 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
473 OUT IKsShellTransport ** EndTransport)PURE;
476 DECLARE_INTERFACE_(IKsShellTransport, IUnknown)
478 DEFINE_ABSTRACT_UNKNOWN()
480 DEFINE_ABSTRACT_IKSSHELLTRANSPORT()
483 /*****************************************************************************
485 *****************************************************************************
487 struct IRPSTREAM_POSITION;
488 struct IRPSTREAMPACKETINFO;
490 #define DEFINE_ABSTRACT_IRPSTREAM() \
491 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
493 OUT IKsShellTransport ** Transport) PURE; \
495 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
496 IN IKsShellTransport * StartTransport, \
497 OUT IKsShellTransport ** EndTransport, \
498 IN KSPIN_DATAFLOW DataFlow)PURE; \
500 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
503 OUT IKsShellTransport ** EndTransport)PURE; \
505 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
507 OUT IKsShellTransport ** EndTransport)PURE; \
509 STDMETHOD_(NTSTATUS, GetPosition)(THIS_ \
510 IN OUT struct IRPSTREAM_POSITION * Position) PURE; \
512 STDMETHOD_(NTSTATUS, Init)(THIS_ \
514 KSPIN_CONNECT *ConnectDetails, \
515 PDEVICE_OBJECT DeviceObject, \
516 PDMA_ADAPTER DmaAdapter) PURE; \
518 STDMETHOD_(NTSTATUS, CancelAllIrps)(THIS_ \
521 STDMETHOD_(VOID, TerminatePacket)(THIS); \
523 STDMETHOD_(NTSTATUS, ChangeOptionsFlag)(THIS_ \
527 ULONG Unknown4)PURE; \
529 STDMETHOD_(NTSTATUS, GetPacketInfo)(THIS_ \
530 struct IRPSTREAMPACKETINFO * Info1, \
531 struct IRPSTREAMPACKETINFO * Info2)PURE; \
533 STDMETHOD_(NTSTATUS, SetPacketOffsets)(THIS_ \
535 ULONG Unknown2)PURE; \
537 STDMETHOD_(NTSTATUS, RegisterNotifySink)(THIS_ \
538 IN IIrpStreamNotify * NotifyStream)PURE;
543 #define INTERFACE IIrpStream
545 DECLARE_INTERFACE_(IIrpStream, IUnknown)
547 DEFINE_ABSTRACT_UNKNOWN()
549 DEFINE_ABSTRACT_IRPSTREAM()
553 /*****************************************************************************
555 *****************************************************************************
558 #define INTERFACE IIrpStreamPhysical
560 DECLARE_INTERFACE_(IIrpStreamPhysical, IIrpStream)
562 DEFINE_ABSTRACT_UNKNOWN()
564 DEFINE_ABSTRACT_IRPSTREAM()
566 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
568 OUT PPHYSICAL_ADDRESS PhysicalAddress,
569 OUT PVOID * VirtualAddress,
570 OUT PULONG ByteCount,
571 OUT PULONG Flags)PURE;
575 /*****************************************************************************
577 *****************************************************************************
580 #define INTERFACE IIrpStreamVirtual
582 DECLARE_INTERFACE_(IIrpStreamVirtual, IIrpStream)
584 DEFINE_ABSTRACT_UNKNOWN()
586 DEFINE_ABSTRACT_IRPSTREAM()
588 STDMETHOD_(NTSTATUS, GetLockedRegion)(THIS_
590 OUT PVOID * OutBuffer)PURE;
592 STDMETHOD_(NTSTATUS, Copy)(THIS_
596 OUT PVOID Result)PURE;
598 STDMETHOD_(NTSTATUS, Complete)(THIS_
602 STDMETHOD_(ULONG, GetIrpStreamPositionLock)(THIS);
605 /*****************************************************************************
607 *****************************************************************************
611 #define INTERFACE IPortFilterWavePci
613 DECLARE_INTERFACE_(IPortFilterWavePci, IIrpTarget)
615 DEFINE_ABSTRACT_UNKNOWN()
617 DEFINE_ABSTRACT_IRPTARGET()
619 STDMETHOD_(NTSTATUS, Init)(THIS_
620 IN PPORTWAVEPCI Port)PURE;
623 typedef IPortFilterWavePci *PPORTFILTERWAVEPCI;
625 #define IMP_IPortFilterPci \
627 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
628 IN PPORTWAVEPCI Port)
630 /*****************************************************************************
632 *****************************************************************************
636 #define INTERFACE IPortPinWavePci
638 DECLARE_INTERFACE_(IPortPinWavePci, IIrpTarget)
640 DEFINE_ABSTRACT_UNKNOWN()
642 DEFINE_ABSTRACT_IRPTARGET()
644 STDMETHOD_(NTSTATUS, Init)(THIS_
645 IN PPORTWAVEPCI Port,
646 IN PPORTFILTERWAVEPCI Filter,
647 IN KSPIN_CONNECT * ConnectDetails,
648 IN KSPIN_DESCRIPTOR * PinDescriptor,
649 IN PDEVICE_OBJECT DeviceObject) PURE;
651 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
652 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
655 #define IMP_IPortPinWavePci \
657 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
658 IN PPORTWAVEPCI Port, \
659 IN PPORTFILTERWAVEPCI Filter, \
660 IN KSPIN_CONNECT * ConnectDetails, \
661 IN KSPIN_DESCRIPTOR * PinDescriptor, \
662 IN PDEVICE_OBJECT DeviceObject); \
664 STDMETHODIMP_(PVOID) GetIrpStream(); \
665 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
669 typedef IPortPinWavePci *PPORTPINWAVEPCI;
672 #if (NTDDI_VERSION >= NTDDI_VISTA)
674 /*****************************************************************************
676 *****************************************************************************
680 #define INTERFACE IPortFilterWaveRT
683 typedef IPortWaveRT *PPORTWAVERT;
686 DECLARE_INTERFACE_(IPortFilterWaveRT, IIrpTarget)
688 DEFINE_ABSTRACT_UNKNOWN()
690 DEFINE_ABSTRACT_IRPTARGET()
692 STDMETHOD_(NTSTATUS, Init)(THIS_
693 IN PPORTWAVERT Port)PURE;
696 typedef IPortFilterWaveRT *PPORTFILTERWAVERT;
698 #define IMP_IPortFilterWaveRT \
700 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
704 /*****************************************************************************
706 *****************************************************************************
710 #define INTERFACE IPortPinWaveRT
712 DECLARE_INTERFACE_(IPortPinWaveRT, IIrpTarget)
714 DEFINE_ABSTRACT_UNKNOWN()
716 DEFINE_ABSTRACT_IRPTARGET()
718 STDMETHOD_(NTSTATUS, Init)(THIS_
720 IN PPORTFILTERWAVERT Filter,
721 IN KSPIN_CONNECT * ConnectDetails,
722 IN KSPIN_DESCRIPTOR * PinDescriptor,
723 IN PDEVICE_OBJECT DeviceObject) PURE;
726 typedef IPortPinWaveRT *PPORTPINWAVERT;
728 #define IMP_IPortPinWaveRT \
730 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
731 IN PPORTWAVERT Port, \
732 IN PPORTFILTERWAVERT Filter, \
733 IN KSPIN_CONNECT * ConnectDetails, \
734 IN KSPIN_DESCRIPTOR * PinDescriptor, \
735 IN PDEVICE_OBJECT DeviceObject)
740 /*****************************************************************************
741 * IPortFilterWaveCyclic
742 *****************************************************************************
746 #define INTERFACE IPortFilterWaveCyclic
748 struct IPortPinWaveCyclic;
750 DECLARE_INTERFACE_(IPortFilterWaveCyclic, IIrpTarget)
752 DEFINE_ABSTRACT_UNKNOWN()
754 DEFINE_ABSTRACT_IRPTARGET()
756 STDMETHOD_(NTSTATUS, Init)(THIS_
757 IN PPORTWAVECYCLIC Port)PURE;
759 STDMETHOD_(NTSTATUS, FreePin)(THIS_
760 IN struct IPortPinWaveCyclic* Pin)PURE;
763 typedef IPortFilterWaveCyclic *PPORTFILTERWAVECYCLIC;
765 #define IMP_IPortFilterWaveCyclic \
767 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
768 IN PPORTWAVECYCLIC Port); \
769 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
770 IN struct IPortPinWaveCyclic* Pin)
773 /*****************************************************************************
775 *****************************************************************************
779 #define INTERFACE IPortPinWaveCyclic
781 DECLARE_INTERFACE_(IPortPinWaveCyclic, IIrpTarget)
783 DEFINE_ABSTRACT_UNKNOWN()
785 DEFINE_ABSTRACT_IRPTARGET()
787 STDMETHOD_(NTSTATUS, Init)(THIS_
788 IN PPORTWAVECYCLIC Port,
789 IN PPORTFILTERWAVECYCLIC Filter,
790 IN KSPIN_CONNECT * ConnectDetails,
791 IN KSPIN_DESCRIPTOR * PinDescriptor) PURE;
793 STDMETHOD_(ULONG, GetCompletedPosition)(THIS) PURE;
794 STDMETHOD_(ULONG, GetCycleCount)(THIS) PURE;
795 STDMETHOD_(ULONG, GetDeviceBufferSize)(THIS) PURE;
796 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
797 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
800 #define IMP_IPortPinWaveCyclic \
802 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
803 IN PPORTWAVECYCLIC Port, \
804 IN PPORTFILTERWAVECYCLIC Filter, \
805 IN KSPIN_CONNECT * ConnectDetails, \
806 IN KSPIN_DESCRIPTOR * PinDescriptor); \
807 STDMETHODIMP_(ULONG) GetCompletedPosition(THIS); \
808 STDMETHODIMP_(ULONG) GetCycleCount(THIS); \
809 STDMETHODIMP_(ULONG) GetDeviceBufferSize(THIS); \
810 STDMETHODIMP_(PVOID) GetIrpStream(THIS); \
811 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
814 /*****************************************************************************
816 *****************************************************************************
820 #define INTERFACE IPortFilterDMus
824 DECLARE_INTERFACE_(IPortFilterDMus, IUnknown)
826 DEFINE_ABSTRACT_UNKNOWN()
828 DEFINE_ABSTRACT_IRPTARGET()
830 STDMETHOD_(NTSTATUS, Init)(THIS_
831 IN PPORTDMUS Port)PURE;
833 STDMETHOD_(NTSTATUS, FreePin)(THIS_
834 IN struct IPortPinDMus* Pin)PURE;
836 STDMETHOD_(VOID, NotifyPins)(THIS) PURE;
839 typedef IPortFilterDMus *PPORTFILTERDMUS;
841 #define IMP_IPortFilterDMus \
843 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
844 IN PPORTDMUS Port); \
845 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
846 IN struct IPortPinDMus* Pin); \
847 STDMETHODIMP_(VOID) NotifyPins(THIS)
849 /*****************************************************************************
851 *****************************************************************************
855 #define INTERFACE IPortPinDMus
857 DECLARE_INTERFACE_(IPortPinDMus, IIrpTarget)
859 DEFINE_ABSTRACT_UNKNOWN()
861 DEFINE_ABSTRACT_IRPTARGET()
863 STDMETHOD_(NTSTATUS, Init)(THIS_
865 IN PPORTFILTERDMUS Filter,
866 IN KSPIN_CONNECT * ConnectDetails,
867 IN KSPIN_DESCRIPTOR * PinDescriptor,
868 IN PDEVICE_OBJECT DeviceObject) PURE;
870 STDMETHOD_(VOID, Notify)(THIS) PURE;
873 #define IMP_IPortPinDMus \
875 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
877 IN PPORTFILTERDMUS Filter, \
878 IN KSPIN_CONNECT * ConnectDetails, \
879 IN KSPIN_DESCRIPTOR * PinDescriptor, \
880 IN PDEVICE_OBJECT DeviceObject); \
881 STDMETHODIMP_(VOID) Notify(THIS)
883 typedef IPortPinDMus *PPORTPINDMUS;
885 /*****************************************************************************
887 *****************************************************************************
890 #define IMP_IDmaChannelEx \
891 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
892 IN ULONG BufferSize, \
893 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
895 STDMETHODIMP_(void) FreeBuffer(void); \
896 STDMETHODIMP_(ULONG) TransferCount(void); \
897 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
898 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
899 STDMETHODIMP_(ULONG) BufferSize(void); \
901 STDMETHODIMP_(void) SetBufferSize( \
902 IN ULONG BufferSize); \
904 STDMETHODIMP_(PVOID) SystemAddress(void); \
905 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress( \
906 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
907 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
909 STDMETHODIMP_(void) CopyTo( \
910 IN PVOID Destination, \
912 IN ULONG ByteCount); \
914 STDMETHODIMP_(void) CopyFrom( \
915 IN PVOID Destination, \
919 #define IMP_IDmaChannelSlaveEx \
921 STDMETHODIMP_(NTSTATUS) Start( \
923 IN BOOLEAN WriteToDevice); \
925 STDMETHODIMP_(NTSTATUS) Stop(void); \
926 STDMETHODIMP_(ULONG) ReadCounter(void); \
928 STDMETHODIMP_(NTSTATUS) WaitForTC( \
931 #define IMP_IDmaChannelInit\
932 IMP_IDmaChannelSlaveEx;\
933 STDMETHODIMP_(NTSTATUS) Init( \
934 IN PDEVICE_DESCRIPTION DeviceDescription, \
935 IN PDEVICE_OBJECT DeviceObject)
937 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \
938 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
939 IN ULONG BufferSize, \
940 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
942 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
943 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
944 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
945 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
946 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
948 STDMETHOD_(void, SetBufferSize)( THIS_ \
949 IN ULONG BufferSize) PURE; \
951 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
952 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_ \
953 IN PPHYSICAL_ADDRESS Address) PURE; \
954 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
956 STDMETHOD_(void, CopyTo)( THIS_ \
957 IN PVOID Destination, \
959 IN ULONG ByteCount) PURE; \
961 STDMETHOD_(void, CopyFrom)( THIS_ \
962 IN PVOID Destination, \
964 IN ULONG ByteCount) PURE;
967 #define INTERFACE IDmaChannelInit
969 DECLARE_INTERFACE_(IDmaChannelInit, IUnknown)
971 DEFINE_ABSTRACT_UNKNOWN()
972 DEFINE_ABSTRACT_DMACHANNEL_EX()
973 //DEFINE_ABSTRACT_DMACHANNELSLAVE()
975 STDMETHOD_(NTSTATUS, Init)( THIS_
976 IN PDEVICE_DESCRIPTION DeviceDescription,
977 IN PDEVICE_OBJECT DeviceObject) PURE;
982 /*****************************************************************************
983 * IPortFilterTopology
984 *****************************************************************************
988 #define INTERFACE IPortFilterTopology
990 DECLARE_INTERFACE_(IPortFilterTopology, IIrpTarget)
992 DEFINE_ABSTRACT_UNKNOWN()
994 DEFINE_ABSTRACT_IRPTARGET()
996 STDMETHOD_(NTSTATUS, Init)(THIS_
997 IN PPORTTOPOLOGY Port)PURE;
1000 typedef IPortFilterTopology *PPORTFILTERTOPOLOGY;
1002 #define IMP_IPortFilterTopology \
1004 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
1005 IN PPORTTOPOLOGY Port)
1009 /*****************************************************************************
1010 * IPortWaveRTStreamInit
1011 *****************************************************************************
1015 #define INTERFACE IPortWaveRTStreamInit
1018 DECLARE_INTERFACE_(IPortWaveRTStreamInit, IUnknown)
1020 DEFINE_ABSTRACT_UNKNOWN()
1022 STDMETHOD_(PMDL, AllocatePagesForMdl)
1024 IN PHYSICAL_ADDRESS HighAddress,
1025 IN SIZE_T TotalBytes
1028 STDMETHOD_(PMDL, AllocateContiguousPagesForMdl)
1030 IN PHYSICAL_ADDRESS LowAddress,
1031 IN PHYSICAL_ADDRESS HighAddress,
1032 IN SIZE_T TotalBytes
1035 STDMETHOD_(PVOID, MapAllocatedPages)
1037 IN PMDL MemoryDescriptorList,
1038 IN MEMORY_CACHING_TYPE CacheType
1041 STDMETHOD_(VOID, UnmapAllocatedPages)
1043 IN PVOID BaseAddress,
1044 IN PMDL MemoryDescriptorList
1047 STDMETHOD_(VOID, FreePagesFromMdl)
1049 IN PMDL MemoryDescriptorList
1052 STDMETHOD_(ULONG, GetPhysicalPagesCount)
1054 IN PMDL MemoryDescriptorList
1057 STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress)
1059 IN PPHYSICAL_ADDRESS Address,
1060 IN PMDL MemoryDescriptorList,
1067 #define IMP_IPortWaveRTStreamInit \
1068 STDMETHODIMP_(PMDL) AllocatePagesForMdl \
1070 IN PHYSICAL_ADDRESS HighAddress, \
1071 IN SIZE_T TotalBytes \
1074 STDMETHODIMP_(PMDL) AllocateContiguousPagesForMdl \
1076 IN PHYSICAL_ADDRESS LowAddress, \
1077 IN PHYSICAL_ADDRESS HighAddress, \
1078 IN SIZE_T TotalBytes \
1081 STDMETHODIMP_(PVOID) MapAllocatedPages \
1083 IN PMDL MemoryDescriptorList, \
1084 IN MEMORY_CACHING_TYPE CacheType \
1087 STDMETHODIMP_(VOID) UnmapAllocatedPages \
1089 IN PVOID BaseAddress, \
1090 IN PMDL MemoryDescriptorList \
1093 STDMETHODIMP_(VOID) FreePagesFromMdl \
1095 IN PMDL MemoryDescriptorList \
1098 STDMETHODIMP_(ULONG) GetPhysicalPagesCount \
1100 IN PMDL MemoryDescriptorList \
1103 STDMETHODIMP_(PHYSICAL_ADDRESS) GetPhysicalPageAddress \
1105 IN PPHYSICAL_ADDRESS Address, \
1106 IN PMDL MemoryDescriptorList, \
1110 #ifndef IMP_IPortClsVersion
1112 #define IMP_IPortClsVersion \
1113 STDMETHODIMP_(DWORD) GetVersion(void);
1117 #ifdef IMP_IPortWaveRT
1118 #define IMP_IPortWaveRT IMP_IPort