- Fix interface definition
[reactos.git] / reactos / include / ddk / portcls.h
index 5c78718..97becb4 100644 (file)
@@ -2,6 +2,8 @@
     ReactOS Kernel Streaming
     Port Class
 
+    This file is in the public domain.
+
     Andrew Greenwood
 
     NOTES:
@@ -138,9 +140,9 @@ extern "C"
 #include <mmreg.h>
 #undef NOBITMAP
 
+#include <punknown.h>
 #include <ks.h>
 #include <ksmedia.h>
-#include <punknown.h>
 #include <drmk.h>
 
 #ifdef __cplusplus
@@ -239,7 +241,7 @@ struct _PCPROPERTY_REQUEST;
 
 typedef struct _PCPROPERTY_REQUEST PCPROPERTY_REQUEST, *PPCPROPERTY_REQUEST;
 
-typedef NTSTATUS (*PCPFNPROPERTY_HANDLER)(
+typedef NTSTATUS (NTAPI *PCPFNPROPERTY_HANDLER)(
     IN  PPCPROPERTY_REQUEST PropertyRequest);
 
 typedef struct
@@ -281,7 +283,7 @@ struct _PCPROPERTY_REQUEST
 
 struct _PCEVENT_REQUEST;
 
-typedef NTSTATUS (*PCPFNEVENT_HANDLER)(
+typedef NTSTATUS (NTAPI *PCPFNEVENT_HANDLER)(
     IN  struct _PCEVENT_REQUEST* EventRequest);
 
 typedef struct _PCEVENT_ITEM
@@ -307,7 +309,7 @@ typedef struct _PCEVENT_REQUEST
 
 struct _PCMETHOD_REQUEST;
 
-typedef NTSTATUS (*PCPFNMETHOD_HANDLER)(
+typedef NTSTATUS (NTAPI *PCPFNMETHOD_HANDLER)(
     IN  struct _PCMETHOD_REQUEST* MethodRequest);
 
 typedef struct _PCMETHOD_ITEM
@@ -663,6 +665,11 @@ DECLARE_INTERFACE_(IUnregisterSubdevice,IUnknown)
 
 typedef IUnregisterSubdevice *PUNREGISTERSUBDEVICE;
 
+#define IMP_IUnregisterSubdevice                        \
+    STDMETHODIMP_(NTSTATUS) UnregisterSubdevice(THIS_   \
+        IN  PDEVICE_OBJECT  DeviceObject,               \
+        IN  PUNKNOWN        Unknown)
+
 /* ===============================================================
     IUnregisterPhysicalConnection Interface
 */
@@ -701,6 +708,29 @@ DECLARE_INTERFACE_(IUnregisterPhysicalConnection,IUnknown)
 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
 */
@@ -733,33 +763,33 @@ typedef IUnregisterPhysicalConnection *PUNREGISTERPHYSICALCONNECTION;
         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
@@ -790,16 +820,17 @@ typedef IDmaChannel *PDMACHANNEL;
     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
@@ -834,7 +865,7 @@ typedef enum
 
 struct IInterruptSync;
 
-typedef NTSTATUS (*PINTERRUPTSYNCROUTINE)(
+typedef NTSTATUS (NTAPI *PINTERRUPTSYNCROUTINE)(
     IN  struct IInterruptSync* InterruptSync,
     IN  PVOID DynamicContext);
 
@@ -861,19 +892,19 @@ DECLARE_INTERFACE_(IInterruptSync, IUnknown)
 
 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;
 
@@ -1057,28 +1088,34 @@ DEFINE_GUID(IID_IPort,
         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)
 {
@@ -1150,7 +1187,7 @@ DECLARE_INTERFACE_(IPortWaveCyclic, IPort)
         IN  PRESOURCELIST ResourceList OPTIONAL,
         IN  ULONG DmaIndex,
         IN  ULONG MaximumLength,
-        IN  BOOL DemandMode,
+        IN  BOOLEAN DemandMode,
         IN  DMA_SPEED DmaSpeed) PURE;
 
     STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_
@@ -1158,8 +1195,8 @@ DECLARE_INTERFACE_(IPortWaveCyclic, IPort)
         IN  PUNKNOWN OuterUnknown,
         IN  PRESOURCELIST ResourceList OPTIONAL,
         IN  ULONG MaximumLength,
-        IN  BOOL Dma32BitAddresses,
-        IN  BOOL Dma64BitAddresses,
+        IN  BOOLEAN Dma32BitAddresses,
+        IN  BOOLEAN Dma64BitAddresses,
         IN  DMA_WIDTH DmaWidth,
         IN  DMA_SPEED DmaSpeed) PURE;
 
@@ -1167,6 +1204,33 @@ DECLARE_INTERFACE_(IPortWaveCyclic, IPort)
 
 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  BOOLEAN DemandMode,                       \
+        IN  DMA_SPEED DmaSpeed);                      \
+                                                      \
+    STDMETHODIMP_(NTSTATUS) NewMasterDmaChannel(      \
+        OUT PDMACHANNEL* DmaChannel,                  \
+        IN  PUNKNOWN OuterUnknown,                    \
+        IN  PRESOURCELIST ResourceList OPTIONAL,      \
+        IN  ULONG MaximumLength,                      \
+        IN  BOOLEAN Dma32BitAddresses,                \
+        IN  BOOLEAN Dma64BitAddresses,                \
+        IN  DMA_WIDTH DmaWidth,                       \
+        IN  DMA_SPEED DmaSpeed)
+#endif
+
+
 #undef INTERFACE
 /* ===============================================================
     IPortWavePci Interface
@@ -1205,6 +1269,26 @@ DECLARE_INTERFACE_(IPortWavePci, IPort)
 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
@@ -1225,17 +1309,17 @@ DEFINE_GUID(IID_IMiniPort,
         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)
 {
@@ -1302,7 +1386,7 @@ DECLARE_INTERFACE_(IMiniportMidi, IMiniport)
     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,
@@ -1340,6 +1424,9 @@ DEFINE_GUIDSTRUCT("0xB4C90A30-5791-11d0-86f9-00a0c911b544", IID_IPortTopology);
 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()
@@ -1360,6 +1447,9 @@ typedef IPortTopology *PPORTTOPOLOGY;
 
 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()
@@ -1513,6 +1603,20 @@ DECLARE_INTERFACE_(IPortWavePciStream,IUnknown)
 
 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
 */
@@ -1588,6 +1692,239 @@ DECLARE_INTERFACE_(IMiniportWavePci,IMiniport)
 
 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
 */
@@ -1701,6 +2038,18 @@ DECLARE_INTERFACE_(IPortEvents, IUnknown)
 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.
@@ -1743,6 +2092,29 @@ DECLARE_INTERFACE_(IDrmPort, IUnknown)
 
 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
 */
@@ -1772,6 +2144,19 @@ DECLARE_INTERFACE_(IDrmPort2, IDrmPort)
 
 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
 */
@@ -1794,6 +2179,7 @@ DECLARE_INTERFACE_(IPortClsVersion, IUnknown)
 
 typedef IPortClsVersion *PPORTCLSVERSION;
 
+#undef INTERFACE
 
 /* ===============================================================
     IDmaOperations Interface
@@ -1809,7 +2195,7 @@ typedef IPortClsVersion *PPORTCLSVERSION;
     PortCls API Functions
 */
 
-typedef NTSTATUS (*PCPFNSTARTDEVICE)(
+typedef NTSTATUS (NTAPI *PCPFNSTARTDEVICE)(
     IN  PDEVICE_OBJECT DeviceObject,
     IN  PIRP Irp,
     IN  PRESOURCELIST ResourceList);