ReactOS Kernel Streaming
Port Class
+ This file is in the public domain.
+
Andrew Greenwood
NOTES:
#include <mmreg.h>
#undef NOBITMAP
+#include <punknown.h>
#include <ks.h>
#include <ksmedia.h>
-#include <punknown.h>
#include <drmk.h>
#ifdef __cplusplus
typedef struct _PCPROPERTY_REQUEST PCPROPERTY_REQUEST, *PPCPROPERTY_REQUEST;
-typedef NTSTATUS (*PCPFNPROPERTY_HANDLER)(
+typedef NTSTATUS (NTAPI *PCPFNPROPERTY_HANDLER)(
IN PPCPROPERTY_REQUEST PropertyRequest);
typedef struct
PCPROPERTY_ITEM, *PPCPROPERTY_ITEM;
-typedef struct _PCPROPERTY_REQUEST
+struct _PCPROPERTY_REQUEST
{
PUNKNOWN MajorTarget;
PUNKNOWN MinorTarget;
ULONG ValueSize;
PVOID Value;
PIRP Irp;
-}PCPROPERTY_REQUEST, *PPCPROPERTY_REQUEST;
+};
struct _PCEVENT_REQUEST;
-typedef NTSTATUS (*PCPFNEVENT_HANDLER)(
+typedef NTSTATUS (NTAPI *PCPFNEVENT_HANDLER)(
IN struct _PCEVENT_REQUEST* EventRequest);
typedef struct _PCEVENT_ITEM
struct _PCMETHOD_REQUEST;
-typedef NTSTATUS (*PCPFNMETHOD_HANDLER)(
+typedef NTSTATUS (NTAPI *PCPFNMETHOD_HANDLER)(
IN struct _PCMETHOD_REQUEST* MethodRequest);
typedef struct _PCMETHOD_ITEM
typedef IUnregisterSubdevice *PUNREGISTERSUBDEVICE;
+#define IMP_IUnregisterSubdevice \
+ STDMETHODIMP_(NTSTATUS) UnregisterSubdevice(THIS_ \
+ IN PDEVICE_OBJECT DeviceObject, \
+ IN PUNKNOWN Unknown)
+
/* ===============================================================
IUnregisterPhysicalConnection Interface
*/
typedef IUnregisterPhysicalConnection *PUNREGISTERPHYSICALCONNECTION;
#endif
+#define IMP_IUnregisterPhysicalConnection \
+ STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnection( \
+ IN PDEVICE_OBJECT DeviceObject, \
+ IN PUNKNOWN FromUnknown, \
+ IN ULONG FromPin, \
+ IN PUNKNOWN ToUnknown, \
+ IN ULONG ToPin); \
+ \
+ STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionToExternal( \
+ IN PDEVICE_OBJECT DeviceObject, \
+ IN PUNKNOWN FromUnknown, \
+ IN ULONG FromPin, \
+ IN PUNICODE_STRING ToString, \
+ IN ULONG ToPin); \
+ \
+ STDMETHODIMP_(NTSTATUS) UnregisterPhysicalConnectionFromExternal( \
+ IN PDEVICE_OBJECT DeviceObject, \
+ IN PUNICODE_STRING FromString, \
+ IN ULONG FromPin, \
+ IN PUNKNOWN ToUnknown, \
+ IN ULONG ToPin)
+
+
/* ===============================================================
IDmaChannel Interface
*/
IN PVOID Source, \
IN ULONG ByteCount) PURE;
-#define IMP_IDmaChannel() \
- STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
- IN ULONG BufferSize, \
- IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
-\
- STDMETHODIMP_(void) FreeBuffer(void); \
- STDMETHODIMP_(ULONG) TransferCount(void); \
- STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
- STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
- STDMETHODIMP_(ULONG) BufferSize(void); \
-\
- STDMETHODIMP_(void) SetBufferSize)( \
- IN ULONG BufferSize); \
-\
- STDMETHODIMP_(PVOID) SystemAddress(void); \
- STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
- STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
-\
- STDMETHODIMP_(void) CopyTo( \
- IN PVOID Destination, \
- IN PVOID Source, \
- IN ULONG ByteCount); \
-\
- STDMETHODIMP_(void) CopyFrom( \
- IN PVOID Destination, \
- IN PVOID Source, \
- IN ULONG ByteCount);
+#define IMP_IDmaChannel \
+ STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
+ IN ULONG BufferSize, \
+ IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
+ \
+ STDMETHODIMP_(void) FreeBuffer(void); \
+ STDMETHODIMP_(ULONG) TransferCount(void); \
+ STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
+ STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
+ STDMETHODIMP_(ULONG) BufferSize(void); \
+ \
+ STDMETHODIMP_(void) SetBufferSize( \
+ IN ULONG BufferSize); \
+ \
+ STDMETHODIMP_(PVOID) SystemAddress(void); \
+ STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
+ STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
+ \
+ STDMETHODIMP_(void) CopyTo( \
+ IN PVOID Destination, \
+ IN PVOID Source, \
+ IN ULONG ByteCount); \
+ \
+ STDMETHODIMP_(void) CopyFrom( \
+ IN PVOID Destination, \
+ IN PVOID Source, \
+ IN ULONG ByteCount)
#undef INTERFACE
#define INTERFACE IDmaChannel
STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
ULONG Timeout) PURE;
-#define IMP_IDmaChannelSlave \
- STDMETHODIMP_(NTSTATUS) Start( \
- IN ULONG MapSize, \
- IN BOOLEAN WriteToDevice); \
-\
- STDMETHODIMP_(NTSTATUS) Stop(void); \
- STDMETHODIMP_(ULONG) ReadCounter)(void); \
-\
- STDMETHODIMP_(NTSTATUS, WaitForTC)( \
- ULONG Timeout);
+#define IMP_IDmaChannelSlave \
+ IMP_IDmaChannel; \
+ STDMETHODIMP_(NTSTATUS) Start( \
+ IN ULONG MapSize, \
+ IN BOOLEAN WriteToDevice); \
+ \
+ STDMETHODIMP_(NTSTATUS) Stop(void); \
+ STDMETHODIMP_(ULONG) ReadCounter(void); \
+ \
+ STDMETHODIMP_(NTSTATUS) WaitForTC( \
+ ULONG Timeout)
#undef INTERFACE
#define INTERFACE IDmaChannelSlave
struct IInterruptSync;
-typedef NTSTATUS (*PINTERRUPTSYNCROUTINE)(
+typedef NTSTATUS (NTAPI *PINTERRUPTSYNCROUTINE)(
IN struct IInterruptSync* InterruptSync,
IN PVOID DynamicContext);
DEFINE_GUID(IID_IInterruptSync, 0x22C6AC63L, 0x851B, 0x11D0, 0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE);
-#define IMP_IInterruptSync \
- STDMETHODIMP_(NTSTATUS, CallSynchronizedRoutine)( \
- IN PINTERRUPTSYNCROUTINE Routine, \
- IN PVOID DynamicContext); \
-\
- STDMETHODIMP_(PKINTERRUPT, GetKInterrupt)(void); \
- STDMETHODIMP_(NTSTATUS, Connect)(void); \
- STDMETHODIMP_(void, Disconnect)(void); \
-\
- STDMETHODIMP_(NTSTATUS, RegisterServiceRoutine)( \
- IN PINTERRUPTSYNCROUTINE Routine, \
- IN PVOID DynamicContext, \
- IN BOOLEAN First);
+#define IMP_IInterruptSync \
+ STDMETHODIMP_(NTSTATUS) CallSynchronizedRoutine( \
+ IN PINTERRUPTSYNCROUTINE Routine, \
+ IN PVOID DynamicContext); \
+ \
+ STDMETHODIMP_(PKINTERRUPT) GetKInterrupt(void); \
+ STDMETHODIMP_(NTSTATUS) Connect(void); \
+ STDMETHODIMP_(void) Disconnect(void); \
+ \
+ STDMETHODIMP_(NTSTATUS) RegisterServiceRoutine( \
+ IN PINTERRUPTSYNCROUTINE Routine, \
+ IN PVOID DynamicContext, \
+ IN BOOLEAN First)
typedef IInterruptSync *PINTERRUPTSYNC;
IN ULONG CreateOptiona OPTIONAL, \
OUT PULONG Disposition OPTIONAL) PURE;
-#define IMP_IPort() \
- STDMETHODIMP_(NTSTATUS) Init( \
- IN PDEVICE_OBJECT DeviceObject, \
- IN PIRP Irp, \
- IN PUNKNOWN UnknownMiniport, \
- IN PUNKNOWN UnknownAdapter OPTIONAL, \
- IN PRESOURCELIST ResourceList); \
-\
- STDMETHODIMP_(NTSTATUS) GetDeviceProperty( \
- IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
- IN ULONG BufferLength, \
- OUT PVOID PropertyBuffer, \
- OUT PULONG ResultLength); \
-\
- STDMETHODIMP_(NTSTATUS) NewRegistryKey( \
- OUT PREGISTRYKEY* OutRegistryKey, \
- IN PUNKNOWN OuterUnknown OPTIONAL, \
- IN ULONG RegistryKeyType, \
- IN ACCESS_MASK DesiredAccess, \
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
- IN ULONG CreateOptiona OPTIONAL, \
- OUT PULONG Disposition OPTIONAL);
+#ifdef PC_IMPLEMENTATION
+#define IMP_IPort\
+ STDMETHODIMP_(NTSTATUS) Init\
+ ( IN PDEVICE_OBJECT DeviceObject,\
+ IN PIRP Irp,\
+ IN PUNKNOWN UnknownMiniport,\
+ IN PUNKNOWN UnknownAdapter OPTIONAL,\
+ IN PRESOURCELIST ResourceList\
+ );\
+ STDMETHODIMP_(NTSTATUS) GetDeviceProperty\
+ ( IN DEVICE_REGISTRY_PROPERTY DeviceProperty,\
+ IN ULONG BufferLength,\
+ OUT PVOID PropertyBuffer,\
+ OUT PULONG ResultLength\
+ );\
+ STDMETHODIMP_(NTSTATUS) NewRegistryKey\
+ ( OUT PREGISTRYKEY * OutRegistryKey,\
+ IN PUNKNOWN OuterUnknown OPTIONAL,\
+ IN ULONG RegistryKeyType,\
+ IN ACCESS_MASK DesiredAccess,\
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,\
+ IN ULONG CreateOptions OPTIONAL,\
+ OUT PULONG Disposition OPTIONAL\
+ )
+#endif
+
+#undef INTERFACE
+#define INTERFACE IPort
DECLARE_INTERFACE_(IPort, IUnknown)
{
typedef IPortWaveCyclic *PPORTWAVECYCLIC;
+#ifdef PC_IMPLEMENTATION
+#define IMP_IPortWaveCyclic \
+ IMP_IPort; \
+ STDMETHODIMP_(VOID) Notify( \
+ IN PSERVICEGROUP ServiceGroup); \
+ \
+ STDMETHODIMP_(NTSTATUS) NewSlaveDmaChannel( \
+ OUT PDMACHANNELSLAVE* DmaChannel, \
+ IN PUNKNOWN OuterUnknown, \
+ IN PRESOURCELIST ResourceList OPTIONAL, \
+ IN ULONG DmaIndex, \
+ IN ULONG MaximumLength, \
+ IN BOOL DemandMode, \
+ IN DMA_SPEED DmaSpeed); \
+ \
+ STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel( \
+ OUT PDMACHANNEL* DmaChannel, \
+ IN PUNKNOWN OuterUnknown, \
+ IN PRESOURCELIST ResourceList OPTIONAL, \
+ IN ULONG MaximumLength, \
+ IN BOOL Dma32BitAddresses, \
+ IN BOOL Dma64BitAddresses, \
+ IN DMA_WIDTH DmaWidth, \
+ IN DMA_SPEED DmaSpeed)
+#endif
+
+
#undef INTERFACE
/* ===============================================================
IPortWavePci Interface
typedef IPortWavePci *PPORTWAVEPCI;
#undef INTERFACE
+#ifdef PC_IMPLEMENTATION
+#define IMP_IPortWavePci \
+ IMP_IPort; \
+ STDMETHODIMP_(VOID) Notify( \
+ IN PSERVICEGROUP ServiceGroup); \
+ \
+ STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel( \
+ OUT PDMACHANNEL* DmaChannel, \
+ IN PUNKNOWN OuterUnknown, \
+ IN POOL_TYPE PoolType, \
+ IN PRESOURCELIST ResourceList OPTIONAL, \
+ IN BOOLEAN ScatterGather, \
+ IN BOOLEAN Dma32BitAddresses, \
+ IN BOOLEAN Dma64BitAddresses, \
+ IN BOOLEAN IgnoreCount, \
+ IN DMA_WIDTH DmaWidth, \
+ IN DMA_SPEED DmaSpeed, \
+ IN ULONG MaximumLength, \
+ IN ULONG DmaPort);
+#endif
/* ===============================================================
IMiniPort Interface
OUT PVOID ResultantFormat OPTIONAL, \
OUT PULONG ResultantFormatLength) PURE;
-#define IMP_IMiniport \
- STDMETHODIMP_(NTSTATUS) GetDescription( \
- OUT PPCFILTER_DESCRIPTOR* Description); \
-\
- STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
- IN ULONG PinId, \
- IN PKSDATARANGE DataRange, \
- IN PKSDATARANGE MatchingDataRange, \
- IN ULONG OutputBufferLength, \
- OUT PVOID ResultantFormat OPTIONAL, \
- OUT PULONG ResultantFormatLength);
+#define IMP_IMiniport \
+ STDMETHODIMP_(NTSTATUS) GetDescription( \
+ OUT PPCFILTER_DESCRIPTOR* Description); \
+ \
+ STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
+ IN ULONG PinId, \
+ IN PKSDATARANGE DataRange, \
+ IN PKSDATARANGE MatchingDataRange, \
+ IN ULONG OutputBufferLength, \
+ OUT PVOID ResultantFormat OPTIONAL, \
+ OUT PULONG ResultantFormatLength)
DECLARE_INTERFACE_(IMiniport, IUnknown)
{
STDMETHOD_(void, Service)(THIS) PURE;
STDMETHOD_(NTSTATUS, NewStream)(THIS_
- OUT PMINIPORTMIDISTREAM Stream,
+ OUT PMINIPORTMIDISTREAM *Stream,
IN PUNKNOWN OuterUnknown OPTIONAL,
IN POOL_TYPE PoolType,
IN ULONG Pin,
DEFINE_GUID(IID_IPortTopology, 0xb4c90a30L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
DEFINE_GUID(CLSID_PortTopology, 0xb4c90a32L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
+#undef INTERFACE
+#define INTERFACE IPortTopology
+
DECLARE_INTERFACE_(IPortTopology, IPort)
{
DEFINE_ABSTRACT_UNKNOWN()
DEFINE_GUID(IID_IMiniportTopology, 0xb4c90a31L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
+#undef INTERFACE
+#define INTERFACE IMiniportTopology
+
DECLARE_INTERFACE_(IMiniportTopology,IMiniport)
{
DEFINE_ABSTRACT_UNKNOWN()
IN PUNKNOWN OuterUnknown OPTIONAL,
IN POOL_TYPE PoolType,
IN ULONG Pin,
- IN BOOL Capture,
+ IN BOOLEAN Capture,
IN PKSDATAFORMAT DataFormat,
OUT PDMACHANNEL *DmaChannel,
OUT PSERVICEGROUP *ServiceGroup) PURE;
typedef IPortWavePciStream *PPORTWAVEPCISTREAM;
+#define IMP_IPortWavePciStream \
+ STDMETHODIMP_(NTSTATUS) GetMapping( \
+ IN PVOID Tag, \
+ OUT PPHYSICAL_ADDRESS PhysicalAddress, \
+ OUT PVOID * VirtualAddress, \
+ OUT PULONG ByteCount, \
+ OUT PULONG Flags); \
+ \
+ STDMETHODIMP_(NTSTATUS) ReleaseMapping( \
+ IN PVOID Tag); \
+ \
+ STDMETHODIMP_(NTSTATUS) TerminatePacket(THIS)
+
+
/* ===============================================================
IMiniportWavePciStream Interface
*/
typedef IMiniportWavePci *PMINIPORTWAVEPCI;
+
+#if !defined(DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM)
+
+#define DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM() \
+ STDMETHOD_(NTSTATUS,SetFormat) \
+ ( THIS_ \
+ IN PKSDATAFORMAT DataFormat \
+ ) PURE; \
+ STDMETHOD_(NTSTATUS,SetState) \
+ ( THIS_ \
+ IN KSSTATE State \
+ ) PURE; \
+ STDMETHOD_(NTSTATUS,GetPosition) \
+ ( THIS_ \
+ OUT PKSAUDIO_POSITION Position \
+ ) PURE; \
+ STDMETHOD_(NTSTATUS,AllocateAudioBuffer) \
+ ( THIS_ \
+ IN ULONG RequestedSize, \
+ OUT PMDL *AudioBufferMdl, \
+ OUT ULONG *ActualSize, \
+ OUT ULONG *OffsetFromFirstPage, \
+ OUT MEMORY_CACHING_TYPE *CacheType \
+ ) PURE; \
+ STDMETHOD_(VOID,FreeAudioBuffer) \
+ ( THIS_ \
+ IN PMDL AudioBufferMdl, \
+ IN ULONG BufferSize \
+ ) PURE; \
+ STDMETHOD_(VOID,GetHWLatency) \
+ ( THIS_ \
+ OUT KSRTAUDIO_HWLATENCY *hwLatency \
+ ) PURE; \
+ STDMETHOD_(NTSTATUS,GetPositionRegister) \
+ ( THIS_ \
+ OUT KSRTAUDIO_HWREGISTER *Register \
+ ) PURE; \
+ STDMETHOD_(NTSTATUS,GetClockRegister) \
+ ( THIS_ \
+ OUT KSRTAUDIO_HWREGISTER *Register \
+ ) PURE;
+
+#endif
+
+
+/* ===============================================================
+ IAdapterPowerManagement Interface
+*/
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+/* ===============================================================
+ IPortWaveRT Interface
+*/
+
+DEFINE_GUID(CLSID_PortWaveRT, 0xcc9be57a, 0xeb9e, 0x42b4, 0x94, 0xfc, 0xc, 0xad, 0x3d, 0xbc, 0xe7, 0xfa);
+DEFINE_GUID(IID_IPortWaveRT, 0x339ff909, 0x68a9, 0x4310, 0xb0, 0x9b, 0x27, 0x4e, 0x96, 0xee, 0x4c, 0xbd);
+
+#undef INTERFACE
+#define INTERFACE IPortWaveRT
+
+DECLARE_INTERFACE_(IPortWaveRT,IPort)
+{
+ DEFINE_ABSTRACT_UNKNOWN() // For IUnknown
+
+ DEFINE_ABSTRACT_PORT() // For IPort
+};
+
+typedef IPortWaveRT *PPORTWAVERT;
+
+#ifdef PC_IMPLEMENTATION
+#define IMP_IPortWaveRT IMP_IPort
+#endif
+
+
+/* ===============================================================
+ IPortWaveRTStream Interface
+*/
+
+#undef INTERFACE
+#define INTERFACE IPortWaveRTStream
+
+DEFINE_GUID(IID_IPortWaveRTStream, 0x1809ce5a, 0x64bc, 0x4e62, 0xbd, 0x7d, 0x95, 0xbc, 0xe4, 0x3d, 0xe3, 0x93);
+
+DECLARE_INTERFACE_(IPortWaveRTStream, IUnknown)
+{
+ DEFINE_ABSTRACT_UNKNOWN()
+
+ STDMETHOD_(PMDL, AllocatePagesForMdl)
+ ( THIS_
+ IN PHYSICAL_ADDRESS HighAddress,
+ IN SIZE_T TotalBytes
+ ) PURE;
+
+ STDMETHOD_(PMDL, AllocateContiguousPagesForMdl)
+ ( THIS_
+ IN PHYSICAL_ADDRESS LowAddress,
+ IN PHYSICAL_ADDRESS HighAddress,
+ IN SIZE_T TotalBytes
+ ) PURE;
+
+ STDMETHOD_(PVOID, MapAllocatedPages)
+ ( THIS_
+ IN PMDL MemoryDescriptorList,
+ IN MEMORY_CACHING_TYPE CacheType
+ ) PURE;
+
+ STDMETHOD_(VOID, UnmapAllocatedPages)
+ ( THIS_
+ IN PVOID BaseAddress,
+ IN PMDL MemoryDescriptorList
+ ) PURE;
+
+ STDMETHOD_(VOID, FreePagesFromMdl)
+ ( THIS_
+ IN PMDL MemoryDescriptorList
+ ) PURE;
+
+ STDMETHOD_(ULONG, GetPhysicalPagesCount)
+ ( THIS_
+ IN PMDL MemoryDescriptorList
+ ) PURE;
+
+ STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress)
+ ( THIS_
+ IN PMDL MemoryDescriptorList,
+ IN ULONG Index
+ ) PURE;
+};
+
+typedef IPortWaveRTStream *PPORTWAVERTSTREAM;
+
+
+/* ===============================================================
+ IMiniportWaveRTStream Interface
+*/
+
+#undef INTERFACE
+#define INTERFACE IMiniportWaveRTStream
+
+DEFINE_GUID(IID_IMiniportWaveRTStream, 0xac9ab, 0xfaab, 0x4f3d, 0x94, 0x55, 0x6f, 0xf8, 0x30, 0x6a, 0x74, 0xa0);
+
+DECLARE_INTERFACE_(IMiniportWaveRTStream, IUnknown)
+{
+ DEFINE_ABSTRACT_UNKNOWN()
+ DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
+};
+
+typedef IMiniportWaveRTStream *PMINIPORTWAVERTSTREAM;
+
+
+/* ===============================================================
+ IMiniportWaveRTStreamNotification Interface
+*/
+
+#undef INTERFACE
+#define INTERFACE IMiniportWaveRTStreamNotification
+
+DEFINE_GUID(IID_IMiniportWaveRTStreamNotification, 0x23759128, 0x96f1, 0x423b, 0xab, 0x4d, 0x81, 0x63, 0x5b, 0xcf, 0x8c, 0xa1);
+
+DECLARE_INTERFACE_(IMiniportWaveRTStreamNotification, IMiniportWaveRTStream)
+{
+ DEFINE_ABSTRACT_UNKNOWN()
+
+ DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM()
+
+ STDMETHOD_(NTSTATUS,AllocateBufferWithNotification)
+ ( THIS_
+ IN ULONG NotificationCount,
+ IN ULONG RequestedSize,
+ OUT PMDL *AudioBufferMdl,
+ OUT ULONG *ActualSize,
+ OUT ULONG *OffsetFromFirstPage,
+ OUT MEMORY_CACHING_TYPE *CacheType
+ ) PURE;
+
+ STDMETHOD_(VOID,FreeBufferWithNotification)
+ ( THIS_
+ IN PMDL AudioBufferMdl,
+ IN ULONG BufferSize
+ ) PURE;
+
+ STDMETHOD_(NTSTATUS,RegisterNotificationEvent)
+ ( THIS_
+ IN PKEVENT NotificationEvent
+ ) PURE;
+
+ STDMETHOD_(NTSTATUS,UnregisterNotificationEvent)
+ ( THIS_
+ IN PKEVENT NotificationEvent
+ ) PURE;
+};
+
+/* ===============================================================
+ IMiniportWaveRT Interface
+*/
+
+#undef INTERFACE
+#define INTERFACE IMiniportWaveRT
+
+DEFINE_GUID(IID_IMiniportWaveRT, 0xf9fc4d6, 0x6061, 0x4f3c, 0xb1, 0xfc, 0x7, 0x5e, 0x35, 0xf7, 0x96, 0xa);
+
+DECLARE_INTERFACE_(IMiniportWaveRT, IMiniport)
+{
+ DEFINE_ABSTRACT_UNKNOWN()
+
+ DEFINE_ABSTRACT_MINIPORT()
+
+ STDMETHOD_(NTSTATUS,Init)
+ ( THIS_
+ IN PUNKNOWN UnknownAdapter,
+ IN PRESOURCELIST ResourceList,
+ IN PPORTWAVERT Port
+ ) PURE;
+
+ STDMETHOD_(NTSTATUS,NewStream)
+ ( THIS_
+ OUT PMINIPORTWAVERTSTREAM * Stream,
+ IN PPORTWAVERTSTREAM PortStream,
+ IN ULONG Pin,
+ IN BOOLEAN Capture,
+ IN PKSDATAFORMAT DataFormat
+ ) PURE;
+
+ STDMETHOD_(NTSTATUS,GetDeviceDescription)
+ ( THIS_
+ OUT PDEVICE_DESCRIPTION DeviceDescription
+ ) PURE;
+};
+
+typedef IMiniportWaveRT *PMINIPORTWAVERT;
+
+#endif
+
/* ===============================================================
IAdapterPowerManagement Interface
*/
typedef IPortEvents *PPORTEVENTS;
+#define IMP_IPortEvents \
+ STDMETHODIMP_(void) AddEventToEventList( \
+ IN PKSEVENT_ENTRY EventEntry); \
+ \
+ STDMETHODIMP_(void) GenerateEventList( \
+ IN GUID* Set OPTIONAL, \
+ IN ULONG EventId, \
+ IN BOOL PinEvent, \
+ IN ULONG PinId, \
+ IN BOOL NodeEvent, \
+ IN ULONG NodeId)
+
/* ===============================================================
IDrmPort / IDrmPort2 Interfaces
These are almost identical, except for the addition of two extra methods.
typedef IDrmPort *PDRMPORT;
+#define IMP_IDrmPort \
+ STDMETHODIMP_(NTSTATUS) CreateContentMixed( \
+ IN PULONG paContentId, \
+ IN ULONG cContentId, \
+ OUT PULONG pMixedContentId); \
+ \
+ STDMETHODIMP_(NTSTATUS) DestroyContent( \
+ IN ULONG ContentId); \
+ \
+ STDMETHODIMP_(NTSTATUS) ForwardContentToFileObject( \
+ IN ULONG ContentId, \
+ IN PFILE_OBJECT FileObject); \
+ \
+ STDMETHODIMP_(NTSTATUS) ForwardContentToInterface( \
+ IN ULONG ContentId, \
+ IN PUNKNOWN pUnknown, \
+ IN ULONG NumMethods); \
+ \
+ STDMETHODIMP_(NTSTATUS) GetContentRights( \
+ IN ULONG ContentId, \
+ OUT PDRMRIGHTS DrmRights)
+
+
/* ===============================================================
IDrmPort2 Interface
*/
typedef IDrmPort2 *PDRMPORT2;
+#define IMP_IDrmPort2 \
+ IMP_IDrmPort; \
+ STDMETHODIMP_(NTSTATUS) AddContentHandlers( \
+ IN ULONG ContentId, \
+ IN PVOID * paHandlers, \
+ IN ULONG NumHandlers); \
+ \
+ STDMETHODIMP_(NTSTATUS) ForwardContentToDeviceObject( \
+ IN ULONG ContentId, \
+ IN PVOID Reserved, \
+ IN PCDRMFORWARD DrmForward)
+
+
/* ===============================================================
IPortClsVersion Interface
*/
typedef IPortClsVersion *PPORTCLSVERSION;
+#undef INTERFACE
/* ===============================================================
IDmaOperations Interface
PortCls API Functions
*/
-typedef NTSTATUS (*PCPFNSTARTDEVICE)(
+typedef NTSTATUS (NTAPI *PCPFNSTARTDEVICE)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PRESOURCELIST ResourceList);