/*** Autogenerated by WIDL 2.6 from ../../wine/include/wmsdkidl.idl - Do not edit ***/

#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif

#include <rpc.h>
#include <rpcndr.h>

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __wmsdkidl_h__
#define __wmsdkidl_h__

/* Forward declarations */

#ifndef __IWMStatusCallback_FWD_DEFINED__
#define __IWMStatusCallback_FWD_DEFINED__
typedef interface IWMStatusCallback IWMStatusCallback;
#ifdef __cplusplus
interface IWMStatusCallback;
#endif /* __cplusplus */
#endif

#ifndef __IWMReaderCallback_FWD_DEFINED__
#define __IWMReaderCallback_FWD_DEFINED__
typedef interface IWMReaderCallback IWMReaderCallback;
#ifdef __cplusplus
interface IWMReaderCallback;
#endif /* __cplusplus */
#endif

#ifndef __IWMStreamList_FWD_DEFINED__
#define __IWMStreamList_FWD_DEFINED__
typedef interface IWMStreamList IWMStreamList;
#ifdef __cplusplus
interface IWMStreamList;
#endif /* __cplusplus */
#endif

#ifndef __IWMMutualExclusion_FWD_DEFINED__
#define __IWMMutualExclusion_FWD_DEFINED__
typedef interface IWMMutualExclusion IWMMutualExclusion;
#ifdef __cplusplus
interface IWMMutualExclusion;
#endif /* __cplusplus */
#endif

#ifndef __IWMStreamConfig_FWD_DEFINED__
#define __IWMStreamConfig_FWD_DEFINED__
typedef interface IWMStreamConfig IWMStreamConfig;
#ifdef __cplusplus
interface IWMStreamConfig;
#endif /* __cplusplus */
#endif

#ifndef __IWMProfile_FWD_DEFINED__
#define __IWMProfile_FWD_DEFINED__
typedef interface IWMProfile IWMProfile;
#ifdef __cplusplus
interface IWMProfile;
#endif /* __cplusplus */
#endif

#ifndef __IWMProfileManager_FWD_DEFINED__
#define __IWMProfileManager_FWD_DEFINED__
typedef interface IWMProfileManager IWMProfileManager;
#ifdef __cplusplus
interface IWMProfileManager;
#endif /* __cplusplus */
#endif

#ifndef __IWMMediaProps_FWD_DEFINED__
#define __IWMMediaProps_FWD_DEFINED__
typedef interface IWMMediaProps IWMMediaProps;
#ifdef __cplusplus
interface IWMMediaProps;
#endif /* __cplusplus */
#endif

#ifndef __IWMOutputMediaProps_FWD_DEFINED__
#define __IWMOutputMediaProps_FWD_DEFINED__
typedef interface IWMOutputMediaProps IWMOutputMediaProps;
#ifdef __cplusplus
interface IWMOutputMediaProps;
#endif /* __cplusplus */
#endif

#ifndef __IWMMetadataEditor_FWD_DEFINED__
#define __IWMMetadataEditor_FWD_DEFINED__
typedef interface IWMMetadataEditor IWMMetadataEditor;
#ifdef __cplusplus
interface IWMMetadataEditor;
#endif /* __cplusplus */
#endif

#ifndef __IWMReader_FWD_DEFINED__
#define __IWMReader_FWD_DEFINED__
typedef interface IWMReader IWMReader;
#ifdef __cplusplus
interface IWMReader;
#endif /* __cplusplus */
#endif

#ifndef __IWMPlayerHook_FWD_DEFINED__
#define __IWMPlayerHook_FWD_DEFINED__
typedef interface IWMPlayerHook IWMPlayerHook;
#ifdef __cplusplus
interface IWMPlayerHook;
#endif /* __cplusplus */
#endif

#ifndef __IWMReaderAdvanced_FWD_DEFINED__
#define __IWMReaderAdvanced_FWD_DEFINED__
typedef interface IWMReaderAdvanced IWMReaderAdvanced;
#ifdef __cplusplus
interface IWMReaderAdvanced;
#endif /* __cplusplus */
#endif

#ifndef __IWMReaderAdvanced2_FWD_DEFINED__
#define __IWMReaderAdvanced2_FWD_DEFINED__
typedef interface IWMReaderAdvanced2 IWMReaderAdvanced2;
#ifdef __cplusplus
interface IWMReaderAdvanced2;
#endif /* __cplusplus */
#endif

#ifndef __IWMReaderAdvanced3_FWD_DEFINED__
#define __IWMReaderAdvanced3_FWD_DEFINED__
typedef interface IWMReaderAdvanced3 IWMReaderAdvanced3;
#ifdef __cplusplus
interface IWMReaderAdvanced3;
#endif /* __cplusplus */
#endif

#ifndef __IWMReaderAdvanced4_FWD_DEFINED__
#define __IWMReaderAdvanced4_FWD_DEFINED__
typedef interface IWMReaderAdvanced4 IWMReaderAdvanced4;
#ifdef __cplusplus
interface IWMReaderAdvanced4;
#endif /* __cplusplus */
#endif

#ifndef __IWMReaderAdvanced5_FWD_DEFINED__
#define __IWMReaderAdvanced5_FWD_DEFINED__
typedef interface IWMReaderAdvanced5 IWMReaderAdvanced5;
#ifdef __cplusplus
interface IWMReaderAdvanced5;
#endif /* __cplusplus */
#endif

#ifndef __IWMReaderAdvanced6_FWD_DEFINED__
#define __IWMReaderAdvanced6_FWD_DEFINED__
typedef interface IWMReaderAdvanced6 IWMReaderAdvanced6;
#ifdef __cplusplus
interface IWMReaderAdvanced6;
#endif /* __cplusplus */
#endif

#ifndef __IWMSyncReader_FWD_DEFINED__
#define __IWMSyncReader_FWD_DEFINED__
typedef interface IWMSyncReader IWMSyncReader;
#ifdef __cplusplus
interface IWMSyncReader;
#endif /* __cplusplus */
#endif

#ifndef __IWMInputMediaProps_FWD_DEFINED__
#define __IWMInputMediaProps_FWD_DEFINED__
typedef interface IWMInputMediaProps IWMInputMediaProps;
#ifdef __cplusplus
interface IWMInputMediaProps;
#endif /* __cplusplus */
#endif

#ifndef __IWMWriterSink_FWD_DEFINED__
#define __IWMWriterSink_FWD_DEFINED__
typedef interface IWMWriterSink IWMWriterSink;
#ifdef __cplusplus
interface IWMWriterSink;
#endif /* __cplusplus */
#endif

#ifndef __IWMWriter_FWD_DEFINED__
#define __IWMWriter_FWD_DEFINED__
typedef interface IWMWriter IWMWriter;
#ifdef __cplusplus
interface IWMWriter;
#endif /* __cplusplus */
#endif

#ifndef __IWMWriterAdvanced_FWD_DEFINED__
#define __IWMWriterAdvanced_FWD_DEFINED__
typedef interface IWMWriterAdvanced IWMWriterAdvanced;
#ifdef __cplusplus
interface IWMWriterAdvanced;
#endif /* __cplusplus */
#endif

#ifndef __IWMWriterAdvanced2_FWD_DEFINED__
#define __IWMWriterAdvanced2_FWD_DEFINED__
typedef interface IWMWriterAdvanced2 IWMWriterAdvanced2;
#ifdef __cplusplus
interface IWMWriterAdvanced2;
#endif /* __cplusplus */
#endif

#ifndef __IWMWriterAdvanced3_FWD_DEFINED__
#define __IWMWriterAdvanced3_FWD_DEFINED__
typedef interface IWMWriterAdvanced3 IWMWriterAdvanced3;
#ifdef __cplusplus
interface IWMWriterAdvanced3;
#endif /* __cplusplus */
#endif

#ifndef __IWMHeaderInfo_FWD_DEFINED__
#define __IWMHeaderInfo_FWD_DEFINED__
typedef interface IWMHeaderInfo IWMHeaderInfo;
#ifdef __cplusplus
interface IWMHeaderInfo;
#endif /* __cplusplus */
#endif

#ifndef __IWMHeaderInfo2_FWD_DEFINED__
#define __IWMHeaderInfo2_FWD_DEFINED__
typedef interface IWMHeaderInfo2 IWMHeaderInfo2;
#ifdef __cplusplus
interface IWMHeaderInfo2;
#endif /* __cplusplus */
#endif

#ifndef __IWMHeaderInfo3_FWD_DEFINED__
#define __IWMHeaderInfo3_FWD_DEFINED__
typedef interface IWMHeaderInfo3 IWMHeaderInfo3;
#ifdef __cplusplus
interface IWMHeaderInfo3;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <oaidl.h>
#include <wmsbuffer.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef UINT64 QWORD;
typedef struct _WMMediaType {
    GUID majortype;
    GUID subtype;
    BOOL bFixedSizeSamples;
    BOOL bTemporalCompression;
    ULONG lSampleSize;
    GUID formattype;
    IUnknown *pUnk;
    ULONG cbFormat;
    BYTE *pbFormat;
} WM_MEDIA_TYPE;
typedef struct _WMWriterStatistics {
    QWORD qwSampleCount;
    QWORD qwByteCount;
    QWORD qwDroppedSampleCount;
    QWORD qwDroppedByteCount;
    DWORD dwCurrentBitrate;
    DWORD dwAverageBitrate;
    DWORD dwExpectedBitrate;
    DWORD dwCurrentSampleRate;
    DWORD dwAverageSampleRate;
    DWORD dwExpectedSampleRate;
} WM_WRITER_STATISTICS;
typedef struct _WMWriterStatisticsEx {
    DWORD dwBitratePlusOverhead;
    DWORD dwCurrentSampleDropRateInQueue;
    DWORD dwCurrentSampleDropRateInCodec;
    DWORD dwCurrentSampleDropRateInMultiplexer;
    DWORD dwTotalSampleDropsInQueue;
    DWORD dwTotalSampleDropsInCodec;
    DWORD dwTotalSampleDropsInMultiplexer;
} WM_WRITER_STATISTICS_EX;
typedef struct _WMReaderStatistics {
    DWORD cbSize;
    DWORD dwBandwidth;
    DWORD cPacketsReceived;
    DWORD cPacketsRecovered;
    DWORD cPacketsLost;
    WORD wQuality;
} WM_READER_STATISTICS;
typedef struct _WMReaderClientInfo {
    DWORD cbSize;
    WCHAR *wszLang;
    WCHAR *wszBrowserUserAgent;
    WCHAR *wszBrowserWebPage;
    QWORD qwReserved;
    LPARAM *pReserved;
    WCHAR *wszHostExe;
    QWORD qwHostVersion;
    WCHAR *wszPlayerUserAgent;
} WM_READER_CLIENTINFO;
typedef enum WMT_ATTR_DATATYPE {
    WMT_TYPE_DWORD = 0,
    WMT_TYPE_STRING = 1,
    WMT_TYPE_BINARY = 2,
    WMT_TYPE_BOOL = 3,
    WMT_TYPE_QWORD = 4,
    WMT_TYPE_WORD = 5,
    WMT_TYPE_GUID = 6
} WMT_ATTR_DATATYPE;
typedef enum WMT_STATUS {
    WMT_ERROR = 0,
    WMT_OPENED = 1,
    WMT_BUFFERING_START = 2,
    WMT_BUFFERING_STOP = 3,
    WMT_EOF = 4,
    WMT_END_OF_FILE = 4,
    WMT_END_OF_SEGMENT = 5,
    WMT_END_OF_STREAMING = 6,
    WMT_LOCATING = 7,
    WMT_CONNECTING = 8,
    WMT_NO_RIGHTS = 9,
    WMT_MISSING_CODEC = 10,
    WMT_STARTED = 11,
    WMT_STOPPED = 12,
    WMT_CLOSED = 13,
    WMT_STRIDING = 14,
    WMT_TIMER = 15,
    WMT_INDEX_PROGRESS = 16,
    WMT_SAVEAS_START = 17,
    WMT_SAVEAS_STOP = 18,
    WMT_NEW_SOURCEFLAGS = 19,
    WMT_NEW_METADATA = 20,
    WMT_BACKUPRESTORE_BEGIN = 21,
    WMT_SOURCE_SWITCH = 22,
    WMT_ACQUIRE_LICENSE = 23,
    WMT_INDIVIDUALIZE = 24,
    WMT_NEEDS_INDIVIDUALIZATION = 25,
    WMT_NO_RIGHTS_EX = 26,
    WMT_BACKUPRESTORE_END = 27,
    WMT_BACKUPRESTORE_CONNECTING = 28,
    WMT_BACKUPRESTORE_DISCONNECTING = 29,
    WMT_ERROR_WITHURL = 30,
    WMT_RESTRICTED_LICENSE = 31,
    WMT_CLIENT_CONNECT = 32,
    WMT_CLIENT_DISCONNECT = 33,
    WMT_NATIVE_OUTPUT_PROPS_CHANGED = 34,
    WMT_RECONNECT_START = 35,
    WMT_RECONNECT_END = 36,
    WMT_CLIENT_CONNECT_EX = 37,
    WMT_CLIENT_DISCONNECT_EX = 38,
    WMT_SET_FEC_SPAN = 39,
    WMT_PREROLL_READY = 40,
    WMT_PREROLL_COMPLETE = 41,
    WMT_CLIENT_PROPERTIES = 42,
    WMT_LICENSEURL_SIGNATURE_STATE = 43,
    WMT_INIT_PLAYLIST_BURN = 44,
    WMT_TRANSCRYPTOR_INIT = 45,
    WMT_TRANSCRYPTOR_SEEKED = 46,
    WMT_TRANSCRYPTOR_READ = 47,
    WMT_TRANSCRYPTOR_CLOSED = 48,
    WMT_PROXIMITY_RESULT = 49,
    WMT_PROXIMITY_COMPLETED = 50,
    WMT_CONTENT_ENABLER = 51
} WMT_STATUS;
typedef enum WMT_STREAM_SELECTION {
    WMT_OFF = 0,
    WMT_CLEANPOINT_ONLY = 1,
    WMT_ON = 2
} WMT_STREAM_SELECTION;
typedef enum WMT_VERSION {
    WMT_VER_4_0 = 0x40000,
    WMT_VER_7_0 = 0x70000,
    WMT_VER_8_0 = 0x80000,
    WMT_VER_9_0 = 0x90000
} WMT_VERSION;
typedef enum WMT_PLAY_MODE {
    WMT_PLAY_MODE_AUTOSELECT = 0,
    WMT_PLAY_MODE_LOCAL = 1,
    WMT_PLAY_MODE_DOWNLOAD = 2,
    WMT_PLAY_MODE_STREAMING = 3
} WMT_PLAY_MODE;
typedef enum tagWMT_OFFSET_FORMAT {
    WMT_OFFSET_FORMAT_100NS = 0,
    WMT_OFFSET_FORMAT_FRAME_NUMBERS = 1,
    WMT_OFFSET_FORMAT_PLAYLIST_OFFSET = 2,
    WMT_OFFSET_FORMAT_TIMECODE = 3,
    WMT_OFFSET_FORMAT_100NS_APPROXIMATE = 4
} WMT_OFFSET_FORMAT;
typedef enum WMT_CODEC_INFO_TYPE {
    WMT_CODECINFO_AUDIO = 0,
    WMT_CODECINFO_VIDEO = 1,
    WMT_CODECINFO_UNKNOWN = 0xffffffff
} WMT_CODEC_INFO_TYPE;
typedef LPCWSTR LPCWSTR_WMSDK_TYPE_SAFE;
/*****************************************************************************
 * IWMStatusCallback interface
 */
#ifndef __IWMStatusCallback_INTERFACE_DEFINED__
#define __IWMStatusCallback_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMStatusCallback, 0x6d7cdc70, 0x9888, 0x11d3, 0x8e,0xdc, 0x00,0xc0,0x4f,0x61,0x09,0xcf);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6d7cdc70-9888-11d3-8edc-00c04f6109cf")
IWMStatusCallback : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE OnStatus(
        WMT_STATUS Status,
        HRESULT hr,
        WMT_ATTR_DATATYPE dwType,
        BYTE *pValue,
        void *pvContext) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMStatusCallback, 0x6d7cdc70, 0x9888, 0x11d3, 0x8e,0xdc, 0x00,0xc0,0x4f,0x61,0x09,0xcf)
#endif
#else
typedef struct IWMStatusCallbackVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMStatusCallback *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMStatusCallback *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMStatusCallback *This);

    /*** IWMStatusCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnStatus)(
        IWMStatusCallback *This,
        WMT_STATUS Status,
        HRESULT hr,
        WMT_ATTR_DATATYPE dwType,
        BYTE *pValue,
        void *pvContext);

    END_INTERFACE
} IWMStatusCallbackVtbl;

interface IWMStatusCallback {
    CONST_VTBL IWMStatusCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMStatusCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMStatusCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMStatusCallback_Release(This) (This)->lpVtbl->Release(This)
/*** IWMStatusCallback methods ***/
#define IWMStatusCallback_OnStatus(This,Status,hr,dwType,pValue,pvContext) (This)->lpVtbl->OnStatus(This,Status,hr,dwType,pValue,pvContext)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMStatusCallback_QueryInterface(IWMStatusCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMStatusCallback_AddRef(IWMStatusCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMStatusCallback_Release(IWMStatusCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMStatusCallback methods ***/
static FORCEINLINE HRESULT IWMStatusCallback_OnStatus(IWMStatusCallback* This,WMT_STATUS Status,HRESULT hr,WMT_ATTR_DATATYPE dwType,BYTE *pValue,void *pvContext) {
    return This->lpVtbl->OnStatus(This,Status,hr,dwType,pValue,pvContext);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMStatusCallback_OnStatus_Proxy(
    IWMStatusCallback* This,
    WMT_STATUS Status,
    HRESULT hr,
    WMT_ATTR_DATATYPE dwType,
    BYTE *pValue,
    void *pvContext);
void __RPC_STUB IWMStatusCallback_OnStatus_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMStatusCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMReaderCallback interface
 */
#ifndef __IWMReaderCallback_INTERFACE_DEFINED__
#define __IWMReaderCallback_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMReaderCallback, 0x96406bd8, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406bd8-2b2b-11d3-b36b-00c04f6108ff")
IWMReaderCallback : public IWMStatusCallback
{
    virtual HRESULT STDMETHODCALLTYPE OnSample(
        DWORD dwOutputNum,
        QWORD cnsSampleTime,
        QWORD cnsSampleDuration,
        DWORD dwFlags,
        INSSBuffer *pSample,
        void *pvContext) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMReaderCallback, 0x96406bd8, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMReaderCallbackVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMReaderCallback *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMReaderCallback *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMReaderCallback *This);

    /*** IWMStatusCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnStatus)(
        IWMReaderCallback *This,
        WMT_STATUS Status,
        HRESULT hr,
        WMT_ATTR_DATATYPE dwType,
        BYTE *pValue,
        void *pvContext);

    /*** IWMReaderCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnSample)(
        IWMReaderCallback *This,
        DWORD dwOutputNum,
        QWORD cnsSampleTime,
        QWORD cnsSampleDuration,
        DWORD dwFlags,
        INSSBuffer *pSample,
        void *pvContext);

    END_INTERFACE
} IWMReaderCallbackVtbl;

interface IWMReaderCallback {
    CONST_VTBL IWMReaderCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMReaderCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMReaderCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMReaderCallback_Release(This) (This)->lpVtbl->Release(This)
/*** IWMStatusCallback methods ***/
#define IWMReaderCallback_OnStatus(This,Status,hr,dwType,pValue,pvContext) (This)->lpVtbl->OnStatus(This,Status,hr,dwType,pValue,pvContext)
/*** IWMReaderCallback methods ***/
#define IWMReaderCallback_OnSample(This,dwOutputNum,cnsSampleTime,cnsSampleDuration,dwFlags,pSample,pvContext) (This)->lpVtbl->OnSample(This,dwOutputNum,cnsSampleTime,cnsSampleDuration,dwFlags,pSample,pvContext)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMReaderCallback_QueryInterface(IWMReaderCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMReaderCallback_AddRef(IWMReaderCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMReaderCallback_Release(IWMReaderCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMStatusCallback methods ***/
static FORCEINLINE HRESULT IWMReaderCallback_OnStatus(IWMReaderCallback* This,WMT_STATUS Status,HRESULT hr,WMT_ATTR_DATATYPE dwType,BYTE *pValue,void *pvContext) {
    return This->lpVtbl->OnStatus(This,Status,hr,dwType,pValue,pvContext);
}
/*** IWMReaderCallback methods ***/
static FORCEINLINE HRESULT IWMReaderCallback_OnSample(IWMReaderCallback* This,DWORD dwOutputNum,QWORD cnsSampleTime,QWORD cnsSampleDuration,DWORD dwFlags,INSSBuffer *pSample,void *pvContext) {
    return This->lpVtbl->OnSample(This,dwOutputNum,cnsSampleTime,cnsSampleDuration,dwFlags,pSample,pvContext);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMReaderCallback_OnSample_Proxy(
    IWMReaderCallback* This,
    DWORD dwOutputNum,
    QWORD cnsSampleTime,
    QWORD cnsSampleDuration,
    DWORD dwFlags,
    INSSBuffer *pSample,
    void *pvContext);
void __RPC_STUB IWMReaderCallback_OnSample_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMReaderCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMStreamList interface
 */
#ifndef __IWMStreamList_INTERFACE_DEFINED__
#define __IWMStreamList_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMStreamList, 0x96406bdd, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406bdd-2b2b-11d3-b36b-00c04f6108ff")
IWMStreamList : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetStreams(
        WORD *pwStreamNumArray,
        WORD *pcStreams) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddStream(
        WORD wStreamNum) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveStream(
        WORD wStreamNum) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMStreamList, 0x96406bdd, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMStreamListVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMStreamList *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMStreamList *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMStreamList *This);

    /*** IWMStreamList methods ***/
    HRESULT (STDMETHODCALLTYPE *GetStreams)(
        IWMStreamList *This,
        WORD *pwStreamNumArray,
        WORD *pcStreams);

    HRESULT (STDMETHODCALLTYPE *AddStream)(
        IWMStreamList *This,
        WORD wStreamNum);

    HRESULT (STDMETHODCALLTYPE *RemoveStream)(
        IWMStreamList *This,
        WORD wStreamNum);

    END_INTERFACE
} IWMStreamListVtbl;

interface IWMStreamList {
    CONST_VTBL IWMStreamListVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMStreamList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMStreamList_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMStreamList_Release(This) (This)->lpVtbl->Release(This)
/*** IWMStreamList methods ***/
#define IWMStreamList_GetStreams(This,pwStreamNumArray,pcStreams) (This)->lpVtbl->GetStreams(This,pwStreamNumArray,pcStreams)
#define IWMStreamList_AddStream(This,wStreamNum) (This)->lpVtbl->AddStream(This,wStreamNum)
#define IWMStreamList_RemoveStream(This,wStreamNum) (This)->lpVtbl->RemoveStream(This,wStreamNum)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMStreamList_QueryInterface(IWMStreamList* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMStreamList_AddRef(IWMStreamList* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMStreamList_Release(IWMStreamList* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMStreamList methods ***/
static FORCEINLINE HRESULT IWMStreamList_GetStreams(IWMStreamList* This,WORD *pwStreamNumArray,WORD *pcStreams) {
    return This->lpVtbl->GetStreams(This,pwStreamNumArray,pcStreams);
}
static FORCEINLINE HRESULT IWMStreamList_AddStream(IWMStreamList* This,WORD wStreamNum) {
    return This->lpVtbl->AddStream(This,wStreamNum);
}
static FORCEINLINE HRESULT IWMStreamList_RemoveStream(IWMStreamList* This,WORD wStreamNum) {
    return This->lpVtbl->RemoveStream(This,wStreamNum);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMStreamList_GetStreams_Proxy(
    IWMStreamList* This,
    WORD *pwStreamNumArray,
    WORD *pcStreams);
void __RPC_STUB IWMStreamList_GetStreams_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMStreamList_AddStream_Proxy(
    IWMStreamList* This,
    WORD wStreamNum);
void __RPC_STUB IWMStreamList_AddStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMStreamList_RemoveStream_Proxy(
    IWMStreamList* This,
    WORD wStreamNum);
void __RPC_STUB IWMStreamList_RemoveStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMStreamList_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMMutualExclusion interface
 */
#ifndef __IWMMutualExclusion_INTERFACE_DEFINED__
#define __IWMMutualExclusion_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMMutualExclusion, 0x96406bde, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406bde-2b2b-11d3-b36b-00c04f6108ff")
IWMMutualExclusion : public IWMStreamList
{
    virtual HRESULT STDMETHODCALLTYPE GetType(
        GUID *pguidType) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetType(
        REFGUID guidType) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMMutualExclusion, 0x96406bde, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMMutualExclusionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMMutualExclusion *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMMutualExclusion *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMMutualExclusion *This);

    /*** IWMStreamList methods ***/
    HRESULT (STDMETHODCALLTYPE *GetStreams)(
        IWMMutualExclusion *This,
        WORD *pwStreamNumArray,
        WORD *pcStreams);

    HRESULT (STDMETHODCALLTYPE *AddStream)(
        IWMMutualExclusion *This,
        WORD wStreamNum);

    HRESULT (STDMETHODCALLTYPE *RemoveStream)(
        IWMMutualExclusion *This,
        WORD wStreamNum);

    /*** IWMMutualExclusion methods ***/
    HRESULT (STDMETHODCALLTYPE *GetType)(
        IWMMutualExclusion *This,
        GUID *pguidType);

    HRESULT (STDMETHODCALLTYPE *SetType)(
        IWMMutualExclusion *This,
        REFGUID guidType);

    END_INTERFACE
} IWMMutualExclusionVtbl;

interface IWMMutualExclusion {
    CONST_VTBL IWMMutualExclusionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMMutualExclusion_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMMutualExclusion_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMMutualExclusion_Release(This) (This)->lpVtbl->Release(This)
/*** IWMStreamList methods ***/
#define IWMMutualExclusion_GetStreams(This,pwStreamNumArray,pcStreams) (This)->lpVtbl->GetStreams(This,pwStreamNumArray,pcStreams)
#define IWMMutualExclusion_AddStream(This,wStreamNum) (This)->lpVtbl->AddStream(This,wStreamNum)
#define IWMMutualExclusion_RemoveStream(This,wStreamNum) (This)->lpVtbl->RemoveStream(This,wStreamNum)
/*** IWMMutualExclusion methods ***/
#define IWMMutualExclusion_GetType(This,pguidType) (This)->lpVtbl->GetType(This,pguidType)
#define IWMMutualExclusion_SetType(This,guidType) (This)->lpVtbl->SetType(This,guidType)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMMutualExclusion_QueryInterface(IWMMutualExclusion* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMMutualExclusion_AddRef(IWMMutualExclusion* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMMutualExclusion_Release(IWMMutualExclusion* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMStreamList methods ***/
static FORCEINLINE HRESULT IWMMutualExclusion_GetStreams(IWMMutualExclusion* This,WORD *pwStreamNumArray,WORD *pcStreams) {
    return This->lpVtbl->GetStreams(This,pwStreamNumArray,pcStreams);
}
static FORCEINLINE HRESULT IWMMutualExclusion_AddStream(IWMMutualExclusion* This,WORD wStreamNum) {
    return This->lpVtbl->AddStream(This,wStreamNum);
}
static FORCEINLINE HRESULT IWMMutualExclusion_RemoveStream(IWMMutualExclusion* This,WORD wStreamNum) {
    return This->lpVtbl->RemoveStream(This,wStreamNum);
}
/*** IWMMutualExclusion methods ***/
static FORCEINLINE HRESULT IWMMutualExclusion_GetType(IWMMutualExclusion* This,GUID *pguidType) {
    return This->lpVtbl->GetType(This,pguidType);
}
static FORCEINLINE HRESULT IWMMutualExclusion_SetType(IWMMutualExclusion* This,REFGUID guidType) {
    return This->lpVtbl->SetType(This,guidType);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMMutualExclusion_GetType_Proxy(
    IWMMutualExclusion* This,
    GUID *pguidType);
void __RPC_STUB IWMMutualExclusion_GetType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMMutualExclusion_SetType_Proxy(
    IWMMutualExclusion* This,
    REFGUID guidType);
void __RPC_STUB IWMMutualExclusion_SetType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMMutualExclusion_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMStreamConfig interface
 */
#ifndef __IWMStreamConfig_INTERFACE_DEFINED__
#define __IWMStreamConfig_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMStreamConfig, 0x96406bdc, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406bdc-2b2b-11d3-b36b-00c04f6108ff")
IWMStreamConfig : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetStreamType(
        GUID *pguidStreamType) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamNumber(
        WORD *pwStreamNum) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStreamNumber(
        WORD wStreamNum) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamName(
        WCHAR *pwszStreamName,
        WORD *pcchStreamName) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStreamName(
        LPCWSTR_WMSDK_TYPE_SAFE pwszStreamName) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetConnectionName(
        WCHAR *pwszInputName,
        WORD *pcchInputName) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetConnectionName(
        LPCWSTR_WMSDK_TYPE_SAFE pwszInputName) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBitrate(
        DWORD *pdwBitrate) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBitrate(
        DWORD pdwBitrate) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBufferWindow(
        DWORD *pmsBufferWindow) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBufferWindow(
        DWORD msBufferWindow) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMStreamConfig, 0x96406bdc, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMStreamConfigVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMStreamConfig *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMStreamConfig *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMStreamConfig *This);

    /*** IWMStreamConfig methods ***/
    HRESULT (STDMETHODCALLTYPE *GetStreamType)(
        IWMStreamConfig *This,
        GUID *pguidStreamType);

    HRESULT (STDMETHODCALLTYPE *GetStreamNumber)(
        IWMStreamConfig *This,
        WORD *pwStreamNum);

    HRESULT (STDMETHODCALLTYPE *SetStreamNumber)(
        IWMStreamConfig *This,
        WORD wStreamNum);

    HRESULT (STDMETHODCALLTYPE *GetStreamName)(
        IWMStreamConfig *This,
        WCHAR *pwszStreamName,
        WORD *pcchStreamName);

    HRESULT (STDMETHODCALLTYPE *SetStreamName)(
        IWMStreamConfig *This,
        LPCWSTR_WMSDK_TYPE_SAFE pwszStreamName);

    HRESULT (STDMETHODCALLTYPE *GetConnectionName)(
        IWMStreamConfig *This,
        WCHAR *pwszInputName,
        WORD *pcchInputName);

    HRESULT (STDMETHODCALLTYPE *SetConnectionName)(
        IWMStreamConfig *This,
        LPCWSTR_WMSDK_TYPE_SAFE pwszInputName);

    HRESULT (STDMETHODCALLTYPE *GetBitrate)(
        IWMStreamConfig *This,
        DWORD *pdwBitrate);

    HRESULT (STDMETHODCALLTYPE *SetBitrate)(
        IWMStreamConfig *This,
        DWORD pdwBitrate);

    HRESULT (STDMETHODCALLTYPE *GetBufferWindow)(
        IWMStreamConfig *This,
        DWORD *pmsBufferWindow);

    HRESULT (STDMETHODCALLTYPE *SetBufferWindow)(
        IWMStreamConfig *This,
        DWORD msBufferWindow);

    END_INTERFACE
} IWMStreamConfigVtbl;

interface IWMStreamConfig {
    CONST_VTBL IWMStreamConfigVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMStreamConfig_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMStreamConfig_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMStreamConfig_Release(This) (This)->lpVtbl->Release(This)
/*** IWMStreamConfig methods ***/
#define IWMStreamConfig_GetStreamType(This,pguidStreamType) (This)->lpVtbl->GetStreamType(This,pguidStreamType)
#define IWMStreamConfig_GetStreamNumber(This,pwStreamNum) (This)->lpVtbl->GetStreamNumber(This,pwStreamNum)
#define IWMStreamConfig_SetStreamNumber(This,wStreamNum) (This)->lpVtbl->SetStreamNumber(This,wStreamNum)
#define IWMStreamConfig_GetStreamName(This,pwszStreamName,pcchStreamName) (This)->lpVtbl->GetStreamName(This,pwszStreamName,pcchStreamName)
#define IWMStreamConfig_SetStreamName(This,pwszStreamName) (This)->lpVtbl->SetStreamName(This,pwszStreamName)
#define IWMStreamConfig_GetConnectionName(This,pwszInputName,pcchInputName) (This)->lpVtbl->GetConnectionName(This,pwszInputName,pcchInputName)
#define IWMStreamConfig_SetConnectionName(This,pwszInputName) (This)->lpVtbl->SetConnectionName(This,pwszInputName)
#define IWMStreamConfig_GetBitrate(This,pdwBitrate) (This)->lpVtbl->GetBitrate(This,pdwBitrate)
#define IWMStreamConfig_SetBitrate(This,pdwBitrate) (This)->lpVtbl->SetBitrate(This,pdwBitrate)
#define IWMStreamConfig_GetBufferWindow(This,pmsBufferWindow) (This)->lpVtbl->GetBufferWindow(This,pmsBufferWindow)
#define IWMStreamConfig_SetBufferWindow(This,msBufferWindow) (This)->lpVtbl->SetBufferWindow(This,msBufferWindow)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMStreamConfig_QueryInterface(IWMStreamConfig* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMStreamConfig_AddRef(IWMStreamConfig* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMStreamConfig_Release(IWMStreamConfig* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMStreamConfig methods ***/
static FORCEINLINE HRESULT IWMStreamConfig_GetStreamType(IWMStreamConfig* This,GUID *pguidStreamType) {
    return This->lpVtbl->GetStreamType(This,pguidStreamType);
}
static FORCEINLINE HRESULT IWMStreamConfig_GetStreamNumber(IWMStreamConfig* This,WORD *pwStreamNum) {
    return This->lpVtbl->GetStreamNumber(This,pwStreamNum);
}
static FORCEINLINE HRESULT IWMStreamConfig_SetStreamNumber(IWMStreamConfig* This,WORD wStreamNum) {
    return This->lpVtbl->SetStreamNumber(This,wStreamNum);
}
static FORCEINLINE HRESULT IWMStreamConfig_GetStreamName(IWMStreamConfig* This,WCHAR *pwszStreamName,WORD *pcchStreamName) {
    return This->lpVtbl->GetStreamName(This,pwszStreamName,pcchStreamName);
}
static FORCEINLINE HRESULT IWMStreamConfig_SetStreamName(IWMStreamConfig* This,LPCWSTR_WMSDK_TYPE_SAFE pwszStreamName) {
    return This->lpVtbl->SetStreamName(This,pwszStreamName);
}
static FORCEINLINE HRESULT IWMStreamConfig_GetConnectionName(IWMStreamConfig* This,WCHAR *pwszInputName,WORD *pcchInputName) {
    return This->lpVtbl->GetConnectionName(This,pwszInputName,pcchInputName);
}
static FORCEINLINE HRESULT IWMStreamConfig_SetConnectionName(IWMStreamConfig* This,LPCWSTR_WMSDK_TYPE_SAFE pwszInputName) {
    return This->lpVtbl->SetConnectionName(This,pwszInputName);
}
static FORCEINLINE HRESULT IWMStreamConfig_GetBitrate(IWMStreamConfig* This,DWORD *pdwBitrate) {
    return This->lpVtbl->GetBitrate(This,pdwBitrate);
}
static FORCEINLINE HRESULT IWMStreamConfig_SetBitrate(IWMStreamConfig* This,DWORD pdwBitrate) {
    return This->lpVtbl->SetBitrate(This,pdwBitrate);
}
static FORCEINLINE HRESULT IWMStreamConfig_GetBufferWindow(IWMStreamConfig* This,DWORD *pmsBufferWindow) {
    return This->lpVtbl->GetBufferWindow(This,pmsBufferWindow);
}
static FORCEINLINE HRESULT IWMStreamConfig_SetBufferWindow(IWMStreamConfig* This,DWORD msBufferWindow) {
    return This->lpVtbl->SetBufferWindow(This,msBufferWindow);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMStreamConfig_GetStreamType_Proxy(
    IWMStreamConfig* This,
    GUID *pguidStreamType);
void __RPC_STUB IWMStreamConfig_GetStreamType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMStreamConfig_GetStreamNumber_Proxy(
    IWMStreamConfig* This,
    WORD *pwStreamNum);
void __RPC_STUB IWMStreamConfig_GetStreamNumber_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMStreamConfig_SetStreamNumber_Proxy(
    IWMStreamConfig* This,
    WORD wStreamNum);
void __RPC_STUB IWMStreamConfig_SetStreamNumber_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMStreamConfig_GetStreamName_Proxy(
    IWMStreamConfig* This,
    WCHAR *pwszStreamName,
    WORD *pcchStreamName);
void __RPC_STUB IWMStreamConfig_GetStreamName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMStreamConfig_SetStreamName_Proxy(
    IWMStreamConfig* This,
    LPCWSTR_WMSDK_TYPE_SAFE pwszStreamName);
void __RPC_STUB IWMStreamConfig_SetStreamName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMStreamConfig_GetConnectionName_Proxy(
    IWMStreamConfig* This,
    WCHAR *pwszInputName,
    WORD *pcchInputName);
void __RPC_STUB IWMStreamConfig_GetConnectionName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMStreamConfig_SetConnectionName_Proxy(
    IWMStreamConfig* This,
    LPCWSTR_WMSDK_TYPE_SAFE pwszInputName);
void __RPC_STUB IWMStreamConfig_SetConnectionName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMStreamConfig_GetBitrate_Proxy(
    IWMStreamConfig* This,
    DWORD *pdwBitrate);
void __RPC_STUB IWMStreamConfig_GetBitrate_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMStreamConfig_SetBitrate_Proxy(
    IWMStreamConfig* This,
    DWORD pdwBitrate);
void __RPC_STUB IWMStreamConfig_SetBitrate_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMStreamConfig_GetBufferWindow_Proxy(
    IWMStreamConfig* This,
    DWORD *pmsBufferWindow);
void __RPC_STUB IWMStreamConfig_GetBufferWindow_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMStreamConfig_SetBufferWindow_Proxy(
    IWMStreamConfig* This,
    DWORD msBufferWindow);
void __RPC_STUB IWMStreamConfig_SetBufferWindow_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMStreamConfig_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMProfile interface
 */
#ifndef __IWMProfile_INTERFACE_DEFINED__
#define __IWMProfile_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMProfile, 0x96406bdb, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406bdb-2b2b-11d3-b36b-00c04f6108ff")
IWMProfile : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetVersion(
        WMT_VERSION *pdwVersion) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetName(
        WCHAR *pwszName,
        DWORD *pcchName) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetName(
        const WCHAR *pwszName) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDescription(
        WCHAR *pwszDescription,
        DWORD *pcchDescription) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDescription(
        const WCHAR *pwszDescription) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamCount(
        DWORD *pcStreams) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStream(
        DWORD dwStreamIndex,
        IWMStreamConfig **ppConfig) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamByNumber(
        WORD wStreamNum,
        IWMStreamConfig **ppConfig) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveStream(
        IWMStreamConfig *pConfig) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveStreamByNumber(
        WORD wStreamNum) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddStream(
        IWMStreamConfig *pConfig) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReconfigStream(
        IWMStreamConfig *pConfig) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateNewStream(
        REFGUID guidStreamType,
        IWMStreamConfig **ppConfig) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMutualExclusionCount(
        DWORD *pcME) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMutualExclusion(
        DWORD dwMEIndex,
        IWMMutualExclusion **ppME) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveMutualExclusion(
        IWMMutualExclusion *pME) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddMutualExclusion(
        IWMMutualExclusion *pME) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateNewMutualExclusion(
        IWMMutualExclusion **ppME) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMProfile, 0x96406bdb, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMProfileVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMProfile *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMProfile *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMProfile *This);

    /*** IWMProfile methods ***/
    HRESULT (STDMETHODCALLTYPE *GetVersion)(
        IWMProfile *This,
        WMT_VERSION *pdwVersion);

    HRESULT (STDMETHODCALLTYPE *GetName)(
        IWMProfile *This,
        WCHAR *pwszName,
        DWORD *pcchName);

    HRESULT (STDMETHODCALLTYPE *SetName)(
        IWMProfile *This,
        const WCHAR *pwszName);

    HRESULT (STDMETHODCALLTYPE *GetDescription)(
        IWMProfile *This,
        WCHAR *pwszDescription,
        DWORD *pcchDescription);

    HRESULT (STDMETHODCALLTYPE *SetDescription)(
        IWMProfile *This,
        const WCHAR *pwszDescription);

    HRESULT (STDMETHODCALLTYPE *GetStreamCount)(
        IWMProfile *This,
        DWORD *pcStreams);

    HRESULT (STDMETHODCALLTYPE *GetStream)(
        IWMProfile *This,
        DWORD dwStreamIndex,
        IWMStreamConfig **ppConfig);

    HRESULT (STDMETHODCALLTYPE *GetStreamByNumber)(
        IWMProfile *This,
        WORD wStreamNum,
        IWMStreamConfig **ppConfig);

    HRESULT (STDMETHODCALLTYPE *RemoveStream)(
        IWMProfile *This,
        IWMStreamConfig *pConfig);

    HRESULT (STDMETHODCALLTYPE *RemoveStreamByNumber)(
        IWMProfile *This,
        WORD wStreamNum);

    HRESULT (STDMETHODCALLTYPE *AddStream)(
        IWMProfile *This,
        IWMStreamConfig *pConfig);

    HRESULT (STDMETHODCALLTYPE *ReconfigStream)(
        IWMProfile *This,
        IWMStreamConfig *pConfig);

    HRESULT (STDMETHODCALLTYPE *CreateNewStream)(
        IWMProfile *This,
        REFGUID guidStreamType,
        IWMStreamConfig **ppConfig);

    HRESULT (STDMETHODCALLTYPE *GetMutualExclusionCount)(
        IWMProfile *This,
        DWORD *pcME);

    HRESULT (STDMETHODCALLTYPE *GetMutualExclusion)(
        IWMProfile *This,
        DWORD dwMEIndex,
        IWMMutualExclusion **ppME);

    HRESULT (STDMETHODCALLTYPE *RemoveMutualExclusion)(
        IWMProfile *This,
        IWMMutualExclusion *pME);

    HRESULT (STDMETHODCALLTYPE *AddMutualExclusion)(
        IWMProfile *This,
        IWMMutualExclusion *pME);

    HRESULT (STDMETHODCALLTYPE *CreateNewMutualExclusion)(
        IWMProfile *This,
        IWMMutualExclusion **ppME);

    END_INTERFACE
} IWMProfileVtbl;

interface IWMProfile {
    CONST_VTBL IWMProfileVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMProfile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMProfile_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMProfile_Release(This) (This)->lpVtbl->Release(This)
/*** IWMProfile methods ***/
#define IWMProfile_GetVersion(This,pdwVersion) (This)->lpVtbl->GetVersion(This,pdwVersion)
#define IWMProfile_GetName(This,pwszName,pcchName) (This)->lpVtbl->GetName(This,pwszName,pcchName)
#define IWMProfile_SetName(This,pwszName) (This)->lpVtbl->SetName(This,pwszName)
#define IWMProfile_GetDescription(This,pwszDescription,pcchDescription) (This)->lpVtbl->GetDescription(This,pwszDescription,pcchDescription)
#define IWMProfile_SetDescription(This,pwszDescription) (This)->lpVtbl->SetDescription(This,pwszDescription)
#define IWMProfile_GetStreamCount(This,pcStreams) (This)->lpVtbl->GetStreamCount(This,pcStreams)
#define IWMProfile_GetStream(This,dwStreamIndex,ppConfig) (This)->lpVtbl->GetStream(This,dwStreamIndex,ppConfig)
#define IWMProfile_GetStreamByNumber(This,wStreamNum,ppConfig) (This)->lpVtbl->GetStreamByNumber(This,wStreamNum,ppConfig)
#define IWMProfile_RemoveStream(This,pConfig) (This)->lpVtbl->RemoveStream(This,pConfig)
#define IWMProfile_RemoveStreamByNumber(This,wStreamNum) (This)->lpVtbl->RemoveStreamByNumber(This,wStreamNum)
#define IWMProfile_AddStream(This,pConfig) (This)->lpVtbl->AddStream(This,pConfig)
#define IWMProfile_ReconfigStream(This,pConfig) (This)->lpVtbl->ReconfigStream(This,pConfig)
#define IWMProfile_CreateNewStream(This,guidStreamType,ppConfig) (This)->lpVtbl->CreateNewStream(This,guidStreamType,ppConfig)
#define IWMProfile_GetMutualExclusionCount(This,pcME) (This)->lpVtbl->GetMutualExclusionCount(This,pcME)
#define IWMProfile_GetMutualExclusion(This,dwMEIndex,ppME) (This)->lpVtbl->GetMutualExclusion(This,dwMEIndex,ppME)
#define IWMProfile_RemoveMutualExclusion(This,pME) (This)->lpVtbl->RemoveMutualExclusion(This,pME)
#define IWMProfile_AddMutualExclusion(This,pME) (This)->lpVtbl->AddMutualExclusion(This,pME)
#define IWMProfile_CreateNewMutualExclusion(This,ppME) (This)->lpVtbl->CreateNewMutualExclusion(This,ppME)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMProfile_QueryInterface(IWMProfile* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMProfile_AddRef(IWMProfile* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMProfile_Release(IWMProfile* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMProfile methods ***/
static FORCEINLINE HRESULT IWMProfile_GetVersion(IWMProfile* This,WMT_VERSION *pdwVersion) {
    return This->lpVtbl->GetVersion(This,pdwVersion);
}
static FORCEINLINE HRESULT IWMProfile_GetName(IWMProfile* This,WCHAR *pwszName,DWORD *pcchName) {
    return This->lpVtbl->GetName(This,pwszName,pcchName);
}
static FORCEINLINE HRESULT IWMProfile_SetName(IWMProfile* This,const WCHAR *pwszName) {
    return This->lpVtbl->SetName(This,pwszName);
}
static FORCEINLINE HRESULT IWMProfile_GetDescription(IWMProfile* This,WCHAR *pwszDescription,DWORD *pcchDescription) {
    return This->lpVtbl->GetDescription(This,pwszDescription,pcchDescription);
}
static FORCEINLINE HRESULT IWMProfile_SetDescription(IWMProfile* This,const WCHAR *pwszDescription) {
    return This->lpVtbl->SetDescription(This,pwszDescription);
}
static FORCEINLINE HRESULT IWMProfile_GetStreamCount(IWMProfile* This,DWORD *pcStreams) {
    return This->lpVtbl->GetStreamCount(This,pcStreams);
}
static FORCEINLINE HRESULT IWMProfile_GetStream(IWMProfile* This,DWORD dwStreamIndex,IWMStreamConfig **ppConfig) {
    return This->lpVtbl->GetStream(This,dwStreamIndex,ppConfig);
}
static FORCEINLINE HRESULT IWMProfile_GetStreamByNumber(IWMProfile* This,WORD wStreamNum,IWMStreamConfig **ppConfig) {
    return This->lpVtbl->GetStreamByNumber(This,wStreamNum,ppConfig);
}
static FORCEINLINE HRESULT IWMProfile_RemoveStream(IWMProfile* This,IWMStreamConfig *pConfig) {
    return This->lpVtbl->RemoveStream(This,pConfig);
}
static FORCEINLINE HRESULT IWMProfile_RemoveStreamByNumber(IWMProfile* This,WORD wStreamNum) {
    return This->lpVtbl->RemoveStreamByNumber(This,wStreamNum);
}
static FORCEINLINE HRESULT IWMProfile_AddStream(IWMProfile* This,IWMStreamConfig *pConfig) {
    return This->lpVtbl->AddStream(This,pConfig);
}
static FORCEINLINE HRESULT IWMProfile_ReconfigStream(IWMProfile* This,IWMStreamConfig *pConfig) {
    return This->lpVtbl->ReconfigStream(This,pConfig);
}
static FORCEINLINE HRESULT IWMProfile_CreateNewStream(IWMProfile* This,REFGUID guidStreamType,IWMStreamConfig **ppConfig) {
    return This->lpVtbl->CreateNewStream(This,guidStreamType,ppConfig);
}
static FORCEINLINE HRESULT IWMProfile_GetMutualExclusionCount(IWMProfile* This,DWORD *pcME) {
    return This->lpVtbl->GetMutualExclusionCount(This,pcME);
}
static FORCEINLINE HRESULT IWMProfile_GetMutualExclusion(IWMProfile* This,DWORD dwMEIndex,IWMMutualExclusion **ppME) {
    return This->lpVtbl->GetMutualExclusion(This,dwMEIndex,ppME);
}
static FORCEINLINE HRESULT IWMProfile_RemoveMutualExclusion(IWMProfile* This,IWMMutualExclusion *pME) {
    return This->lpVtbl->RemoveMutualExclusion(This,pME);
}
static FORCEINLINE HRESULT IWMProfile_AddMutualExclusion(IWMProfile* This,IWMMutualExclusion *pME) {
    return This->lpVtbl->AddMutualExclusion(This,pME);
}
static FORCEINLINE HRESULT IWMProfile_CreateNewMutualExclusion(IWMProfile* This,IWMMutualExclusion **ppME) {
    return This->lpVtbl->CreateNewMutualExclusion(This,ppME);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMProfile_GetVersion_Proxy(
    IWMProfile* This,
    WMT_VERSION *pdwVersion);
void __RPC_STUB IWMProfile_GetVersion_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_GetName_Proxy(
    IWMProfile* This,
    WCHAR *pwszName,
    DWORD *pcchName);
void __RPC_STUB IWMProfile_GetName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_SetName_Proxy(
    IWMProfile* This,
    const WCHAR *pwszName);
void __RPC_STUB IWMProfile_SetName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_GetDescription_Proxy(
    IWMProfile* This,
    WCHAR *pwszDescription,
    DWORD *pcchDescription);
void __RPC_STUB IWMProfile_GetDescription_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_SetDescription_Proxy(
    IWMProfile* This,
    const WCHAR *pwszDescription);
void __RPC_STUB IWMProfile_SetDescription_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_GetStreamCount_Proxy(
    IWMProfile* This,
    DWORD *pcStreams);
void __RPC_STUB IWMProfile_GetStreamCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_GetStream_Proxy(
    IWMProfile* This,
    DWORD dwStreamIndex,
    IWMStreamConfig **ppConfig);
void __RPC_STUB IWMProfile_GetStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_GetStreamByNumber_Proxy(
    IWMProfile* This,
    WORD wStreamNum,
    IWMStreamConfig **ppConfig);
void __RPC_STUB IWMProfile_GetStreamByNumber_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_RemoveStream_Proxy(
    IWMProfile* This,
    IWMStreamConfig *pConfig);
void __RPC_STUB IWMProfile_RemoveStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_RemoveStreamByNumber_Proxy(
    IWMProfile* This,
    WORD wStreamNum);
void __RPC_STUB IWMProfile_RemoveStreamByNumber_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_AddStream_Proxy(
    IWMProfile* This,
    IWMStreamConfig *pConfig);
void __RPC_STUB IWMProfile_AddStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_ReconfigStream_Proxy(
    IWMProfile* This,
    IWMStreamConfig *pConfig);
void __RPC_STUB IWMProfile_ReconfigStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_CreateNewStream_Proxy(
    IWMProfile* This,
    REFGUID guidStreamType,
    IWMStreamConfig **ppConfig);
void __RPC_STUB IWMProfile_CreateNewStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_GetMutualExclusionCount_Proxy(
    IWMProfile* This,
    DWORD *pcME);
void __RPC_STUB IWMProfile_GetMutualExclusionCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_GetMutualExclusion_Proxy(
    IWMProfile* This,
    DWORD dwMEIndex,
    IWMMutualExclusion **ppME);
void __RPC_STUB IWMProfile_GetMutualExclusion_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_RemoveMutualExclusion_Proxy(
    IWMProfile* This,
    IWMMutualExclusion *pME);
void __RPC_STUB IWMProfile_RemoveMutualExclusion_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_AddMutualExclusion_Proxy(
    IWMProfile* This,
    IWMMutualExclusion *pME);
void __RPC_STUB IWMProfile_AddMutualExclusion_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfile_CreateNewMutualExclusion_Proxy(
    IWMProfile* This,
    IWMMutualExclusion **ppME);
void __RPC_STUB IWMProfile_CreateNewMutualExclusion_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMProfile_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMProfileManager interface
 */
#ifndef __IWMProfileManager_INTERFACE_DEFINED__
#define __IWMProfileManager_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMProfileManager, 0xd16679f2, 0x6ca0, 0x472d, 0x8d,0x31, 0x2f,0x5d,0x55,0xae,0xe1,0x55);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d16679f2-6ca0-472d-8d31-2f5d55aee155")
IWMProfileManager : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE CreateEmptyProfile(
        WMT_VERSION dwVersion,
        IWMProfile **ppProfile) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadProfileByID(
        REFGUID guidProfile,
        IWMProfile **ppProfile) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadProfileByData(
        const WCHAR *pwszProfile,
        IWMProfile **ppProfile) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveProfile(
        IWMProfile *pIWMProfile,
        WCHAR *pwszProfile,
        DWORD *pdwLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSystemProfileCount(
        DWORD *pcProfiles) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadSystemProfile(
        DWORD dwProfileIndex,
        IWMProfile **ppProfile) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMProfileManager, 0xd16679f2, 0x6ca0, 0x472d, 0x8d,0x31, 0x2f,0x5d,0x55,0xae,0xe1,0x55)
#endif
#else
typedef struct IWMProfileManagerVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMProfileManager *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMProfileManager *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMProfileManager *This);

    /*** IWMProfileManager methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateEmptyProfile)(
        IWMProfileManager *This,
        WMT_VERSION dwVersion,
        IWMProfile **ppProfile);

    HRESULT (STDMETHODCALLTYPE *LoadProfileByID)(
        IWMProfileManager *This,
        REFGUID guidProfile,
        IWMProfile **ppProfile);

    HRESULT (STDMETHODCALLTYPE *LoadProfileByData)(
        IWMProfileManager *This,
        const WCHAR *pwszProfile,
        IWMProfile **ppProfile);

    HRESULT (STDMETHODCALLTYPE *SaveProfile)(
        IWMProfileManager *This,
        IWMProfile *pIWMProfile,
        WCHAR *pwszProfile,
        DWORD *pdwLength);

    HRESULT (STDMETHODCALLTYPE *GetSystemProfileCount)(
        IWMProfileManager *This,
        DWORD *pcProfiles);

    HRESULT (STDMETHODCALLTYPE *LoadSystemProfile)(
        IWMProfileManager *This,
        DWORD dwProfileIndex,
        IWMProfile **ppProfile);

    END_INTERFACE
} IWMProfileManagerVtbl;

interface IWMProfileManager {
    CONST_VTBL IWMProfileManagerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMProfileManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMProfileManager_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMProfileManager_Release(This) (This)->lpVtbl->Release(This)
/*** IWMProfileManager methods ***/
#define IWMProfileManager_CreateEmptyProfile(This,dwVersion,ppProfile) (This)->lpVtbl->CreateEmptyProfile(This,dwVersion,ppProfile)
#define IWMProfileManager_LoadProfileByID(This,guidProfile,ppProfile) (This)->lpVtbl->LoadProfileByID(This,guidProfile,ppProfile)
#define IWMProfileManager_LoadProfileByData(This,pwszProfile,ppProfile) (This)->lpVtbl->LoadProfileByData(This,pwszProfile,ppProfile)
#define IWMProfileManager_SaveProfile(This,pIWMProfile,pwszProfile,pdwLength) (This)->lpVtbl->SaveProfile(This,pIWMProfile,pwszProfile,pdwLength)
#define IWMProfileManager_GetSystemProfileCount(This,pcProfiles) (This)->lpVtbl->GetSystemProfileCount(This,pcProfiles)
#define IWMProfileManager_LoadSystemProfile(This,dwProfileIndex,ppProfile) (This)->lpVtbl->LoadSystemProfile(This,dwProfileIndex,ppProfile)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMProfileManager_QueryInterface(IWMProfileManager* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMProfileManager_AddRef(IWMProfileManager* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMProfileManager_Release(IWMProfileManager* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMProfileManager methods ***/
static FORCEINLINE HRESULT IWMProfileManager_CreateEmptyProfile(IWMProfileManager* This,WMT_VERSION dwVersion,IWMProfile **ppProfile) {
    return This->lpVtbl->CreateEmptyProfile(This,dwVersion,ppProfile);
}
static FORCEINLINE HRESULT IWMProfileManager_LoadProfileByID(IWMProfileManager* This,REFGUID guidProfile,IWMProfile **ppProfile) {
    return This->lpVtbl->LoadProfileByID(This,guidProfile,ppProfile);
}
static FORCEINLINE HRESULT IWMProfileManager_LoadProfileByData(IWMProfileManager* This,const WCHAR *pwszProfile,IWMProfile **ppProfile) {
    return This->lpVtbl->LoadProfileByData(This,pwszProfile,ppProfile);
}
static FORCEINLINE HRESULT IWMProfileManager_SaveProfile(IWMProfileManager* This,IWMProfile *pIWMProfile,WCHAR *pwszProfile,DWORD *pdwLength) {
    return This->lpVtbl->SaveProfile(This,pIWMProfile,pwszProfile,pdwLength);
}
static FORCEINLINE HRESULT IWMProfileManager_GetSystemProfileCount(IWMProfileManager* This,DWORD *pcProfiles) {
    return This->lpVtbl->GetSystemProfileCount(This,pcProfiles);
}
static FORCEINLINE HRESULT IWMProfileManager_LoadSystemProfile(IWMProfileManager* This,DWORD dwProfileIndex,IWMProfile **ppProfile) {
    return This->lpVtbl->LoadSystemProfile(This,dwProfileIndex,ppProfile);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMProfileManager_CreateEmptyProfile_Proxy(
    IWMProfileManager* This,
    WMT_VERSION dwVersion,
    IWMProfile **ppProfile);
void __RPC_STUB IWMProfileManager_CreateEmptyProfile_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfileManager_LoadProfileByID_Proxy(
    IWMProfileManager* This,
    REFGUID guidProfile,
    IWMProfile **ppProfile);
void __RPC_STUB IWMProfileManager_LoadProfileByID_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfileManager_LoadProfileByData_Proxy(
    IWMProfileManager* This,
    const WCHAR *pwszProfile,
    IWMProfile **ppProfile);
void __RPC_STUB IWMProfileManager_LoadProfileByData_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfileManager_SaveProfile_Proxy(
    IWMProfileManager* This,
    IWMProfile *pIWMProfile,
    WCHAR *pwszProfile,
    DWORD *pdwLength);
void __RPC_STUB IWMProfileManager_SaveProfile_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfileManager_GetSystemProfileCount_Proxy(
    IWMProfileManager* This,
    DWORD *pcProfiles);
void __RPC_STUB IWMProfileManager_GetSystemProfileCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMProfileManager_LoadSystemProfile_Proxy(
    IWMProfileManager* This,
    DWORD dwProfileIndex,
    IWMProfile **ppProfile);
void __RPC_STUB IWMProfileManager_LoadSystemProfile_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMProfileManager_INTERFACE_DEFINED__ */

HRESULT WINAPI WMCreateProfileManager(IWMProfileManager**);
/*****************************************************************************
 * IWMMediaProps interface
 */
#ifndef __IWMMediaProps_INTERFACE_DEFINED__
#define __IWMMediaProps_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMMediaProps, 0x96406bce, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406bce-2b2b-11d3-b36b-00c04f6108ff")
IWMMediaProps : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetType(
        GUID *pguidType) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMediaType(
        WM_MEDIA_TYPE *pType,
        DWORD *pcbType) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetMediaType(
        WM_MEDIA_TYPE *pType) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMMediaProps, 0x96406bce, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMMediaPropsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMMediaProps *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMMediaProps *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMMediaProps *This);

    /*** IWMMediaProps methods ***/
    HRESULT (STDMETHODCALLTYPE *GetType)(
        IWMMediaProps *This,
        GUID *pguidType);

    HRESULT (STDMETHODCALLTYPE *GetMediaType)(
        IWMMediaProps *This,
        WM_MEDIA_TYPE *pType,
        DWORD *pcbType);

    HRESULT (STDMETHODCALLTYPE *SetMediaType)(
        IWMMediaProps *This,
        WM_MEDIA_TYPE *pType);

    END_INTERFACE
} IWMMediaPropsVtbl;

interface IWMMediaProps {
    CONST_VTBL IWMMediaPropsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMMediaProps_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMMediaProps_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMMediaProps_Release(This) (This)->lpVtbl->Release(This)
/*** IWMMediaProps methods ***/
#define IWMMediaProps_GetType(This,pguidType) (This)->lpVtbl->GetType(This,pguidType)
#define IWMMediaProps_GetMediaType(This,pType,pcbType) (This)->lpVtbl->GetMediaType(This,pType,pcbType)
#define IWMMediaProps_SetMediaType(This,pType) (This)->lpVtbl->SetMediaType(This,pType)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMMediaProps_QueryInterface(IWMMediaProps* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMMediaProps_AddRef(IWMMediaProps* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMMediaProps_Release(IWMMediaProps* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMMediaProps methods ***/
static FORCEINLINE HRESULT IWMMediaProps_GetType(IWMMediaProps* This,GUID *pguidType) {
    return This->lpVtbl->GetType(This,pguidType);
}
static FORCEINLINE HRESULT IWMMediaProps_GetMediaType(IWMMediaProps* This,WM_MEDIA_TYPE *pType,DWORD *pcbType) {
    return This->lpVtbl->GetMediaType(This,pType,pcbType);
}
static FORCEINLINE HRESULT IWMMediaProps_SetMediaType(IWMMediaProps* This,WM_MEDIA_TYPE *pType) {
    return This->lpVtbl->SetMediaType(This,pType);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMMediaProps_GetType_Proxy(
    IWMMediaProps* This,
    GUID *pguidType);
void __RPC_STUB IWMMediaProps_GetType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMMediaProps_GetMediaType_Proxy(
    IWMMediaProps* This,
    WM_MEDIA_TYPE *pType,
    DWORD *pcbType);
void __RPC_STUB IWMMediaProps_GetMediaType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMMediaProps_SetMediaType_Proxy(
    IWMMediaProps* This,
    WM_MEDIA_TYPE *pType);
void __RPC_STUB IWMMediaProps_SetMediaType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMMediaProps_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMOutputMediaProps interface
 */
#ifndef __IWMOutputMediaProps_INTERFACE_DEFINED__
#define __IWMOutputMediaProps_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMOutputMediaProps, 0x96406bd7, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406bd7-2b2b-11d3-b36b-00c04f6108ff")
IWMOutputMediaProps : public IWMMediaProps
{
    virtual HRESULT STDMETHODCALLTYPE GetStreamGroupName(
        WCHAR *pwszName,
        WORD *pcchName) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetConnectionName(
        WCHAR *pwszName,
        WORD *pcchName) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMOutputMediaProps, 0x96406bd7, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMOutputMediaPropsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMOutputMediaProps *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMOutputMediaProps *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMOutputMediaProps *This);

    /*** IWMMediaProps methods ***/
    HRESULT (STDMETHODCALLTYPE *GetType)(
        IWMOutputMediaProps *This,
        GUID *pguidType);

    HRESULT (STDMETHODCALLTYPE *GetMediaType)(
        IWMOutputMediaProps *This,
        WM_MEDIA_TYPE *pType,
        DWORD *pcbType);

    HRESULT (STDMETHODCALLTYPE *SetMediaType)(
        IWMOutputMediaProps *This,
        WM_MEDIA_TYPE *pType);

    /*** IWMOutputMediaProps methods ***/
    HRESULT (STDMETHODCALLTYPE *GetStreamGroupName)(
        IWMOutputMediaProps *This,
        WCHAR *pwszName,
        WORD *pcchName);

    HRESULT (STDMETHODCALLTYPE *GetConnectionName)(
        IWMOutputMediaProps *This,
        WCHAR *pwszName,
        WORD *pcchName);

    END_INTERFACE
} IWMOutputMediaPropsVtbl;

interface IWMOutputMediaProps {
    CONST_VTBL IWMOutputMediaPropsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMOutputMediaProps_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMOutputMediaProps_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMOutputMediaProps_Release(This) (This)->lpVtbl->Release(This)
/*** IWMMediaProps methods ***/
#define IWMOutputMediaProps_GetType(This,pguidType) (This)->lpVtbl->GetType(This,pguidType)
#define IWMOutputMediaProps_GetMediaType(This,pType,pcbType) (This)->lpVtbl->GetMediaType(This,pType,pcbType)
#define IWMOutputMediaProps_SetMediaType(This,pType) (This)->lpVtbl->SetMediaType(This,pType)
/*** IWMOutputMediaProps methods ***/
#define IWMOutputMediaProps_GetStreamGroupName(This,pwszName,pcchName) (This)->lpVtbl->GetStreamGroupName(This,pwszName,pcchName)
#define IWMOutputMediaProps_GetConnectionName(This,pwszName,pcchName) (This)->lpVtbl->GetConnectionName(This,pwszName,pcchName)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMOutputMediaProps_QueryInterface(IWMOutputMediaProps* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMOutputMediaProps_AddRef(IWMOutputMediaProps* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMOutputMediaProps_Release(IWMOutputMediaProps* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMMediaProps methods ***/
static FORCEINLINE HRESULT IWMOutputMediaProps_GetType(IWMOutputMediaProps* This,GUID *pguidType) {
    return This->lpVtbl->GetType(This,pguidType);
}
static FORCEINLINE HRESULT IWMOutputMediaProps_GetMediaType(IWMOutputMediaProps* This,WM_MEDIA_TYPE *pType,DWORD *pcbType) {
    return This->lpVtbl->GetMediaType(This,pType,pcbType);
}
static FORCEINLINE HRESULT IWMOutputMediaProps_SetMediaType(IWMOutputMediaProps* This,WM_MEDIA_TYPE *pType) {
    return This->lpVtbl->SetMediaType(This,pType);
}
/*** IWMOutputMediaProps methods ***/
static FORCEINLINE HRESULT IWMOutputMediaProps_GetStreamGroupName(IWMOutputMediaProps* This,WCHAR *pwszName,WORD *pcchName) {
    return This->lpVtbl->GetStreamGroupName(This,pwszName,pcchName);
}
static FORCEINLINE HRESULT IWMOutputMediaProps_GetConnectionName(IWMOutputMediaProps* This,WCHAR *pwszName,WORD *pcchName) {
    return This->lpVtbl->GetConnectionName(This,pwszName,pcchName);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMOutputMediaProps_GetStreamGroupName_Proxy(
    IWMOutputMediaProps* This,
    WCHAR *pwszName,
    WORD *pcchName);
void __RPC_STUB IWMOutputMediaProps_GetStreamGroupName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMOutputMediaProps_GetConnectionName_Proxy(
    IWMOutputMediaProps* This,
    WCHAR *pwszName,
    WORD *pcchName);
void __RPC_STUB IWMOutputMediaProps_GetConnectionName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMOutputMediaProps_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMMetadataEditor interface
 */
#ifndef __IWMMetadataEditor_INTERFACE_DEFINED__
#define __IWMMetadataEditor_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMMetadataEditor, 0x96406bd9, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406bd9-2b2b-11d3-b36b-00c04f6108ff")
IWMMetadataEditor : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Open(
        const WCHAR *pwszFilename) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Flush(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMMetadataEditor, 0x96406bd9, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMMetadataEditorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMMetadataEditor *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMMetadataEditor *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMMetadataEditor *This);

    /*** IWMMetadataEditor methods ***/
    HRESULT (STDMETHODCALLTYPE *Open)(
        IWMMetadataEditor *This,
        const WCHAR *pwszFilename);

    HRESULT (STDMETHODCALLTYPE *Close)(
        IWMMetadataEditor *This);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        IWMMetadataEditor *This);

    END_INTERFACE
} IWMMetadataEditorVtbl;

interface IWMMetadataEditor {
    CONST_VTBL IWMMetadataEditorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMMetadataEditor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMMetadataEditor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMMetadataEditor_Release(This) (This)->lpVtbl->Release(This)
/*** IWMMetadataEditor methods ***/
#define IWMMetadataEditor_Open(This,pwszFilename) (This)->lpVtbl->Open(This,pwszFilename)
#define IWMMetadataEditor_Close(This) (This)->lpVtbl->Close(This)
#define IWMMetadataEditor_Flush(This) (This)->lpVtbl->Flush(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMMetadataEditor_QueryInterface(IWMMetadataEditor* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMMetadataEditor_AddRef(IWMMetadataEditor* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMMetadataEditor_Release(IWMMetadataEditor* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMMetadataEditor methods ***/
static FORCEINLINE HRESULT IWMMetadataEditor_Open(IWMMetadataEditor* This,const WCHAR *pwszFilename) {
    return This->lpVtbl->Open(This,pwszFilename);
}
static FORCEINLINE HRESULT IWMMetadataEditor_Close(IWMMetadataEditor* This) {
    return This->lpVtbl->Close(This);
}
static FORCEINLINE HRESULT IWMMetadataEditor_Flush(IWMMetadataEditor* This) {
    return This->lpVtbl->Flush(This);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMMetadataEditor_Open_Proxy(
    IWMMetadataEditor* This,
    const WCHAR *pwszFilename);
void __RPC_STUB IWMMetadataEditor_Open_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMMetadataEditor_Close_Proxy(
    IWMMetadataEditor* This);
void __RPC_STUB IWMMetadataEditor_Close_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMMetadataEditor_Flush_Proxy(
    IWMMetadataEditor* This);
void __RPC_STUB IWMMetadataEditor_Flush_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMMetadataEditor_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMReader interface
 */
#ifndef __IWMReader_INTERFACE_DEFINED__
#define __IWMReader_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMReader, 0x96406bd6, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406bd6-2b2b-11d3-b36b-00c04f6108ff")
IWMReader : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Open(
        const WCHAR *pwszURL,
        IWMReaderCallback *pCallback,
        void *pvContext) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputCount(
        DWORD *pcOutputs) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputProps(
        DWORD dwOutputNum,
        IWMOutputMediaProps **ppOutput) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputProps(
        DWORD dwOutputNum,
        IWMOutputMediaProps *pOutput) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputFormatCount(
        DWORD dwOutputNumber,
        DWORD *pcFormats) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputFormat(
        DWORD dwOutputNumber,
        DWORD dwFormatNumber,
        IWMOutputMediaProps **ppProps) = 0;

    virtual HRESULT STDMETHODCALLTYPE Start(
        QWORD cnsStart,
        QWORD cnsDuration,
        float fRate,
        void *pvContext) = 0;

    virtual HRESULT STDMETHODCALLTYPE Stop(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Pause(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resume(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMReader, 0x96406bd6, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMReaderVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMReader *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMReader *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMReader *This);

    /*** IWMReader methods ***/
    HRESULT (STDMETHODCALLTYPE *Open)(
        IWMReader *This,
        const WCHAR *pwszURL,
        IWMReaderCallback *pCallback,
        void *pvContext);

    HRESULT (STDMETHODCALLTYPE *Close)(
        IWMReader *This);

    HRESULT (STDMETHODCALLTYPE *GetOutputCount)(
        IWMReader *This,
        DWORD *pcOutputs);

    HRESULT (STDMETHODCALLTYPE *GetOutputProps)(
        IWMReader *This,
        DWORD dwOutputNum,
        IWMOutputMediaProps **ppOutput);

    HRESULT (STDMETHODCALLTYPE *SetOutputProps)(
        IWMReader *This,
        DWORD dwOutputNum,
        IWMOutputMediaProps *pOutput);

    HRESULT (STDMETHODCALLTYPE *GetOutputFormatCount)(
        IWMReader *This,
        DWORD dwOutputNumber,
        DWORD *pcFormats);

    HRESULT (STDMETHODCALLTYPE *GetOutputFormat)(
        IWMReader *This,
        DWORD dwOutputNumber,
        DWORD dwFormatNumber,
        IWMOutputMediaProps **ppProps);

    HRESULT (STDMETHODCALLTYPE *Start)(
        IWMReader *This,
        QWORD cnsStart,
        QWORD cnsDuration,
        float fRate,
        void *pvContext);

    HRESULT (STDMETHODCALLTYPE *Stop)(
        IWMReader *This);

    HRESULT (STDMETHODCALLTYPE *Pause)(
        IWMReader *This);

    HRESULT (STDMETHODCALLTYPE *Resume)(
        IWMReader *This);

    END_INTERFACE
} IWMReaderVtbl;

interface IWMReader {
    CONST_VTBL IWMReaderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMReader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMReader_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMReader_Release(This) (This)->lpVtbl->Release(This)
/*** IWMReader methods ***/
#define IWMReader_Open(This,pwszURL,pCallback,pvContext) (This)->lpVtbl->Open(This,pwszURL,pCallback,pvContext)
#define IWMReader_Close(This) (This)->lpVtbl->Close(This)
#define IWMReader_GetOutputCount(This,pcOutputs) (This)->lpVtbl->GetOutputCount(This,pcOutputs)
#define IWMReader_GetOutputProps(This,dwOutputNum,ppOutput) (This)->lpVtbl->GetOutputProps(This,dwOutputNum,ppOutput)
#define IWMReader_SetOutputProps(This,dwOutputNum,pOutput) (This)->lpVtbl->SetOutputProps(This,dwOutputNum,pOutput)
#define IWMReader_GetOutputFormatCount(This,dwOutputNumber,pcFormats) (This)->lpVtbl->GetOutputFormatCount(This,dwOutputNumber,pcFormats)
#define IWMReader_GetOutputFormat(This,dwOutputNumber,dwFormatNumber,ppProps) (This)->lpVtbl->GetOutputFormat(This,dwOutputNumber,dwFormatNumber,ppProps)
#define IWMReader_Start(This,cnsStart,cnsDuration,fRate,pvContext) (This)->lpVtbl->Start(This,cnsStart,cnsDuration,fRate,pvContext)
#define IWMReader_Stop(This) (This)->lpVtbl->Stop(This)
#define IWMReader_Pause(This) (This)->lpVtbl->Pause(This)
#define IWMReader_Resume(This) (This)->lpVtbl->Resume(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMReader_QueryInterface(IWMReader* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMReader_AddRef(IWMReader* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMReader_Release(IWMReader* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMReader methods ***/
static FORCEINLINE HRESULT IWMReader_Open(IWMReader* This,const WCHAR *pwszURL,IWMReaderCallback *pCallback,void *pvContext) {
    return This->lpVtbl->Open(This,pwszURL,pCallback,pvContext);
}
static FORCEINLINE HRESULT IWMReader_Close(IWMReader* This) {
    return This->lpVtbl->Close(This);
}
static FORCEINLINE HRESULT IWMReader_GetOutputCount(IWMReader* This,DWORD *pcOutputs) {
    return This->lpVtbl->GetOutputCount(This,pcOutputs);
}
static FORCEINLINE HRESULT IWMReader_GetOutputProps(IWMReader* This,DWORD dwOutputNum,IWMOutputMediaProps **ppOutput) {
    return This->lpVtbl->GetOutputProps(This,dwOutputNum,ppOutput);
}
static FORCEINLINE HRESULT IWMReader_SetOutputProps(IWMReader* This,DWORD dwOutputNum,IWMOutputMediaProps *pOutput) {
    return This->lpVtbl->SetOutputProps(This,dwOutputNum,pOutput);
}
static FORCEINLINE HRESULT IWMReader_GetOutputFormatCount(IWMReader* This,DWORD dwOutputNumber,DWORD *pcFormats) {
    return This->lpVtbl->GetOutputFormatCount(This,dwOutputNumber,pcFormats);
}
static FORCEINLINE HRESULT IWMReader_GetOutputFormat(IWMReader* This,DWORD dwOutputNumber,DWORD dwFormatNumber,IWMOutputMediaProps **ppProps) {
    return This->lpVtbl->GetOutputFormat(This,dwOutputNumber,dwFormatNumber,ppProps);
}
static FORCEINLINE HRESULT IWMReader_Start(IWMReader* This,QWORD cnsStart,QWORD cnsDuration,float fRate,void *pvContext) {
    return This->lpVtbl->Start(This,cnsStart,cnsDuration,fRate,pvContext);
}
static FORCEINLINE HRESULT IWMReader_Stop(IWMReader* This) {
    return This->lpVtbl->Stop(This);
}
static FORCEINLINE HRESULT IWMReader_Pause(IWMReader* This) {
    return This->lpVtbl->Pause(This);
}
static FORCEINLINE HRESULT IWMReader_Resume(IWMReader* This) {
    return This->lpVtbl->Resume(This);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMReader_Open_Proxy(
    IWMReader* This,
    const WCHAR *pwszURL,
    IWMReaderCallback *pCallback,
    void *pvContext);
void __RPC_STUB IWMReader_Open_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReader_Close_Proxy(
    IWMReader* This);
void __RPC_STUB IWMReader_Close_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReader_GetOutputCount_Proxy(
    IWMReader* This,
    DWORD *pcOutputs);
void __RPC_STUB IWMReader_GetOutputCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReader_GetOutputProps_Proxy(
    IWMReader* This,
    DWORD dwOutputNum,
    IWMOutputMediaProps **ppOutput);
void __RPC_STUB IWMReader_GetOutputProps_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReader_SetOutputProps_Proxy(
    IWMReader* This,
    DWORD dwOutputNum,
    IWMOutputMediaProps *pOutput);
void __RPC_STUB IWMReader_SetOutputProps_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReader_GetOutputFormatCount_Proxy(
    IWMReader* This,
    DWORD dwOutputNumber,
    DWORD *pcFormats);
void __RPC_STUB IWMReader_GetOutputFormatCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReader_GetOutputFormat_Proxy(
    IWMReader* This,
    DWORD dwOutputNumber,
    DWORD dwFormatNumber,
    IWMOutputMediaProps **ppProps);
void __RPC_STUB IWMReader_GetOutputFormat_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReader_Start_Proxy(
    IWMReader* This,
    QWORD cnsStart,
    QWORD cnsDuration,
    float fRate,
    void *pvContext);
void __RPC_STUB IWMReader_Start_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReader_Stop_Proxy(
    IWMReader* This);
void __RPC_STUB IWMReader_Stop_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReader_Pause_Proxy(
    IWMReader* This);
void __RPC_STUB IWMReader_Pause_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReader_Resume_Proxy(
    IWMReader* This);
void __RPC_STUB IWMReader_Resume_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMReader_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMPlayerHook interface
 */
#ifndef __IWMPlayerHook_INTERFACE_DEFINED__
#define __IWMPlayerHook_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMPlayerHook, 0xe5b7ca9a, 0x0f1c, 0x4f66, 0x90,0x02, 0x74,0xec,0x50,0xd8,0xb3,0x04);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e5b7ca9a-0f1c-4f66-9002-74ec50d8b304")
IWMPlayerHook : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE PreDecode(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMPlayerHook, 0xe5b7ca9a, 0x0f1c, 0x4f66, 0x90,0x02, 0x74,0xec,0x50,0xd8,0xb3,0x04)
#endif
#else
typedef struct IWMPlayerHookVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMPlayerHook *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMPlayerHook *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMPlayerHook *This);

    /*** IWMPlayerHook methods ***/
    HRESULT (STDMETHODCALLTYPE *PreDecode)(
        IWMPlayerHook *This);

    END_INTERFACE
} IWMPlayerHookVtbl;

interface IWMPlayerHook {
    CONST_VTBL IWMPlayerHookVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMPlayerHook_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMPlayerHook_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMPlayerHook_Release(This) (This)->lpVtbl->Release(This)
/*** IWMPlayerHook methods ***/
#define IWMPlayerHook_PreDecode(This) (This)->lpVtbl->PreDecode(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMPlayerHook_QueryInterface(IWMPlayerHook* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMPlayerHook_AddRef(IWMPlayerHook* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMPlayerHook_Release(IWMPlayerHook* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMPlayerHook methods ***/
static FORCEINLINE HRESULT IWMPlayerHook_PreDecode(IWMPlayerHook* This) {
    return This->lpVtbl->PreDecode(This);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMPlayerHook_PreDecode_Proxy(
    IWMPlayerHook* This);
void __RPC_STUB IWMPlayerHook_PreDecode_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMPlayerHook_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMReaderAdvanced interface
 */
#ifndef __IWMReaderAdvanced_INTERFACE_DEFINED__
#define __IWMReaderAdvanced_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMReaderAdvanced, 0x96406bea, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406bea-2b2b-11d3-b36b-00c04f6108ff")
IWMReaderAdvanced : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetUserProvidedClock(
        BOOL fUserClock) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetUserProvidedClock(
        BOOL *pfUserClock) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeliverTime(
        QWORD cnsTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetManualStreamSelection(
        BOOL fSelection) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetManualStreamSelection(
        BOOL *pfSelection) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStreamsSelected(
        WORD cStreamCount,
        WORD *pwStreamNumbers,
        WMT_STREAM_SELECTION *pSelections) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamSelected(
        WORD wStreamNum,
        WMT_STREAM_SELECTION *pSelection) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetReceiveSelectionCallbacks(
        BOOL fGetCallbacks) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetReceiveSelectionCallbacks(
        BOOL *pfGetCallbacks) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetReceiveStreamSamples(
        WORD wStreamNum,
        BOOL fReceiveStreamSamples) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetReceiveStreamSamples(
        WORD wStreamNum,
        BOOL *pfReceiveStreamSamples) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAllocateForOutput(
        DWORD dwOutputNum,
        BOOL fAllocate) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAllocateForOutput(
        DWORD dwOutputNum,
        BOOL *pfAllocate) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAllocateForStream(
        WORD wStreamNum,
        BOOL fAllocate) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAllocateForStream(
        WORD dwStreamNum,
        BOOL *pfAllocate) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStatistics(
        WM_READER_STATISTICS *pStatistics) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetClientInfo(
        WM_READER_CLIENTINFO *pClientInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMaxOutputSampleSize(
        DWORD dwOutput,
        DWORD *pcbMax) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMaxStreamSampleSize(
        WORD wStream,
        DWORD *pcbMax) = 0;

    virtual HRESULT STDMETHODCALLTYPE NotifyLateDelivery(
        QWORD cnsLateness) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMReaderAdvanced, 0x96406bea, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMReaderAdvancedVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMReaderAdvanced *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMReaderAdvanced *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMReaderAdvanced *This);

    /*** IWMReaderAdvanced methods ***/
    HRESULT (STDMETHODCALLTYPE *SetUserProvidedClock)(
        IWMReaderAdvanced *This,
        BOOL fUserClock);

    HRESULT (STDMETHODCALLTYPE *GetUserProvidedClock)(
        IWMReaderAdvanced *This,
        BOOL *pfUserClock);

    HRESULT (STDMETHODCALLTYPE *DeliverTime)(
        IWMReaderAdvanced *This,
        QWORD cnsTime);

    HRESULT (STDMETHODCALLTYPE *SetManualStreamSelection)(
        IWMReaderAdvanced *This,
        BOOL fSelection);

    HRESULT (STDMETHODCALLTYPE *GetManualStreamSelection)(
        IWMReaderAdvanced *This,
        BOOL *pfSelection);

    HRESULT (STDMETHODCALLTYPE *SetStreamsSelected)(
        IWMReaderAdvanced *This,
        WORD cStreamCount,
        WORD *pwStreamNumbers,
        WMT_STREAM_SELECTION *pSelections);

    HRESULT (STDMETHODCALLTYPE *GetStreamSelected)(
        IWMReaderAdvanced *This,
        WORD wStreamNum,
        WMT_STREAM_SELECTION *pSelection);

    HRESULT (STDMETHODCALLTYPE *SetReceiveSelectionCallbacks)(
        IWMReaderAdvanced *This,
        BOOL fGetCallbacks);

    HRESULT (STDMETHODCALLTYPE *GetReceiveSelectionCallbacks)(
        IWMReaderAdvanced *This,
        BOOL *pfGetCallbacks);

    HRESULT (STDMETHODCALLTYPE *SetReceiveStreamSamples)(
        IWMReaderAdvanced *This,
        WORD wStreamNum,
        BOOL fReceiveStreamSamples);

    HRESULT (STDMETHODCALLTYPE *GetReceiveStreamSamples)(
        IWMReaderAdvanced *This,
        WORD wStreamNum,
        BOOL *pfReceiveStreamSamples);

    HRESULT (STDMETHODCALLTYPE *SetAllocateForOutput)(
        IWMReaderAdvanced *This,
        DWORD dwOutputNum,
        BOOL fAllocate);

    HRESULT (STDMETHODCALLTYPE *GetAllocateForOutput)(
        IWMReaderAdvanced *This,
        DWORD dwOutputNum,
        BOOL *pfAllocate);

    HRESULT (STDMETHODCALLTYPE *SetAllocateForStream)(
        IWMReaderAdvanced *This,
        WORD wStreamNum,
        BOOL fAllocate);

    HRESULT (STDMETHODCALLTYPE *GetAllocateForStream)(
        IWMReaderAdvanced *This,
        WORD dwStreamNum,
        BOOL *pfAllocate);

    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
        IWMReaderAdvanced *This,
        WM_READER_STATISTICS *pStatistics);

    HRESULT (STDMETHODCALLTYPE *SetClientInfo)(
        IWMReaderAdvanced *This,
        WM_READER_CLIENTINFO *pClientInfo);

    HRESULT (STDMETHODCALLTYPE *GetMaxOutputSampleSize)(
        IWMReaderAdvanced *This,
        DWORD dwOutput,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *GetMaxStreamSampleSize)(
        IWMReaderAdvanced *This,
        WORD wStream,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *NotifyLateDelivery)(
        IWMReaderAdvanced *This,
        QWORD cnsLateness);

    END_INTERFACE
} IWMReaderAdvancedVtbl;

interface IWMReaderAdvanced {
    CONST_VTBL IWMReaderAdvancedVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMReaderAdvanced_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMReaderAdvanced_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMReaderAdvanced_Release(This) (This)->lpVtbl->Release(This)
/*** IWMReaderAdvanced methods ***/
#define IWMReaderAdvanced_SetUserProvidedClock(This,fUserClock) (This)->lpVtbl->SetUserProvidedClock(This,fUserClock)
#define IWMReaderAdvanced_GetUserProvidedClock(This,pfUserClock) (This)->lpVtbl->GetUserProvidedClock(This,pfUserClock)
#define IWMReaderAdvanced_DeliverTime(This,cnsTime) (This)->lpVtbl->DeliverTime(This,cnsTime)
#define IWMReaderAdvanced_SetManualStreamSelection(This,fSelection) (This)->lpVtbl->SetManualStreamSelection(This,fSelection)
#define IWMReaderAdvanced_GetManualStreamSelection(This,pfSelection) (This)->lpVtbl->GetManualStreamSelection(This,pfSelection)
#define IWMReaderAdvanced_SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections) (This)->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections)
#define IWMReaderAdvanced_GetStreamSelected(This,wStreamNum,pSelection) (This)->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection)
#define IWMReaderAdvanced_SetReceiveSelectionCallbacks(This,fGetCallbacks) (This)->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks)
#define IWMReaderAdvanced_GetReceiveSelectionCallbacks(This,pfGetCallbacks) (This)->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks)
#define IWMReaderAdvanced_SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples) (This)->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples)
#define IWMReaderAdvanced_GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples) (This)->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples)
#define IWMReaderAdvanced_SetAllocateForOutput(This,dwOutputNum,fAllocate) (This)->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate)
#define IWMReaderAdvanced_GetAllocateForOutput(This,dwOutputNum,pfAllocate) (This)->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate)
#define IWMReaderAdvanced_SetAllocateForStream(This,wStreamNum,fAllocate) (This)->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate)
#define IWMReaderAdvanced_GetAllocateForStream(This,dwStreamNum,pfAllocate) (This)->lpVtbl->GetAllocateForStream(This,dwStreamNum,pfAllocate)
#define IWMReaderAdvanced_GetStatistics(This,pStatistics) (This)->lpVtbl->GetStatistics(This,pStatistics)
#define IWMReaderAdvanced_SetClientInfo(This,pClientInfo) (This)->lpVtbl->SetClientInfo(This,pClientInfo)
#define IWMReaderAdvanced_GetMaxOutputSampleSize(This,dwOutput,pcbMax) (This)->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax)
#define IWMReaderAdvanced_GetMaxStreamSampleSize(This,wStream,pcbMax) (This)->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax)
#define IWMReaderAdvanced_NotifyLateDelivery(This,cnsLateness) (This)->lpVtbl->NotifyLateDelivery(This,cnsLateness)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced_QueryInterface(IWMReaderAdvanced* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMReaderAdvanced_AddRef(IWMReaderAdvanced* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMReaderAdvanced_Release(IWMReaderAdvanced* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMReaderAdvanced methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced_SetUserProvidedClock(IWMReaderAdvanced* This,BOOL fUserClock) {
    return This->lpVtbl->SetUserProvidedClock(This,fUserClock);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_GetUserProvidedClock(IWMReaderAdvanced* This,BOOL *pfUserClock) {
    return This->lpVtbl->GetUserProvidedClock(This,pfUserClock);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_DeliverTime(IWMReaderAdvanced* This,QWORD cnsTime) {
    return This->lpVtbl->DeliverTime(This,cnsTime);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_SetManualStreamSelection(IWMReaderAdvanced* This,BOOL fSelection) {
    return This->lpVtbl->SetManualStreamSelection(This,fSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_GetManualStreamSelection(IWMReaderAdvanced* This,BOOL *pfSelection) {
    return This->lpVtbl->GetManualStreamSelection(This,pfSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_SetStreamsSelected(IWMReaderAdvanced* This,WORD cStreamCount,WORD *pwStreamNumbers,WMT_STREAM_SELECTION *pSelections) {
    return This->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_GetStreamSelected(IWMReaderAdvanced* This,WORD wStreamNum,WMT_STREAM_SELECTION *pSelection) {
    return This->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_SetReceiveSelectionCallbacks(IWMReaderAdvanced* This,BOOL fGetCallbacks) {
    return This->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_GetReceiveSelectionCallbacks(IWMReaderAdvanced* This,BOOL *pfGetCallbacks) {
    return This->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_SetReceiveStreamSamples(IWMReaderAdvanced* This,WORD wStreamNum,BOOL fReceiveStreamSamples) {
    return This->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_GetReceiveStreamSamples(IWMReaderAdvanced* This,WORD wStreamNum,BOOL *pfReceiveStreamSamples) {
    return This->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_SetAllocateForOutput(IWMReaderAdvanced* This,DWORD dwOutputNum,BOOL fAllocate) {
    return This->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_GetAllocateForOutput(IWMReaderAdvanced* This,DWORD dwOutputNum,BOOL *pfAllocate) {
    return This->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_SetAllocateForStream(IWMReaderAdvanced* This,WORD wStreamNum,BOOL fAllocate) {
    return This->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_GetAllocateForStream(IWMReaderAdvanced* This,WORD dwStreamNum,BOOL *pfAllocate) {
    return This->lpVtbl->GetAllocateForStream(This,dwStreamNum,pfAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_GetStatistics(IWMReaderAdvanced* This,WM_READER_STATISTICS *pStatistics) {
    return This->lpVtbl->GetStatistics(This,pStatistics);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_SetClientInfo(IWMReaderAdvanced* This,WM_READER_CLIENTINFO *pClientInfo) {
    return This->lpVtbl->SetClientInfo(This,pClientInfo);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_GetMaxOutputSampleSize(IWMReaderAdvanced* This,DWORD dwOutput,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_GetMaxStreamSampleSize(IWMReaderAdvanced* This,WORD wStream,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax);
}
static FORCEINLINE HRESULT IWMReaderAdvanced_NotifyLateDelivery(IWMReaderAdvanced* This,QWORD cnsLateness) {
    return This->lpVtbl->NotifyLateDelivery(This,cnsLateness);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetUserProvidedClock_Proxy(
    IWMReaderAdvanced* This,
    BOOL fUserClock);
void __RPC_STUB IWMReaderAdvanced_SetUserProvidedClock_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetUserProvidedClock_Proxy(
    IWMReaderAdvanced* This,
    BOOL *pfUserClock);
void __RPC_STUB IWMReaderAdvanced_GetUserProvidedClock_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_DeliverTime_Proxy(
    IWMReaderAdvanced* This,
    QWORD cnsTime);
void __RPC_STUB IWMReaderAdvanced_DeliverTime_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetManualStreamSelection_Proxy(
    IWMReaderAdvanced* This,
    BOOL fSelection);
void __RPC_STUB IWMReaderAdvanced_SetManualStreamSelection_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetManualStreamSelection_Proxy(
    IWMReaderAdvanced* This,
    BOOL *pfSelection);
void __RPC_STUB IWMReaderAdvanced_GetManualStreamSelection_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetStreamsSelected_Proxy(
    IWMReaderAdvanced* This,
    WORD cStreamCount,
    WORD *pwStreamNumbers,
    WMT_STREAM_SELECTION *pSelections);
void __RPC_STUB IWMReaderAdvanced_SetStreamsSelected_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetStreamSelected_Proxy(
    IWMReaderAdvanced* This,
    WORD wStreamNum,
    WMT_STREAM_SELECTION *pSelection);
void __RPC_STUB IWMReaderAdvanced_GetStreamSelected_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetReceiveSelectionCallbacks_Proxy(
    IWMReaderAdvanced* This,
    BOOL fGetCallbacks);
void __RPC_STUB IWMReaderAdvanced_SetReceiveSelectionCallbacks_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetReceiveSelectionCallbacks_Proxy(
    IWMReaderAdvanced* This,
    BOOL *pfGetCallbacks);
void __RPC_STUB IWMReaderAdvanced_GetReceiveSelectionCallbacks_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetReceiveStreamSamples_Proxy(
    IWMReaderAdvanced* This,
    WORD wStreamNum,
    BOOL fReceiveStreamSamples);
void __RPC_STUB IWMReaderAdvanced_SetReceiveStreamSamples_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetReceiveStreamSamples_Proxy(
    IWMReaderAdvanced* This,
    WORD wStreamNum,
    BOOL *pfReceiveStreamSamples);
void __RPC_STUB IWMReaderAdvanced_GetReceiveStreamSamples_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetAllocateForOutput_Proxy(
    IWMReaderAdvanced* This,
    DWORD dwOutputNum,
    BOOL fAllocate);
void __RPC_STUB IWMReaderAdvanced_SetAllocateForOutput_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetAllocateForOutput_Proxy(
    IWMReaderAdvanced* This,
    DWORD dwOutputNum,
    BOOL *pfAllocate);
void __RPC_STUB IWMReaderAdvanced_GetAllocateForOutput_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetAllocateForStream_Proxy(
    IWMReaderAdvanced* This,
    WORD wStreamNum,
    BOOL fAllocate);
void __RPC_STUB IWMReaderAdvanced_SetAllocateForStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetAllocateForStream_Proxy(
    IWMReaderAdvanced* This,
    WORD dwStreamNum,
    BOOL *pfAllocate);
void __RPC_STUB IWMReaderAdvanced_GetAllocateForStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetStatistics_Proxy(
    IWMReaderAdvanced* This,
    WM_READER_STATISTICS *pStatistics);
void __RPC_STUB IWMReaderAdvanced_GetStatistics_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_SetClientInfo_Proxy(
    IWMReaderAdvanced* This,
    WM_READER_CLIENTINFO *pClientInfo);
void __RPC_STUB IWMReaderAdvanced_SetClientInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetMaxOutputSampleSize_Proxy(
    IWMReaderAdvanced* This,
    DWORD dwOutput,
    DWORD *pcbMax);
void __RPC_STUB IWMReaderAdvanced_GetMaxOutputSampleSize_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_GetMaxStreamSampleSize_Proxy(
    IWMReaderAdvanced* This,
    WORD wStream,
    DWORD *pcbMax);
void __RPC_STUB IWMReaderAdvanced_GetMaxStreamSampleSize_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced_NotifyLateDelivery_Proxy(
    IWMReaderAdvanced* This,
    QWORD cnsLateness);
void __RPC_STUB IWMReaderAdvanced_NotifyLateDelivery_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMReaderAdvanced_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMReaderAdvanced2 interface
 */
#ifndef __IWMReaderAdvanced2_INTERFACE_DEFINED__
#define __IWMReaderAdvanced2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMReaderAdvanced2, 0xae14a945, 0xb90c, 0x4d0d, 0x91,0x27, 0x80,0xd6,0x65,0xf7,0xd7,0x3e);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ae14a945-b90c-4d0d-9127-80d665f7d73e")
IWMReaderAdvanced2 : public IWMReaderAdvanced
{
    virtual HRESULT STDMETHODCALLTYPE SetPlayMode(
        WMT_PLAY_MODE Mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPlayMode(
        WMT_PLAY_MODE *pMode) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBufferProgress(
        DWORD *pdwPercent,
        QWORD *pcnsBuffering) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDownloadProgress(
        DWORD *pdwPercent,
        QWORD *pqwBytesDownloaded,
        QWORD *pcnsDownload) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSaveAsProgress(
        DWORD *pdwPercent) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveFileAs(
        const WCHAR *pwszFilename) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProtocolName(
        WCHAR *pwszProtocol,
        DWORD *pcchProtocol) = 0;

    virtual HRESULT STDMETHODCALLTYPE StartAtMarker(
        WORD wMarkerIndex,
        QWORD cnsDuration,
        float fRate,
        void *pvContext) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputSetting(
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE *pType,
        BYTE *pValue,
        WORD *pcbLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputSetting(
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE Type,
        const BYTE *pValue,
        WORD cbLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE Preroll(
        QWORD cnsStart,
        QWORD cnsDuration,
        float fRate) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetLogClientID(
        BOOL fLogClientID) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLogClientID(
        BOOL *pfLogClientID) = 0;

    virtual HRESULT STDMETHODCALLTYPE StopBuffering(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE OpenStream(
        IStream *pStream,
        IWMReaderCallback *pCallback,
        void *pvContext) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMReaderAdvanced2, 0xae14a945, 0xb90c, 0x4d0d, 0x91,0x27, 0x80,0xd6,0x65,0xf7,0xd7,0x3e)
#endif
#else
typedef struct IWMReaderAdvanced2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMReaderAdvanced2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMReaderAdvanced2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMReaderAdvanced2 *This);

    /*** IWMReaderAdvanced methods ***/
    HRESULT (STDMETHODCALLTYPE *SetUserProvidedClock)(
        IWMReaderAdvanced2 *This,
        BOOL fUserClock);

    HRESULT (STDMETHODCALLTYPE *GetUserProvidedClock)(
        IWMReaderAdvanced2 *This,
        BOOL *pfUserClock);

    HRESULT (STDMETHODCALLTYPE *DeliverTime)(
        IWMReaderAdvanced2 *This,
        QWORD cnsTime);

    HRESULT (STDMETHODCALLTYPE *SetManualStreamSelection)(
        IWMReaderAdvanced2 *This,
        BOOL fSelection);

    HRESULT (STDMETHODCALLTYPE *GetManualStreamSelection)(
        IWMReaderAdvanced2 *This,
        BOOL *pfSelection);

    HRESULT (STDMETHODCALLTYPE *SetStreamsSelected)(
        IWMReaderAdvanced2 *This,
        WORD cStreamCount,
        WORD *pwStreamNumbers,
        WMT_STREAM_SELECTION *pSelections);

    HRESULT (STDMETHODCALLTYPE *GetStreamSelected)(
        IWMReaderAdvanced2 *This,
        WORD wStreamNum,
        WMT_STREAM_SELECTION *pSelection);

    HRESULT (STDMETHODCALLTYPE *SetReceiveSelectionCallbacks)(
        IWMReaderAdvanced2 *This,
        BOOL fGetCallbacks);

    HRESULT (STDMETHODCALLTYPE *GetReceiveSelectionCallbacks)(
        IWMReaderAdvanced2 *This,
        BOOL *pfGetCallbacks);

    HRESULT (STDMETHODCALLTYPE *SetReceiveStreamSamples)(
        IWMReaderAdvanced2 *This,
        WORD wStreamNum,
        BOOL fReceiveStreamSamples);

    HRESULT (STDMETHODCALLTYPE *GetReceiveStreamSamples)(
        IWMReaderAdvanced2 *This,
        WORD wStreamNum,
        BOOL *pfReceiveStreamSamples);

    HRESULT (STDMETHODCALLTYPE *SetAllocateForOutput)(
        IWMReaderAdvanced2 *This,
        DWORD dwOutputNum,
        BOOL fAllocate);

    HRESULT (STDMETHODCALLTYPE *GetAllocateForOutput)(
        IWMReaderAdvanced2 *This,
        DWORD dwOutputNum,
        BOOL *pfAllocate);

    HRESULT (STDMETHODCALLTYPE *SetAllocateForStream)(
        IWMReaderAdvanced2 *This,
        WORD wStreamNum,
        BOOL fAllocate);

    HRESULT (STDMETHODCALLTYPE *GetAllocateForStream)(
        IWMReaderAdvanced2 *This,
        WORD dwStreamNum,
        BOOL *pfAllocate);

    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
        IWMReaderAdvanced2 *This,
        WM_READER_STATISTICS *pStatistics);

    HRESULT (STDMETHODCALLTYPE *SetClientInfo)(
        IWMReaderAdvanced2 *This,
        WM_READER_CLIENTINFO *pClientInfo);

    HRESULT (STDMETHODCALLTYPE *GetMaxOutputSampleSize)(
        IWMReaderAdvanced2 *This,
        DWORD dwOutput,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *GetMaxStreamSampleSize)(
        IWMReaderAdvanced2 *This,
        WORD wStream,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *NotifyLateDelivery)(
        IWMReaderAdvanced2 *This,
        QWORD cnsLateness);

    /*** IWMReaderAdvanced2 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPlayMode)(
        IWMReaderAdvanced2 *This,
        WMT_PLAY_MODE Mode);

    HRESULT (STDMETHODCALLTYPE *GetPlayMode)(
        IWMReaderAdvanced2 *This,
        WMT_PLAY_MODE *pMode);

    HRESULT (STDMETHODCALLTYPE *GetBufferProgress)(
        IWMReaderAdvanced2 *This,
        DWORD *pdwPercent,
        QWORD *pcnsBuffering);

    HRESULT (STDMETHODCALLTYPE *GetDownloadProgress)(
        IWMReaderAdvanced2 *This,
        DWORD *pdwPercent,
        QWORD *pqwBytesDownloaded,
        QWORD *pcnsDownload);

    HRESULT (STDMETHODCALLTYPE *GetSaveAsProgress)(
        IWMReaderAdvanced2 *This,
        DWORD *pdwPercent);

    HRESULT (STDMETHODCALLTYPE *SaveFileAs)(
        IWMReaderAdvanced2 *This,
        const WCHAR *pwszFilename);

    HRESULT (STDMETHODCALLTYPE *GetProtocolName)(
        IWMReaderAdvanced2 *This,
        WCHAR *pwszProtocol,
        DWORD *pcchProtocol);

    HRESULT (STDMETHODCALLTYPE *StartAtMarker)(
        IWMReaderAdvanced2 *This,
        WORD wMarkerIndex,
        QWORD cnsDuration,
        float fRate,
        void *pvContext);

    HRESULT (STDMETHODCALLTYPE *GetOutputSetting)(
        IWMReaderAdvanced2 *This,
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE *pType,
        BYTE *pValue,
        WORD *pcbLength);

    HRESULT (STDMETHODCALLTYPE *SetOutputSetting)(
        IWMReaderAdvanced2 *This,
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE Type,
        const BYTE *pValue,
        WORD cbLength);

    HRESULT (STDMETHODCALLTYPE *Preroll)(
        IWMReaderAdvanced2 *This,
        QWORD cnsStart,
        QWORD cnsDuration,
        float fRate);

    HRESULT (STDMETHODCALLTYPE *SetLogClientID)(
        IWMReaderAdvanced2 *This,
        BOOL fLogClientID);

    HRESULT (STDMETHODCALLTYPE *GetLogClientID)(
        IWMReaderAdvanced2 *This,
        BOOL *pfLogClientID);

    HRESULT (STDMETHODCALLTYPE *StopBuffering)(
        IWMReaderAdvanced2 *This);

    HRESULT (STDMETHODCALLTYPE *OpenStream)(
        IWMReaderAdvanced2 *This,
        IStream *pStream,
        IWMReaderCallback *pCallback,
        void *pvContext);

    END_INTERFACE
} IWMReaderAdvanced2Vtbl;

interface IWMReaderAdvanced2 {
    CONST_VTBL IWMReaderAdvanced2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMReaderAdvanced2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMReaderAdvanced2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMReaderAdvanced2_Release(This) (This)->lpVtbl->Release(This)
/*** IWMReaderAdvanced methods ***/
#define IWMReaderAdvanced2_SetUserProvidedClock(This,fUserClock) (This)->lpVtbl->SetUserProvidedClock(This,fUserClock)
#define IWMReaderAdvanced2_GetUserProvidedClock(This,pfUserClock) (This)->lpVtbl->GetUserProvidedClock(This,pfUserClock)
#define IWMReaderAdvanced2_DeliverTime(This,cnsTime) (This)->lpVtbl->DeliverTime(This,cnsTime)
#define IWMReaderAdvanced2_SetManualStreamSelection(This,fSelection) (This)->lpVtbl->SetManualStreamSelection(This,fSelection)
#define IWMReaderAdvanced2_GetManualStreamSelection(This,pfSelection) (This)->lpVtbl->GetManualStreamSelection(This,pfSelection)
#define IWMReaderAdvanced2_SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections) (This)->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections)
#define IWMReaderAdvanced2_GetStreamSelected(This,wStreamNum,pSelection) (This)->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection)
#define IWMReaderAdvanced2_SetReceiveSelectionCallbacks(This,fGetCallbacks) (This)->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks)
#define IWMReaderAdvanced2_GetReceiveSelectionCallbacks(This,pfGetCallbacks) (This)->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks)
#define IWMReaderAdvanced2_SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples) (This)->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples)
#define IWMReaderAdvanced2_GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples) (This)->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples)
#define IWMReaderAdvanced2_SetAllocateForOutput(This,dwOutputNum,fAllocate) (This)->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate)
#define IWMReaderAdvanced2_GetAllocateForOutput(This,dwOutputNum,pfAllocate) (This)->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate)
#define IWMReaderAdvanced2_SetAllocateForStream(This,wStreamNum,fAllocate) (This)->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate)
#define IWMReaderAdvanced2_GetAllocateForStream(This,dwStreamNum,pfAllocate) (This)->lpVtbl->GetAllocateForStream(This,dwStreamNum,pfAllocate)
#define IWMReaderAdvanced2_GetStatistics(This,pStatistics) (This)->lpVtbl->GetStatistics(This,pStatistics)
#define IWMReaderAdvanced2_SetClientInfo(This,pClientInfo) (This)->lpVtbl->SetClientInfo(This,pClientInfo)
#define IWMReaderAdvanced2_GetMaxOutputSampleSize(This,dwOutput,pcbMax) (This)->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax)
#define IWMReaderAdvanced2_GetMaxStreamSampleSize(This,wStream,pcbMax) (This)->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax)
#define IWMReaderAdvanced2_NotifyLateDelivery(This,cnsLateness) (This)->lpVtbl->NotifyLateDelivery(This,cnsLateness)
/*** IWMReaderAdvanced2 methods ***/
#define IWMReaderAdvanced2_SetPlayMode(This,Mode) (This)->lpVtbl->SetPlayMode(This,Mode)
#define IWMReaderAdvanced2_GetPlayMode(This,pMode) (This)->lpVtbl->GetPlayMode(This,pMode)
#define IWMReaderAdvanced2_GetBufferProgress(This,pdwPercent,pcnsBuffering) (This)->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering)
#define IWMReaderAdvanced2_GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload) (This)->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload)
#define IWMReaderAdvanced2_GetSaveAsProgress(This,pdwPercent) (This)->lpVtbl->GetSaveAsProgress(This,pdwPercent)
#define IWMReaderAdvanced2_SaveFileAs(This,pwszFilename) (This)->lpVtbl->SaveFileAs(This,pwszFilename)
#define IWMReaderAdvanced2_GetProtocolName(This,pwszProtocol,pcchProtocol) (This)->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol)
#define IWMReaderAdvanced2_StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext) (This)->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext)
#define IWMReaderAdvanced2_GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength) (This)->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength)
#define IWMReaderAdvanced2_SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength) (This)->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength)
#define IWMReaderAdvanced2_Preroll(This,cnsStart,cnsDuration,fRate) (This)->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate)
#define IWMReaderAdvanced2_SetLogClientID(This,fLogClientID) (This)->lpVtbl->SetLogClientID(This,fLogClientID)
#define IWMReaderAdvanced2_GetLogClientID(This,pfLogClientID) (This)->lpVtbl->GetLogClientID(This,pfLogClientID)
#define IWMReaderAdvanced2_StopBuffering(This) (This)->lpVtbl->StopBuffering(This)
#define IWMReaderAdvanced2_OpenStream(This,pStream,pCallback,pvContext) (This)->lpVtbl->OpenStream(This,pStream,pCallback,pvContext)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced2_QueryInterface(IWMReaderAdvanced2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMReaderAdvanced2_AddRef(IWMReaderAdvanced2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMReaderAdvanced2_Release(IWMReaderAdvanced2* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMReaderAdvanced methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced2_SetUserProvidedClock(IWMReaderAdvanced2* This,BOOL fUserClock) {
    return This->lpVtbl->SetUserProvidedClock(This,fUserClock);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetUserProvidedClock(IWMReaderAdvanced2* This,BOOL *pfUserClock) {
    return This->lpVtbl->GetUserProvidedClock(This,pfUserClock);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_DeliverTime(IWMReaderAdvanced2* This,QWORD cnsTime) {
    return This->lpVtbl->DeliverTime(This,cnsTime);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_SetManualStreamSelection(IWMReaderAdvanced2* This,BOOL fSelection) {
    return This->lpVtbl->SetManualStreamSelection(This,fSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetManualStreamSelection(IWMReaderAdvanced2* This,BOOL *pfSelection) {
    return This->lpVtbl->GetManualStreamSelection(This,pfSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_SetStreamsSelected(IWMReaderAdvanced2* This,WORD cStreamCount,WORD *pwStreamNumbers,WMT_STREAM_SELECTION *pSelections) {
    return This->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetStreamSelected(IWMReaderAdvanced2* This,WORD wStreamNum,WMT_STREAM_SELECTION *pSelection) {
    return This->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_SetReceiveSelectionCallbacks(IWMReaderAdvanced2* This,BOOL fGetCallbacks) {
    return This->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetReceiveSelectionCallbacks(IWMReaderAdvanced2* This,BOOL *pfGetCallbacks) {
    return This->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_SetReceiveStreamSamples(IWMReaderAdvanced2* This,WORD wStreamNum,BOOL fReceiveStreamSamples) {
    return This->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetReceiveStreamSamples(IWMReaderAdvanced2* This,WORD wStreamNum,BOOL *pfReceiveStreamSamples) {
    return This->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_SetAllocateForOutput(IWMReaderAdvanced2* This,DWORD dwOutputNum,BOOL fAllocate) {
    return This->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetAllocateForOutput(IWMReaderAdvanced2* This,DWORD dwOutputNum,BOOL *pfAllocate) {
    return This->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_SetAllocateForStream(IWMReaderAdvanced2* This,WORD wStreamNum,BOOL fAllocate) {
    return This->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetAllocateForStream(IWMReaderAdvanced2* This,WORD dwStreamNum,BOOL *pfAllocate) {
    return This->lpVtbl->GetAllocateForStream(This,dwStreamNum,pfAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetStatistics(IWMReaderAdvanced2* This,WM_READER_STATISTICS *pStatistics) {
    return This->lpVtbl->GetStatistics(This,pStatistics);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_SetClientInfo(IWMReaderAdvanced2* This,WM_READER_CLIENTINFO *pClientInfo) {
    return This->lpVtbl->SetClientInfo(This,pClientInfo);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetMaxOutputSampleSize(IWMReaderAdvanced2* This,DWORD dwOutput,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetMaxStreamSampleSize(IWMReaderAdvanced2* This,WORD wStream,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_NotifyLateDelivery(IWMReaderAdvanced2* This,QWORD cnsLateness) {
    return This->lpVtbl->NotifyLateDelivery(This,cnsLateness);
}
/*** IWMReaderAdvanced2 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced2_SetPlayMode(IWMReaderAdvanced2* This,WMT_PLAY_MODE Mode) {
    return This->lpVtbl->SetPlayMode(This,Mode);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetPlayMode(IWMReaderAdvanced2* This,WMT_PLAY_MODE *pMode) {
    return This->lpVtbl->GetPlayMode(This,pMode);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetBufferProgress(IWMReaderAdvanced2* This,DWORD *pdwPercent,QWORD *pcnsBuffering) {
    return This->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetDownloadProgress(IWMReaderAdvanced2* This,DWORD *pdwPercent,QWORD *pqwBytesDownloaded,QWORD *pcnsDownload) {
    return This->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetSaveAsProgress(IWMReaderAdvanced2* This,DWORD *pdwPercent) {
    return This->lpVtbl->GetSaveAsProgress(This,pdwPercent);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_SaveFileAs(IWMReaderAdvanced2* This,const WCHAR *pwszFilename) {
    return This->lpVtbl->SaveFileAs(This,pwszFilename);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetProtocolName(IWMReaderAdvanced2* This,WCHAR *pwszProtocol,DWORD *pcchProtocol) {
    return This->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_StartAtMarker(IWMReaderAdvanced2* This,WORD wMarkerIndex,QWORD cnsDuration,float fRate,void *pvContext) {
    return This->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetOutputSetting(IWMReaderAdvanced2* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE *pType,BYTE *pValue,WORD *pcbLength) {
    return This->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_SetOutputSetting(IWMReaderAdvanced2* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE Type,const BYTE *pValue,WORD cbLength) {
    return This->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_Preroll(IWMReaderAdvanced2* This,QWORD cnsStart,QWORD cnsDuration,float fRate) {
    return This->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_SetLogClientID(IWMReaderAdvanced2* This,BOOL fLogClientID) {
    return This->lpVtbl->SetLogClientID(This,fLogClientID);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_GetLogClientID(IWMReaderAdvanced2* This,BOOL *pfLogClientID) {
    return This->lpVtbl->GetLogClientID(This,pfLogClientID);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_StopBuffering(IWMReaderAdvanced2* This) {
    return This->lpVtbl->StopBuffering(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced2_OpenStream(IWMReaderAdvanced2* This,IStream *pStream,IWMReaderCallback *pCallback,void *pvContext) {
    return This->lpVtbl->OpenStream(This,pStream,pCallback,pvContext);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_SetPlayMode_Proxy(
    IWMReaderAdvanced2* This,
    WMT_PLAY_MODE Mode);
void __RPC_STUB IWMReaderAdvanced2_SetPlayMode_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetPlayMode_Proxy(
    IWMReaderAdvanced2* This,
    WMT_PLAY_MODE *pMode);
void __RPC_STUB IWMReaderAdvanced2_GetPlayMode_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetBufferProgress_Proxy(
    IWMReaderAdvanced2* This,
    DWORD *pdwPercent,
    QWORD *pcnsBuffering);
void __RPC_STUB IWMReaderAdvanced2_GetBufferProgress_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetDownloadProgress_Proxy(
    IWMReaderAdvanced2* This,
    DWORD *pdwPercent,
    QWORD *pqwBytesDownloaded,
    QWORD *pcnsDownload);
void __RPC_STUB IWMReaderAdvanced2_GetDownloadProgress_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetSaveAsProgress_Proxy(
    IWMReaderAdvanced2* This,
    DWORD *pdwPercent);
void __RPC_STUB IWMReaderAdvanced2_GetSaveAsProgress_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_SaveFileAs_Proxy(
    IWMReaderAdvanced2* This,
    const WCHAR *pwszFilename);
void __RPC_STUB IWMReaderAdvanced2_SaveFileAs_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetProtocolName_Proxy(
    IWMReaderAdvanced2* This,
    WCHAR *pwszProtocol,
    DWORD *pcchProtocol);
void __RPC_STUB IWMReaderAdvanced2_GetProtocolName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_StartAtMarker_Proxy(
    IWMReaderAdvanced2* This,
    WORD wMarkerIndex,
    QWORD cnsDuration,
    float fRate,
    void *pvContext);
void __RPC_STUB IWMReaderAdvanced2_StartAtMarker_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetOutputSetting_Proxy(
    IWMReaderAdvanced2* This,
    DWORD dwOutputNum,
    LPCWSTR pszName,
    WMT_ATTR_DATATYPE *pType,
    BYTE *pValue,
    WORD *pcbLength);
void __RPC_STUB IWMReaderAdvanced2_GetOutputSetting_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_SetOutputSetting_Proxy(
    IWMReaderAdvanced2* This,
    DWORD dwOutputNum,
    LPCWSTR pszName,
    WMT_ATTR_DATATYPE Type,
    const BYTE *pValue,
    WORD cbLength);
void __RPC_STUB IWMReaderAdvanced2_SetOutputSetting_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_Preroll_Proxy(
    IWMReaderAdvanced2* This,
    QWORD cnsStart,
    QWORD cnsDuration,
    float fRate);
void __RPC_STUB IWMReaderAdvanced2_Preroll_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_SetLogClientID_Proxy(
    IWMReaderAdvanced2* This,
    BOOL fLogClientID);
void __RPC_STUB IWMReaderAdvanced2_SetLogClientID_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_GetLogClientID_Proxy(
    IWMReaderAdvanced2* This,
    BOOL *pfLogClientID);
void __RPC_STUB IWMReaderAdvanced2_GetLogClientID_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_StopBuffering_Proxy(
    IWMReaderAdvanced2* This);
void __RPC_STUB IWMReaderAdvanced2_StopBuffering_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced2_OpenStream_Proxy(
    IWMReaderAdvanced2* This,
    IStream *pStream,
    IWMReaderCallback *pCallback,
    void *pvContext);
void __RPC_STUB IWMReaderAdvanced2_OpenStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMReaderAdvanced2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMReaderAdvanced3 interface
 */
#ifndef __IWMReaderAdvanced3_INTERFACE_DEFINED__
#define __IWMReaderAdvanced3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMReaderAdvanced3, 0x5dc0674b, 0xf04b, 0x4a4e, 0x9f,0x2a, 0xb1,0xaf,0xde,0x2c,0x81,0x00);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5dc0674b-f04b-4a4e-9f2a-b1afde2c8100")
IWMReaderAdvanced3 : public IWMReaderAdvanced2
{
    virtual HRESULT STDMETHODCALLTYPE StopNetStreaming(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE StartAtPosition(
        WORD wStreamNum,
        void *pvOffsetStart,
        void *pvDuration,
        WMT_OFFSET_FORMAT dwOffsetFormat,
        float fRate,
        void *pvContext) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMReaderAdvanced3, 0x5dc0674b, 0xf04b, 0x4a4e, 0x9f,0x2a, 0xb1,0xaf,0xde,0x2c,0x81,0x00)
#endif
#else
typedef struct IWMReaderAdvanced3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMReaderAdvanced3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMReaderAdvanced3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMReaderAdvanced3 *This);

    /*** IWMReaderAdvanced methods ***/
    HRESULT (STDMETHODCALLTYPE *SetUserProvidedClock)(
        IWMReaderAdvanced3 *This,
        BOOL fUserClock);

    HRESULT (STDMETHODCALLTYPE *GetUserProvidedClock)(
        IWMReaderAdvanced3 *This,
        BOOL *pfUserClock);

    HRESULT (STDMETHODCALLTYPE *DeliverTime)(
        IWMReaderAdvanced3 *This,
        QWORD cnsTime);

    HRESULT (STDMETHODCALLTYPE *SetManualStreamSelection)(
        IWMReaderAdvanced3 *This,
        BOOL fSelection);

    HRESULT (STDMETHODCALLTYPE *GetManualStreamSelection)(
        IWMReaderAdvanced3 *This,
        BOOL *pfSelection);

    HRESULT (STDMETHODCALLTYPE *SetStreamsSelected)(
        IWMReaderAdvanced3 *This,
        WORD cStreamCount,
        WORD *pwStreamNumbers,
        WMT_STREAM_SELECTION *pSelections);

    HRESULT (STDMETHODCALLTYPE *GetStreamSelected)(
        IWMReaderAdvanced3 *This,
        WORD wStreamNum,
        WMT_STREAM_SELECTION *pSelection);

    HRESULT (STDMETHODCALLTYPE *SetReceiveSelectionCallbacks)(
        IWMReaderAdvanced3 *This,
        BOOL fGetCallbacks);

    HRESULT (STDMETHODCALLTYPE *GetReceiveSelectionCallbacks)(
        IWMReaderAdvanced3 *This,
        BOOL *pfGetCallbacks);

    HRESULT (STDMETHODCALLTYPE *SetReceiveStreamSamples)(
        IWMReaderAdvanced3 *This,
        WORD wStreamNum,
        BOOL fReceiveStreamSamples);

    HRESULT (STDMETHODCALLTYPE *GetReceiveStreamSamples)(
        IWMReaderAdvanced3 *This,
        WORD wStreamNum,
        BOOL *pfReceiveStreamSamples);

    HRESULT (STDMETHODCALLTYPE *SetAllocateForOutput)(
        IWMReaderAdvanced3 *This,
        DWORD dwOutputNum,
        BOOL fAllocate);

    HRESULT (STDMETHODCALLTYPE *GetAllocateForOutput)(
        IWMReaderAdvanced3 *This,
        DWORD dwOutputNum,
        BOOL *pfAllocate);

    HRESULT (STDMETHODCALLTYPE *SetAllocateForStream)(
        IWMReaderAdvanced3 *This,
        WORD wStreamNum,
        BOOL fAllocate);

    HRESULT (STDMETHODCALLTYPE *GetAllocateForStream)(
        IWMReaderAdvanced3 *This,
        WORD dwStreamNum,
        BOOL *pfAllocate);

    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
        IWMReaderAdvanced3 *This,
        WM_READER_STATISTICS *pStatistics);

    HRESULT (STDMETHODCALLTYPE *SetClientInfo)(
        IWMReaderAdvanced3 *This,
        WM_READER_CLIENTINFO *pClientInfo);

    HRESULT (STDMETHODCALLTYPE *GetMaxOutputSampleSize)(
        IWMReaderAdvanced3 *This,
        DWORD dwOutput,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *GetMaxStreamSampleSize)(
        IWMReaderAdvanced3 *This,
        WORD wStream,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *NotifyLateDelivery)(
        IWMReaderAdvanced3 *This,
        QWORD cnsLateness);

    /*** IWMReaderAdvanced2 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPlayMode)(
        IWMReaderAdvanced3 *This,
        WMT_PLAY_MODE Mode);

    HRESULT (STDMETHODCALLTYPE *GetPlayMode)(
        IWMReaderAdvanced3 *This,
        WMT_PLAY_MODE *pMode);

    HRESULT (STDMETHODCALLTYPE *GetBufferProgress)(
        IWMReaderAdvanced3 *This,
        DWORD *pdwPercent,
        QWORD *pcnsBuffering);

    HRESULT (STDMETHODCALLTYPE *GetDownloadProgress)(
        IWMReaderAdvanced3 *This,
        DWORD *pdwPercent,
        QWORD *pqwBytesDownloaded,
        QWORD *pcnsDownload);

    HRESULT (STDMETHODCALLTYPE *GetSaveAsProgress)(
        IWMReaderAdvanced3 *This,
        DWORD *pdwPercent);

    HRESULT (STDMETHODCALLTYPE *SaveFileAs)(
        IWMReaderAdvanced3 *This,
        const WCHAR *pwszFilename);

    HRESULT (STDMETHODCALLTYPE *GetProtocolName)(
        IWMReaderAdvanced3 *This,
        WCHAR *pwszProtocol,
        DWORD *pcchProtocol);

    HRESULT (STDMETHODCALLTYPE *StartAtMarker)(
        IWMReaderAdvanced3 *This,
        WORD wMarkerIndex,
        QWORD cnsDuration,
        float fRate,
        void *pvContext);

    HRESULT (STDMETHODCALLTYPE *GetOutputSetting)(
        IWMReaderAdvanced3 *This,
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE *pType,
        BYTE *pValue,
        WORD *pcbLength);

    HRESULT (STDMETHODCALLTYPE *SetOutputSetting)(
        IWMReaderAdvanced3 *This,
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE Type,
        const BYTE *pValue,
        WORD cbLength);

    HRESULT (STDMETHODCALLTYPE *Preroll)(
        IWMReaderAdvanced3 *This,
        QWORD cnsStart,
        QWORD cnsDuration,
        float fRate);

    HRESULT (STDMETHODCALLTYPE *SetLogClientID)(
        IWMReaderAdvanced3 *This,
        BOOL fLogClientID);

    HRESULT (STDMETHODCALLTYPE *GetLogClientID)(
        IWMReaderAdvanced3 *This,
        BOOL *pfLogClientID);

    HRESULT (STDMETHODCALLTYPE *StopBuffering)(
        IWMReaderAdvanced3 *This);

    HRESULT (STDMETHODCALLTYPE *OpenStream)(
        IWMReaderAdvanced3 *This,
        IStream *pStream,
        IWMReaderCallback *pCallback,
        void *pvContext);

    /*** IWMReaderAdvanced3 methods ***/
    HRESULT (STDMETHODCALLTYPE *StopNetStreaming)(
        IWMReaderAdvanced3 *This);

    HRESULT (STDMETHODCALLTYPE *StartAtPosition)(
        IWMReaderAdvanced3 *This,
        WORD wStreamNum,
        void *pvOffsetStart,
        void *pvDuration,
        WMT_OFFSET_FORMAT dwOffsetFormat,
        float fRate,
        void *pvContext);

    END_INTERFACE
} IWMReaderAdvanced3Vtbl;

interface IWMReaderAdvanced3 {
    CONST_VTBL IWMReaderAdvanced3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMReaderAdvanced3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMReaderAdvanced3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMReaderAdvanced3_Release(This) (This)->lpVtbl->Release(This)
/*** IWMReaderAdvanced methods ***/
#define IWMReaderAdvanced3_SetUserProvidedClock(This,fUserClock) (This)->lpVtbl->SetUserProvidedClock(This,fUserClock)
#define IWMReaderAdvanced3_GetUserProvidedClock(This,pfUserClock) (This)->lpVtbl->GetUserProvidedClock(This,pfUserClock)
#define IWMReaderAdvanced3_DeliverTime(This,cnsTime) (This)->lpVtbl->DeliverTime(This,cnsTime)
#define IWMReaderAdvanced3_SetManualStreamSelection(This,fSelection) (This)->lpVtbl->SetManualStreamSelection(This,fSelection)
#define IWMReaderAdvanced3_GetManualStreamSelection(This,pfSelection) (This)->lpVtbl->GetManualStreamSelection(This,pfSelection)
#define IWMReaderAdvanced3_SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections) (This)->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections)
#define IWMReaderAdvanced3_GetStreamSelected(This,wStreamNum,pSelection) (This)->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection)
#define IWMReaderAdvanced3_SetReceiveSelectionCallbacks(This,fGetCallbacks) (This)->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks)
#define IWMReaderAdvanced3_GetReceiveSelectionCallbacks(This,pfGetCallbacks) (This)->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks)
#define IWMReaderAdvanced3_SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples) (This)->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples)
#define IWMReaderAdvanced3_GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples) (This)->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples)
#define IWMReaderAdvanced3_SetAllocateForOutput(This,dwOutputNum,fAllocate) (This)->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate)
#define IWMReaderAdvanced3_GetAllocateForOutput(This,dwOutputNum,pfAllocate) (This)->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate)
#define IWMReaderAdvanced3_SetAllocateForStream(This,wStreamNum,fAllocate) (This)->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate)
#define IWMReaderAdvanced3_GetAllocateForStream(This,dwStreamNum,pfAllocate) (This)->lpVtbl->GetAllocateForStream(This,dwStreamNum,pfAllocate)
#define IWMReaderAdvanced3_GetStatistics(This,pStatistics) (This)->lpVtbl->GetStatistics(This,pStatistics)
#define IWMReaderAdvanced3_SetClientInfo(This,pClientInfo) (This)->lpVtbl->SetClientInfo(This,pClientInfo)
#define IWMReaderAdvanced3_GetMaxOutputSampleSize(This,dwOutput,pcbMax) (This)->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax)
#define IWMReaderAdvanced3_GetMaxStreamSampleSize(This,wStream,pcbMax) (This)->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax)
#define IWMReaderAdvanced3_NotifyLateDelivery(This,cnsLateness) (This)->lpVtbl->NotifyLateDelivery(This,cnsLateness)
/*** IWMReaderAdvanced2 methods ***/
#define IWMReaderAdvanced3_SetPlayMode(This,Mode) (This)->lpVtbl->SetPlayMode(This,Mode)
#define IWMReaderAdvanced3_GetPlayMode(This,pMode) (This)->lpVtbl->GetPlayMode(This,pMode)
#define IWMReaderAdvanced3_GetBufferProgress(This,pdwPercent,pcnsBuffering) (This)->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering)
#define IWMReaderAdvanced3_GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload) (This)->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload)
#define IWMReaderAdvanced3_GetSaveAsProgress(This,pdwPercent) (This)->lpVtbl->GetSaveAsProgress(This,pdwPercent)
#define IWMReaderAdvanced3_SaveFileAs(This,pwszFilename) (This)->lpVtbl->SaveFileAs(This,pwszFilename)
#define IWMReaderAdvanced3_GetProtocolName(This,pwszProtocol,pcchProtocol) (This)->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol)
#define IWMReaderAdvanced3_StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext) (This)->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext)
#define IWMReaderAdvanced3_GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength) (This)->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength)
#define IWMReaderAdvanced3_SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength) (This)->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength)
#define IWMReaderAdvanced3_Preroll(This,cnsStart,cnsDuration,fRate) (This)->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate)
#define IWMReaderAdvanced3_SetLogClientID(This,fLogClientID) (This)->lpVtbl->SetLogClientID(This,fLogClientID)
#define IWMReaderAdvanced3_GetLogClientID(This,pfLogClientID) (This)->lpVtbl->GetLogClientID(This,pfLogClientID)
#define IWMReaderAdvanced3_StopBuffering(This) (This)->lpVtbl->StopBuffering(This)
#define IWMReaderAdvanced3_OpenStream(This,pStream,pCallback,pvContext) (This)->lpVtbl->OpenStream(This,pStream,pCallback,pvContext)
/*** IWMReaderAdvanced3 methods ***/
#define IWMReaderAdvanced3_StopNetStreaming(This) (This)->lpVtbl->StopNetStreaming(This)
#define IWMReaderAdvanced3_StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext) (This)->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced3_QueryInterface(IWMReaderAdvanced3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMReaderAdvanced3_AddRef(IWMReaderAdvanced3* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMReaderAdvanced3_Release(IWMReaderAdvanced3* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMReaderAdvanced methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced3_SetUserProvidedClock(IWMReaderAdvanced3* This,BOOL fUserClock) {
    return This->lpVtbl->SetUserProvidedClock(This,fUserClock);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetUserProvidedClock(IWMReaderAdvanced3* This,BOOL *pfUserClock) {
    return This->lpVtbl->GetUserProvidedClock(This,pfUserClock);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_DeliverTime(IWMReaderAdvanced3* This,QWORD cnsTime) {
    return This->lpVtbl->DeliverTime(This,cnsTime);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_SetManualStreamSelection(IWMReaderAdvanced3* This,BOOL fSelection) {
    return This->lpVtbl->SetManualStreamSelection(This,fSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetManualStreamSelection(IWMReaderAdvanced3* This,BOOL *pfSelection) {
    return This->lpVtbl->GetManualStreamSelection(This,pfSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_SetStreamsSelected(IWMReaderAdvanced3* This,WORD cStreamCount,WORD *pwStreamNumbers,WMT_STREAM_SELECTION *pSelections) {
    return This->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetStreamSelected(IWMReaderAdvanced3* This,WORD wStreamNum,WMT_STREAM_SELECTION *pSelection) {
    return This->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_SetReceiveSelectionCallbacks(IWMReaderAdvanced3* This,BOOL fGetCallbacks) {
    return This->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetReceiveSelectionCallbacks(IWMReaderAdvanced3* This,BOOL *pfGetCallbacks) {
    return This->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_SetReceiveStreamSamples(IWMReaderAdvanced3* This,WORD wStreamNum,BOOL fReceiveStreamSamples) {
    return This->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetReceiveStreamSamples(IWMReaderAdvanced3* This,WORD wStreamNum,BOOL *pfReceiveStreamSamples) {
    return This->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_SetAllocateForOutput(IWMReaderAdvanced3* This,DWORD dwOutputNum,BOOL fAllocate) {
    return This->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetAllocateForOutput(IWMReaderAdvanced3* This,DWORD dwOutputNum,BOOL *pfAllocate) {
    return This->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_SetAllocateForStream(IWMReaderAdvanced3* This,WORD wStreamNum,BOOL fAllocate) {
    return This->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetAllocateForStream(IWMReaderAdvanced3* This,WORD dwStreamNum,BOOL *pfAllocate) {
    return This->lpVtbl->GetAllocateForStream(This,dwStreamNum,pfAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetStatistics(IWMReaderAdvanced3* This,WM_READER_STATISTICS *pStatistics) {
    return This->lpVtbl->GetStatistics(This,pStatistics);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_SetClientInfo(IWMReaderAdvanced3* This,WM_READER_CLIENTINFO *pClientInfo) {
    return This->lpVtbl->SetClientInfo(This,pClientInfo);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetMaxOutputSampleSize(IWMReaderAdvanced3* This,DWORD dwOutput,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetMaxStreamSampleSize(IWMReaderAdvanced3* This,WORD wStream,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_NotifyLateDelivery(IWMReaderAdvanced3* This,QWORD cnsLateness) {
    return This->lpVtbl->NotifyLateDelivery(This,cnsLateness);
}
/*** IWMReaderAdvanced2 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced3_SetPlayMode(IWMReaderAdvanced3* This,WMT_PLAY_MODE Mode) {
    return This->lpVtbl->SetPlayMode(This,Mode);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetPlayMode(IWMReaderAdvanced3* This,WMT_PLAY_MODE *pMode) {
    return This->lpVtbl->GetPlayMode(This,pMode);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetBufferProgress(IWMReaderAdvanced3* This,DWORD *pdwPercent,QWORD *pcnsBuffering) {
    return This->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetDownloadProgress(IWMReaderAdvanced3* This,DWORD *pdwPercent,QWORD *pqwBytesDownloaded,QWORD *pcnsDownload) {
    return This->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetSaveAsProgress(IWMReaderAdvanced3* This,DWORD *pdwPercent) {
    return This->lpVtbl->GetSaveAsProgress(This,pdwPercent);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_SaveFileAs(IWMReaderAdvanced3* This,const WCHAR *pwszFilename) {
    return This->lpVtbl->SaveFileAs(This,pwszFilename);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetProtocolName(IWMReaderAdvanced3* This,WCHAR *pwszProtocol,DWORD *pcchProtocol) {
    return This->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_StartAtMarker(IWMReaderAdvanced3* This,WORD wMarkerIndex,QWORD cnsDuration,float fRate,void *pvContext) {
    return This->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetOutputSetting(IWMReaderAdvanced3* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE *pType,BYTE *pValue,WORD *pcbLength) {
    return This->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_SetOutputSetting(IWMReaderAdvanced3* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE Type,const BYTE *pValue,WORD cbLength) {
    return This->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_Preroll(IWMReaderAdvanced3* This,QWORD cnsStart,QWORD cnsDuration,float fRate) {
    return This->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_SetLogClientID(IWMReaderAdvanced3* This,BOOL fLogClientID) {
    return This->lpVtbl->SetLogClientID(This,fLogClientID);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_GetLogClientID(IWMReaderAdvanced3* This,BOOL *pfLogClientID) {
    return This->lpVtbl->GetLogClientID(This,pfLogClientID);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_StopBuffering(IWMReaderAdvanced3* This) {
    return This->lpVtbl->StopBuffering(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_OpenStream(IWMReaderAdvanced3* This,IStream *pStream,IWMReaderCallback *pCallback,void *pvContext) {
    return This->lpVtbl->OpenStream(This,pStream,pCallback,pvContext);
}
/*** IWMReaderAdvanced3 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced3_StopNetStreaming(IWMReaderAdvanced3* This) {
    return This->lpVtbl->StopNetStreaming(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced3_StartAtPosition(IWMReaderAdvanced3* This,WORD wStreamNum,void *pvOffsetStart,void *pvDuration,WMT_OFFSET_FORMAT dwOffsetFormat,float fRate,void *pvContext) {
    return This->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMReaderAdvanced3_StopNetStreaming_Proxy(
    IWMReaderAdvanced3* This);
void __RPC_STUB IWMReaderAdvanced3_StopNetStreaming_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced3_StartAtPosition_Proxy(
    IWMReaderAdvanced3* This,
    WORD wStreamNum,
    void *pvOffsetStart,
    void *pvDuration,
    WMT_OFFSET_FORMAT dwOffsetFormat,
    float fRate,
    void *pvContext);
void __RPC_STUB IWMReaderAdvanced3_StartAtPosition_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMReaderAdvanced3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMReaderAdvanced4 interface
 */
#ifndef __IWMReaderAdvanced4_INTERFACE_DEFINED__
#define __IWMReaderAdvanced4_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMReaderAdvanced4, 0x945a76a2, 0x12ae, 0x4d48, 0xbd,0x3c, 0xcd,0x1d,0x90,0x39,0x9b,0x85);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("945a76a2-12ae-4d48-bd3c-cd1d90399b85")
IWMReaderAdvanced4 : public IWMReaderAdvanced3
{
    virtual HRESULT STDMETHODCALLTYPE GetLanguageCount(
        DWORD dwOutputNum,
        WORD *pwLanguageCount) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLanguage(
        DWORD dwOutputNum,
        WORD wLanguage,
        WCHAR *pwszLanguageString,
        WORD *pcchLanguageStringLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMaxSpeedFactor(
        double *pdblFactor) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsUsingFastCache(
        BOOL *pfUsingFastCache) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddLogParam(
        LPCWSTR wszNameSpace,
        LPCWSTR wszName,
        LPCWSTR wszValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SendLogParams(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CanSaveFileAs(
        BOOL *pfCanSave) = 0;

    virtual HRESULT STDMETHODCALLTYPE CancelSaveFileAs(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetURL(
        WCHAR *pwszURL,
        DWORD *pcchURL) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMReaderAdvanced4, 0x945a76a2, 0x12ae, 0x4d48, 0xbd,0x3c, 0xcd,0x1d,0x90,0x39,0x9b,0x85)
#endif
#else
typedef struct IWMReaderAdvanced4Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMReaderAdvanced4 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMReaderAdvanced4 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMReaderAdvanced4 *This);

    /*** IWMReaderAdvanced methods ***/
    HRESULT (STDMETHODCALLTYPE *SetUserProvidedClock)(
        IWMReaderAdvanced4 *This,
        BOOL fUserClock);

    HRESULT (STDMETHODCALLTYPE *GetUserProvidedClock)(
        IWMReaderAdvanced4 *This,
        BOOL *pfUserClock);

    HRESULT (STDMETHODCALLTYPE *DeliverTime)(
        IWMReaderAdvanced4 *This,
        QWORD cnsTime);

    HRESULT (STDMETHODCALLTYPE *SetManualStreamSelection)(
        IWMReaderAdvanced4 *This,
        BOOL fSelection);

    HRESULT (STDMETHODCALLTYPE *GetManualStreamSelection)(
        IWMReaderAdvanced4 *This,
        BOOL *pfSelection);

    HRESULT (STDMETHODCALLTYPE *SetStreamsSelected)(
        IWMReaderAdvanced4 *This,
        WORD cStreamCount,
        WORD *pwStreamNumbers,
        WMT_STREAM_SELECTION *pSelections);

    HRESULT (STDMETHODCALLTYPE *GetStreamSelected)(
        IWMReaderAdvanced4 *This,
        WORD wStreamNum,
        WMT_STREAM_SELECTION *pSelection);

    HRESULT (STDMETHODCALLTYPE *SetReceiveSelectionCallbacks)(
        IWMReaderAdvanced4 *This,
        BOOL fGetCallbacks);

    HRESULT (STDMETHODCALLTYPE *GetReceiveSelectionCallbacks)(
        IWMReaderAdvanced4 *This,
        BOOL *pfGetCallbacks);

    HRESULT (STDMETHODCALLTYPE *SetReceiveStreamSamples)(
        IWMReaderAdvanced4 *This,
        WORD wStreamNum,
        BOOL fReceiveStreamSamples);

    HRESULT (STDMETHODCALLTYPE *GetReceiveStreamSamples)(
        IWMReaderAdvanced4 *This,
        WORD wStreamNum,
        BOOL *pfReceiveStreamSamples);

    HRESULT (STDMETHODCALLTYPE *SetAllocateForOutput)(
        IWMReaderAdvanced4 *This,
        DWORD dwOutputNum,
        BOOL fAllocate);

    HRESULT (STDMETHODCALLTYPE *GetAllocateForOutput)(
        IWMReaderAdvanced4 *This,
        DWORD dwOutputNum,
        BOOL *pfAllocate);

    HRESULT (STDMETHODCALLTYPE *SetAllocateForStream)(
        IWMReaderAdvanced4 *This,
        WORD wStreamNum,
        BOOL fAllocate);

    HRESULT (STDMETHODCALLTYPE *GetAllocateForStream)(
        IWMReaderAdvanced4 *This,
        WORD dwStreamNum,
        BOOL *pfAllocate);

    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
        IWMReaderAdvanced4 *This,
        WM_READER_STATISTICS *pStatistics);

    HRESULT (STDMETHODCALLTYPE *SetClientInfo)(
        IWMReaderAdvanced4 *This,
        WM_READER_CLIENTINFO *pClientInfo);

    HRESULT (STDMETHODCALLTYPE *GetMaxOutputSampleSize)(
        IWMReaderAdvanced4 *This,
        DWORD dwOutput,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *GetMaxStreamSampleSize)(
        IWMReaderAdvanced4 *This,
        WORD wStream,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *NotifyLateDelivery)(
        IWMReaderAdvanced4 *This,
        QWORD cnsLateness);

    /*** IWMReaderAdvanced2 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPlayMode)(
        IWMReaderAdvanced4 *This,
        WMT_PLAY_MODE Mode);

    HRESULT (STDMETHODCALLTYPE *GetPlayMode)(
        IWMReaderAdvanced4 *This,
        WMT_PLAY_MODE *pMode);

    HRESULT (STDMETHODCALLTYPE *GetBufferProgress)(
        IWMReaderAdvanced4 *This,
        DWORD *pdwPercent,
        QWORD *pcnsBuffering);

    HRESULT (STDMETHODCALLTYPE *GetDownloadProgress)(
        IWMReaderAdvanced4 *This,
        DWORD *pdwPercent,
        QWORD *pqwBytesDownloaded,
        QWORD *pcnsDownload);

    HRESULT (STDMETHODCALLTYPE *GetSaveAsProgress)(
        IWMReaderAdvanced4 *This,
        DWORD *pdwPercent);

    HRESULT (STDMETHODCALLTYPE *SaveFileAs)(
        IWMReaderAdvanced4 *This,
        const WCHAR *pwszFilename);

    HRESULT (STDMETHODCALLTYPE *GetProtocolName)(
        IWMReaderAdvanced4 *This,
        WCHAR *pwszProtocol,
        DWORD *pcchProtocol);

    HRESULT (STDMETHODCALLTYPE *StartAtMarker)(
        IWMReaderAdvanced4 *This,
        WORD wMarkerIndex,
        QWORD cnsDuration,
        float fRate,
        void *pvContext);

    HRESULT (STDMETHODCALLTYPE *GetOutputSetting)(
        IWMReaderAdvanced4 *This,
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE *pType,
        BYTE *pValue,
        WORD *pcbLength);

    HRESULT (STDMETHODCALLTYPE *SetOutputSetting)(
        IWMReaderAdvanced4 *This,
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE Type,
        const BYTE *pValue,
        WORD cbLength);

    HRESULT (STDMETHODCALLTYPE *Preroll)(
        IWMReaderAdvanced4 *This,
        QWORD cnsStart,
        QWORD cnsDuration,
        float fRate);

    HRESULT (STDMETHODCALLTYPE *SetLogClientID)(
        IWMReaderAdvanced4 *This,
        BOOL fLogClientID);

    HRESULT (STDMETHODCALLTYPE *GetLogClientID)(
        IWMReaderAdvanced4 *This,
        BOOL *pfLogClientID);

    HRESULT (STDMETHODCALLTYPE *StopBuffering)(
        IWMReaderAdvanced4 *This);

    HRESULT (STDMETHODCALLTYPE *OpenStream)(
        IWMReaderAdvanced4 *This,
        IStream *pStream,
        IWMReaderCallback *pCallback,
        void *pvContext);

    /*** IWMReaderAdvanced3 methods ***/
    HRESULT (STDMETHODCALLTYPE *StopNetStreaming)(
        IWMReaderAdvanced4 *This);

    HRESULT (STDMETHODCALLTYPE *StartAtPosition)(
        IWMReaderAdvanced4 *This,
        WORD wStreamNum,
        void *pvOffsetStart,
        void *pvDuration,
        WMT_OFFSET_FORMAT dwOffsetFormat,
        float fRate,
        void *pvContext);

    /*** IWMReaderAdvanced4 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetLanguageCount)(
        IWMReaderAdvanced4 *This,
        DWORD dwOutputNum,
        WORD *pwLanguageCount);

    HRESULT (STDMETHODCALLTYPE *GetLanguage)(
        IWMReaderAdvanced4 *This,
        DWORD dwOutputNum,
        WORD wLanguage,
        WCHAR *pwszLanguageString,
        WORD *pcchLanguageStringLength);

    HRESULT (STDMETHODCALLTYPE *GetMaxSpeedFactor)(
        IWMReaderAdvanced4 *This,
        double *pdblFactor);

    HRESULT (STDMETHODCALLTYPE *IsUsingFastCache)(
        IWMReaderAdvanced4 *This,
        BOOL *pfUsingFastCache);

    HRESULT (STDMETHODCALLTYPE *AddLogParam)(
        IWMReaderAdvanced4 *This,
        LPCWSTR wszNameSpace,
        LPCWSTR wszName,
        LPCWSTR wszValue);

    HRESULT (STDMETHODCALLTYPE *SendLogParams)(
        IWMReaderAdvanced4 *This);

    HRESULT (STDMETHODCALLTYPE *CanSaveFileAs)(
        IWMReaderAdvanced4 *This,
        BOOL *pfCanSave);

    HRESULT (STDMETHODCALLTYPE *CancelSaveFileAs)(
        IWMReaderAdvanced4 *This);

    HRESULT (STDMETHODCALLTYPE *GetURL)(
        IWMReaderAdvanced4 *This,
        WCHAR *pwszURL,
        DWORD *pcchURL);

    END_INTERFACE
} IWMReaderAdvanced4Vtbl;

interface IWMReaderAdvanced4 {
    CONST_VTBL IWMReaderAdvanced4Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMReaderAdvanced4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMReaderAdvanced4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMReaderAdvanced4_Release(This) (This)->lpVtbl->Release(This)
/*** IWMReaderAdvanced methods ***/
#define IWMReaderAdvanced4_SetUserProvidedClock(This,fUserClock) (This)->lpVtbl->SetUserProvidedClock(This,fUserClock)
#define IWMReaderAdvanced4_GetUserProvidedClock(This,pfUserClock) (This)->lpVtbl->GetUserProvidedClock(This,pfUserClock)
#define IWMReaderAdvanced4_DeliverTime(This,cnsTime) (This)->lpVtbl->DeliverTime(This,cnsTime)
#define IWMReaderAdvanced4_SetManualStreamSelection(This,fSelection) (This)->lpVtbl->SetManualStreamSelection(This,fSelection)
#define IWMReaderAdvanced4_GetManualStreamSelection(This,pfSelection) (This)->lpVtbl->GetManualStreamSelection(This,pfSelection)
#define IWMReaderAdvanced4_SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections) (This)->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections)
#define IWMReaderAdvanced4_GetStreamSelected(This,wStreamNum,pSelection) (This)->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection)
#define IWMReaderAdvanced4_SetReceiveSelectionCallbacks(This,fGetCallbacks) (This)->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks)
#define IWMReaderAdvanced4_GetReceiveSelectionCallbacks(This,pfGetCallbacks) (This)->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks)
#define IWMReaderAdvanced4_SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples) (This)->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples)
#define IWMReaderAdvanced4_GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples) (This)->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples)
#define IWMReaderAdvanced4_SetAllocateForOutput(This,dwOutputNum,fAllocate) (This)->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate)
#define IWMReaderAdvanced4_GetAllocateForOutput(This,dwOutputNum,pfAllocate) (This)->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate)
#define IWMReaderAdvanced4_SetAllocateForStream(This,wStreamNum,fAllocate) (This)->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate)
#define IWMReaderAdvanced4_GetAllocateForStream(This,dwStreamNum,pfAllocate) (This)->lpVtbl->GetAllocateForStream(This,dwStreamNum,pfAllocate)
#define IWMReaderAdvanced4_GetStatistics(This,pStatistics) (This)->lpVtbl->GetStatistics(This,pStatistics)
#define IWMReaderAdvanced4_SetClientInfo(This,pClientInfo) (This)->lpVtbl->SetClientInfo(This,pClientInfo)
#define IWMReaderAdvanced4_GetMaxOutputSampleSize(This,dwOutput,pcbMax) (This)->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax)
#define IWMReaderAdvanced4_GetMaxStreamSampleSize(This,wStream,pcbMax) (This)->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax)
#define IWMReaderAdvanced4_NotifyLateDelivery(This,cnsLateness) (This)->lpVtbl->NotifyLateDelivery(This,cnsLateness)
/*** IWMReaderAdvanced2 methods ***/
#define IWMReaderAdvanced4_SetPlayMode(This,Mode) (This)->lpVtbl->SetPlayMode(This,Mode)
#define IWMReaderAdvanced4_GetPlayMode(This,pMode) (This)->lpVtbl->GetPlayMode(This,pMode)
#define IWMReaderAdvanced4_GetBufferProgress(This,pdwPercent,pcnsBuffering) (This)->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering)
#define IWMReaderAdvanced4_GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload) (This)->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload)
#define IWMReaderAdvanced4_GetSaveAsProgress(This,pdwPercent) (This)->lpVtbl->GetSaveAsProgress(This,pdwPercent)
#define IWMReaderAdvanced4_SaveFileAs(This,pwszFilename) (This)->lpVtbl->SaveFileAs(This,pwszFilename)
#define IWMReaderAdvanced4_GetProtocolName(This,pwszProtocol,pcchProtocol) (This)->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol)
#define IWMReaderAdvanced4_StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext) (This)->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext)
#define IWMReaderAdvanced4_GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength) (This)->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength)
#define IWMReaderAdvanced4_SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength) (This)->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength)
#define IWMReaderAdvanced4_Preroll(This,cnsStart,cnsDuration,fRate) (This)->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate)
#define IWMReaderAdvanced4_SetLogClientID(This,fLogClientID) (This)->lpVtbl->SetLogClientID(This,fLogClientID)
#define IWMReaderAdvanced4_GetLogClientID(This,pfLogClientID) (This)->lpVtbl->GetLogClientID(This,pfLogClientID)
#define IWMReaderAdvanced4_StopBuffering(This) (This)->lpVtbl->StopBuffering(This)
#define IWMReaderAdvanced4_OpenStream(This,pStream,pCallback,pvContext) (This)->lpVtbl->OpenStream(This,pStream,pCallback,pvContext)
/*** IWMReaderAdvanced3 methods ***/
#define IWMReaderAdvanced4_StopNetStreaming(This) (This)->lpVtbl->StopNetStreaming(This)
#define IWMReaderAdvanced4_StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext) (This)->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext)
/*** IWMReaderAdvanced4 methods ***/
#define IWMReaderAdvanced4_GetLanguageCount(This,dwOutputNum,pwLanguageCount) (This)->lpVtbl->GetLanguageCount(This,dwOutputNum,pwLanguageCount)
#define IWMReaderAdvanced4_GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength) (This)->lpVtbl->GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength)
#define IWMReaderAdvanced4_GetMaxSpeedFactor(This,pdblFactor) (This)->lpVtbl->GetMaxSpeedFactor(This,pdblFactor)
#define IWMReaderAdvanced4_IsUsingFastCache(This,pfUsingFastCache) (This)->lpVtbl->IsUsingFastCache(This,pfUsingFastCache)
#define IWMReaderAdvanced4_AddLogParam(This,wszNameSpace,wszName,wszValue) (This)->lpVtbl->AddLogParam(This,wszNameSpace,wszName,wszValue)
#define IWMReaderAdvanced4_SendLogParams(This) (This)->lpVtbl->SendLogParams(This)
#define IWMReaderAdvanced4_CanSaveFileAs(This,pfCanSave) (This)->lpVtbl->CanSaveFileAs(This,pfCanSave)
#define IWMReaderAdvanced4_CancelSaveFileAs(This) (This)->lpVtbl->CancelSaveFileAs(This)
#define IWMReaderAdvanced4_GetURL(This,pwszURL,pcchURL) (This)->lpVtbl->GetURL(This,pwszURL,pcchURL)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced4_QueryInterface(IWMReaderAdvanced4* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMReaderAdvanced4_AddRef(IWMReaderAdvanced4* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMReaderAdvanced4_Release(IWMReaderAdvanced4* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMReaderAdvanced methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced4_SetUserProvidedClock(IWMReaderAdvanced4* This,BOOL fUserClock) {
    return This->lpVtbl->SetUserProvidedClock(This,fUserClock);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetUserProvidedClock(IWMReaderAdvanced4* This,BOOL *pfUserClock) {
    return This->lpVtbl->GetUserProvidedClock(This,pfUserClock);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_DeliverTime(IWMReaderAdvanced4* This,QWORD cnsTime) {
    return This->lpVtbl->DeliverTime(This,cnsTime);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_SetManualStreamSelection(IWMReaderAdvanced4* This,BOOL fSelection) {
    return This->lpVtbl->SetManualStreamSelection(This,fSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetManualStreamSelection(IWMReaderAdvanced4* This,BOOL *pfSelection) {
    return This->lpVtbl->GetManualStreamSelection(This,pfSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_SetStreamsSelected(IWMReaderAdvanced4* This,WORD cStreamCount,WORD *pwStreamNumbers,WMT_STREAM_SELECTION *pSelections) {
    return This->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetStreamSelected(IWMReaderAdvanced4* This,WORD wStreamNum,WMT_STREAM_SELECTION *pSelection) {
    return This->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_SetReceiveSelectionCallbacks(IWMReaderAdvanced4* This,BOOL fGetCallbacks) {
    return This->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetReceiveSelectionCallbacks(IWMReaderAdvanced4* This,BOOL *pfGetCallbacks) {
    return This->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_SetReceiveStreamSamples(IWMReaderAdvanced4* This,WORD wStreamNum,BOOL fReceiveStreamSamples) {
    return This->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetReceiveStreamSamples(IWMReaderAdvanced4* This,WORD wStreamNum,BOOL *pfReceiveStreamSamples) {
    return This->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_SetAllocateForOutput(IWMReaderAdvanced4* This,DWORD dwOutputNum,BOOL fAllocate) {
    return This->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetAllocateForOutput(IWMReaderAdvanced4* This,DWORD dwOutputNum,BOOL *pfAllocate) {
    return This->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_SetAllocateForStream(IWMReaderAdvanced4* This,WORD wStreamNum,BOOL fAllocate) {
    return This->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetAllocateForStream(IWMReaderAdvanced4* This,WORD dwStreamNum,BOOL *pfAllocate) {
    return This->lpVtbl->GetAllocateForStream(This,dwStreamNum,pfAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetStatistics(IWMReaderAdvanced4* This,WM_READER_STATISTICS *pStatistics) {
    return This->lpVtbl->GetStatistics(This,pStatistics);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_SetClientInfo(IWMReaderAdvanced4* This,WM_READER_CLIENTINFO *pClientInfo) {
    return This->lpVtbl->SetClientInfo(This,pClientInfo);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetMaxOutputSampleSize(IWMReaderAdvanced4* This,DWORD dwOutput,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetMaxStreamSampleSize(IWMReaderAdvanced4* This,WORD wStream,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_NotifyLateDelivery(IWMReaderAdvanced4* This,QWORD cnsLateness) {
    return This->lpVtbl->NotifyLateDelivery(This,cnsLateness);
}
/*** IWMReaderAdvanced2 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced4_SetPlayMode(IWMReaderAdvanced4* This,WMT_PLAY_MODE Mode) {
    return This->lpVtbl->SetPlayMode(This,Mode);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetPlayMode(IWMReaderAdvanced4* This,WMT_PLAY_MODE *pMode) {
    return This->lpVtbl->GetPlayMode(This,pMode);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetBufferProgress(IWMReaderAdvanced4* This,DWORD *pdwPercent,QWORD *pcnsBuffering) {
    return This->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetDownloadProgress(IWMReaderAdvanced4* This,DWORD *pdwPercent,QWORD *pqwBytesDownloaded,QWORD *pcnsDownload) {
    return This->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetSaveAsProgress(IWMReaderAdvanced4* This,DWORD *pdwPercent) {
    return This->lpVtbl->GetSaveAsProgress(This,pdwPercent);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_SaveFileAs(IWMReaderAdvanced4* This,const WCHAR *pwszFilename) {
    return This->lpVtbl->SaveFileAs(This,pwszFilename);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetProtocolName(IWMReaderAdvanced4* This,WCHAR *pwszProtocol,DWORD *pcchProtocol) {
    return This->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_StartAtMarker(IWMReaderAdvanced4* This,WORD wMarkerIndex,QWORD cnsDuration,float fRate,void *pvContext) {
    return This->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetOutputSetting(IWMReaderAdvanced4* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE *pType,BYTE *pValue,WORD *pcbLength) {
    return This->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_SetOutputSetting(IWMReaderAdvanced4* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE Type,const BYTE *pValue,WORD cbLength) {
    return This->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_Preroll(IWMReaderAdvanced4* This,QWORD cnsStart,QWORD cnsDuration,float fRate) {
    return This->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_SetLogClientID(IWMReaderAdvanced4* This,BOOL fLogClientID) {
    return This->lpVtbl->SetLogClientID(This,fLogClientID);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetLogClientID(IWMReaderAdvanced4* This,BOOL *pfLogClientID) {
    return This->lpVtbl->GetLogClientID(This,pfLogClientID);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_StopBuffering(IWMReaderAdvanced4* This) {
    return This->lpVtbl->StopBuffering(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_OpenStream(IWMReaderAdvanced4* This,IStream *pStream,IWMReaderCallback *pCallback,void *pvContext) {
    return This->lpVtbl->OpenStream(This,pStream,pCallback,pvContext);
}
/*** IWMReaderAdvanced3 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced4_StopNetStreaming(IWMReaderAdvanced4* This) {
    return This->lpVtbl->StopNetStreaming(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_StartAtPosition(IWMReaderAdvanced4* This,WORD wStreamNum,void *pvOffsetStart,void *pvDuration,WMT_OFFSET_FORMAT dwOffsetFormat,float fRate,void *pvContext) {
    return This->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext);
}
/*** IWMReaderAdvanced4 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetLanguageCount(IWMReaderAdvanced4* This,DWORD dwOutputNum,WORD *pwLanguageCount) {
    return This->lpVtbl->GetLanguageCount(This,dwOutputNum,pwLanguageCount);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetLanguage(IWMReaderAdvanced4* This,DWORD dwOutputNum,WORD wLanguage,WCHAR *pwszLanguageString,WORD *pcchLanguageStringLength) {
    return This->lpVtbl->GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetMaxSpeedFactor(IWMReaderAdvanced4* This,double *pdblFactor) {
    return This->lpVtbl->GetMaxSpeedFactor(This,pdblFactor);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_IsUsingFastCache(IWMReaderAdvanced4* This,BOOL *pfUsingFastCache) {
    return This->lpVtbl->IsUsingFastCache(This,pfUsingFastCache);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_AddLogParam(IWMReaderAdvanced4* This,LPCWSTR wszNameSpace,LPCWSTR wszName,LPCWSTR wszValue) {
    return This->lpVtbl->AddLogParam(This,wszNameSpace,wszName,wszValue);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_SendLogParams(IWMReaderAdvanced4* This) {
    return This->lpVtbl->SendLogParams(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_CanSaveFileAs(IWMReaderAdvanced4* This,BOOL *pfCanSave) {
    return This->lpVtbl->CanSaveFileAs(This,pfCanSave);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_CancelSaveFileAs(IWMReaderAdvanced4* This) {
    return This->lpVtbl->CancelSaveFileAs(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced4_GetURL(IWMReaderAdvanced4* This,WCHAR *pwszURL,DWORD *pcchURL) {
    return This->lpVtbl->GetURL(This,pwszURL,pcchURL);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_GetLanguageCount_Proxy(
    IWMReaderAdvanced4* This,
    DWORD dwOutputNum,
    WORD *pwLanguageCount);
void __RPC_STUB IWMReaderAdvanced4_GetLanguageCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_GetLanguage_Proxy(
    IWMReaderAdvanced4* This,
    DWORD dwOutputNum,
    WORD wLanguage,
    WCHAR *pwszLanguageString,
    WORD *pcchLanguageStringLength);
void __RPC_STUB IWMReaderAdvanced4_GetLanguage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_GetMaxSpeedFactor_Proxy(
    IWMReaderAdvanced4* This,
    double *pdblFactor);
void __RPC_STUB IWMReaderAdvanced4_GetMaxSpeedFactor_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_IsUsingFastCache_Proxy(
    IWMReaderAdvanced4* This,
    BOOL *pfUsingFastCache);
void __RPC_STUB IWMReaderAdvanced4_IsUsingFastCache_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_AddLogParam_Proxy(
    IWMReaderAdvanced4* This,
    LPCWSTR wszNameSpace,
    LPCWSTR wszName,
    LPCWSTR wszValue);
void __RPC_STUB IWMReaderAdvanced4_AddLogParam_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_SendLogParams_Proxy(
    IWMReaderAdvanced4* This);
void __RPC_STUB IWMReaderAdvanced4_SendLogParams_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_CanSaveFileAs_Proxy(
    IWMReaderAdvanced4* This,
    BOOL *pfCanSave);
void __RPC_STUB IWMReaderAdvanced4_CanSaveFileAs_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_CancelSaveFileAs_Proxy(
    IWMReaderAdvanced4* This);
void __RPC_STUB IWMReaderAdvanced4_CancelSaveFileAs_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMReaderAdvanced4_GetURL_Proxy(
    IWMReaderAdvanced4* This,
    WCHAR *pwszURL,
    DWORD *pcchURL);
void __RPC_STUB IWMReaderAdvanced4_GetURL_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMReaderAdvanced4_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMReaderAdvanced5 interface
 */
#ifndef __IWMReaderAdvanced5_INTERFACE_DEFINED__
#define __IWMReaderAdvanced5_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMReaderAdvanced5, 0x24c44db0, 0x55d1, 0x49ae, 0xa5,0xcc, 0xf1,0x38,0x15,0xe3,0x63,0x63);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("24c44db0-55d1-49ae-a5cc-f13815e36363")
IWMReaderAdvanced5 : public IWMReaderAdvanced4
{
    virtual HRESULT STDMETHODCALLTYPE SetPlayerHook(
        DWORD dwOutputNum,
        IWMPlayerHook *pHook) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMReaderAdvanced5, 0x24c44db0, 0x55d1, 0x49ae, 0xa5,0xcc, 0xf1,0x38,0x15,0xe3,0x63,0x63)
#endif
#else
typedef struct IWMReaderAdvanced5Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMReaderAdvanced5 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMReaderAdvanced5 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMReaderAdvanced5 *This);

    /*** IWMReaderAdvanced methods ***/
    HRESULT (STDMETHODCALLTYPE *SetUserProvidedClock)(
        IWMReaderAdvanced5 *This,
        BOOL fUserClock);

    HRESULT (STDMETHODCALLTYPE *GetUserProvidedClock)(
        IWMReaderAdvanced5 *This,
        BOOL *pfUserClock);

    HRESULT (STDMETHODCALLTYPE *DeliverTime)(
        IWMReaderAdvanced5 *This,
        QWORD cnsTime);

    HRESULT (STDMETHODCALLTYPE *SetManualStreamSelection)(
        IWMReaderAdvanced5 *This,
        BOOL fSelection);

    HRESULT (STDMETHODCALLTYPE *GetManualStreamSelection)(
        IWMReaderAdvanced5 *This,
        BOOL *pfSelection);

    HRESULT (STDMETHODCALLTYPE *SetStreamsSelected)(
        IWMReaderAdvanced5 *This,
        WORD cStreamCount,
        WORD *pwStreamNumbers,
        WMT_STREAM_SELECTION *pSelections);

    HRESULT (STDMETHODCALLTYPE *GetStreamSelected)(
        IWMReaderAdvanced5 *This,
        WORD wStreamNum,
        WMT_STREAM_SELECTION *pSelection);

    HRESULT (STDMETHODCALLTYPE *SetReceiveSelectionCallbacks)(
        IWMReaderAdvanced5 *This,
        BOOL fGetCallbacks);

    HRESULT (STDMETHODCALLTYPE *GetReceiveSelectionCallbacks)(
        IWMReaderAdvanced5 *This,
        BOOL *pfGetCallbacks);

    HRESULT (STDMETHODCALLTYPE *SetReceiveStreamSamples)(
        IWMReaderAdvanced5 *This,
        WORD wStreamNum,
        BOOL fReceiveStreamSamples);

    HRESULT (STDMETHODCALLTYPE *GetReceiveStreamSamples)(
        IWMReaderAdvanced5 *This,
        WORD wStreamNum,
        BOOL *pfReceiveStreamSamples);

    HRESULT (STDMETHODCALLTYPE *SetAllocateForOutput)(
        IWMReaderAdvanced5 *This,
        DWORD dwOutputNum,
        BOOL fAllocate);

    HRESULT (STDMETHODCALLTYPE *GetAllocateForOutput)(
        IWMReaderAdvanced5 *This,
        DWORD dwOutputNum,
        BOOL *pfAllocate);

    HRESULT (STDMETHODCALLTYPE *SetAllocateForStream)(
        IWMReaderAdvanced5 *This,
        WORD wStreamNum,
        BOOL fAllocate);

    HRESULT (STDMETHODCALLTYPE *GetAllocateForStream)(
        IWMReaderAdvanced5 *This,
        WORD dwStreamNum,
        BOOL *pfAllocate);

    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
        IWMReaderAdvanced5 *This,
        WM_READER_STATISTICS *pStatistics);

    HRESULT (STDMETHODCALLTYPE *SetClientInfo)(
        IWMReaderAdvanced5 *This,
        WM_READER_CLIENTINFO *pClientInfo);

    HRESULT (STDMETHODCALLTYPE *GetMaxOutputSampleSize)(
        IWMReaderAdvanced5 *This,
        DWORD dwOutput,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *GetMaxStreamSampleSize)(
        IWMReaderAdvanced5 *This,
        WORD wStream,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *NotifyLateDelivery)(
        IWMReaderAdvanced5 *This,
        QWORD cnsLateness);

    /*** IWMReaderAdvanced2 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPlayMode)(
        IWMReaderAdvanced5 *This,
        WMT_PLAY_MODE Mode);

    HRESULT (STDMETHODCALLTYPE *GetPlayMode)(
        IWMReaderAdvanced5 *This,
        WMT_PLAY_MODE *pMode);

    HRESULT (STDMETHODCALLTYPE *GetBufferProgress)(
        IWMReaderAdvanced5 *This,
        DWORD *pdwPercent,
        QWORD *pcnsBuffering);

    HRESULT (STDMETHODCALLTYPE *GetDownloadProgress)(
        IWMReaderAdvanced5 *This,
        DWORD *pdwPercent,
        QWORD *pqwBytesDownloaded,
        QWORD *pcnsDownload);

    HRESULT (STDMETHODCALLTYPE *GetSaveAsProgress)(
        IWMReaderAdvanced5 *This,
        DWORD *pdwPercent);

    HRESULT (STDMETHODCALLTYPE *SaveFileAs)(
        IWMReaderAdvanced5 *This,
        const WCHAR *pwszFilename);

    HRESULT (STDMETHODCALLTYPE *GetProtocolName)(
        IWMReaderAdvanced5 *This,
        WCHAR *pwszProtocol,
        DWORD *pcchProtocol);

    HRESULT (STDMETHODCALLTYPE *StartAtMarker)(
        IWMReaderAdvanced5 *This,
        WORD wMarkerIndex,
        QWORD cnsDuration,
        float fRate,
        void *pvContext);

    HRESULT (STDMETHODCALLTYPE *GetOutputSetting)(
        IWMReaderAdvanced5 *This,
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE *pType,
        BYTE *pValue,
        WORD *pcbLength);

    HRESULT (STDMETHODCALLTYPE *SetOutputSetting)(
        IWMReaderAdvanced5 *This,
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE Type,
        const BYTE *pValue,
        WORD cbLength);

    HRESULT (STDMETHODCALLTYPE *Preroll)(
        IWMReaderAdvanced5 *This,
        QWORD cnsStart,
        QWORD cnsDuration,
        float fRate);

    HRESULT (STDMETHODCALLTYPE *SetLogClientID)(
        IWMReaderAdvanced5 *This,
        BOOL fLogClientID);

    HRESULT (STDMETHODCALLTYPE *GetLogClientID)(
        IWMReaderAdvanced5 *This,
        BOOL *pfLogClientID);

    HRESULT (STDMETHODCALLTYPE *StopBuffering)(
        IWMReaderAdvanced5 *This);

    HRESULT (STDMETHODCALLTYPE *OpenStream)(
        IWMReaderAdvanced5 *This,
        IStream *pStream,
        IWMReaderCallback *pCallback,
        void *pvContext);

    /*** IWMReaderAdvanced3 methods ***/
    HRESULT (STDMETHODCALLTYPE *StopNetStreaming)(
        IWMReaderAdvanced5 *This);

    HRESULT (STDMETHODCALLTYPE *StartAtPosition)(
        IWMReaderAdvanced5 *This,
        WORD wStreamNum,
        void *pvOffsetStart,
        void *pvDuration,
        WMT_OFFSET_FORMAT dwOffsetFormat,
        float fRate,
        void *pvContext);

    /*** IWMReaderAdvanced4 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetLanguageCount)(
        IWMReaderAdvanced5 *This,
        DWORD dwOutputNum,
        WORD *pwLanguageCount);

    HRESULT (STDMETHODCALLTYPE *GetLanguage)(
        IWMReaderAdvanced5 *This,
        DWORD dwOutputNum,
        WORD wLanguage,
        WCHAR *pwszLanguageString,
        WORD *pcchLanguageStringLength);

    HRESULT (STDMETHODCALLTYPE *GetMaxSpeedFactor)(
        IWMReaderAdvanced5 *This,
        double *pdblFactor);

    HRESULT (STDMETHODCALLTYPE *IsUsingFastCache)(
        IWMReaderAdvanced5 *This,
        BOOL *pfUsingFastCache);

    HRESULT (STDMETHODCALLTYPE *AddLogParam)(
        IWMReaderAdvanced5 *This,
        LPCWSTR wszNameSpace,
        LPCWSTR wszName,
        LPCWSTR wszValue);

    HRESULT (STDMETHODCALLTYPE *SendLogParams)(
        IWMReaderAdvanced5 *This);

    HRESULT (STDMETHODCALLTYPE *CanSaveFileAs)(
        IWMReaderAdvanced5 *This,
        BOOL *pfCanSave);

    HRESULT (STDMETHODCALLTYPE *CancelSaveFileAs)(
        IWMReaderAdvanced5 *This);

    HRESULT (STDMETHODCALLTYPE *GetURL)(
        IWMReaderAdvanced5 *This,
        WCHAR *pwszURL,
        DWORD *pcchURL);

    /*** IWMReaderAdvanced5 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPlayerHook)(
        IWMReaderAdvanced5 *This,
        DWORD dwOutputNum,
        IWMPlayerHook *pHook);

    END_INTERFACE
} IWMReaderAdvanced5Vtbl;

interface IWMReaderAdvanced5 {
    CONST_VTBL IWMReaderAdvanced5Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMReaderAdvanced5_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMReaderAdvanced5_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMReaderAdvanced5_Release(This) (This)->lpVtbl->Release(This)
/*** IWMReaderAdvanced methods ***/
#define IWMReaderAdvanced5_SetUserProvidedClock(This,fUserClock) (This)->lpVtbl->SetUserProvidedClock(This,fUserClock)
#define IWMReaderAdvanced5_GetUserProvidedClock(This,pfUserClock) (This)->lpVtbl->GetUserProvidedClock(This,pfUserClock)
#define IWMReaderAdvanced5_DeliverTime(This,cnsTime) (This)->lpVtbl->DeliverTime(This,cnsTime)
#define IWMReaderAdvanced5_SetManualStreamSelection(This,fSelection) (This)->lpVtbl->SetManualStreamSelection(This,fSelection)
#define IWMReaderAdvanced5_GetManualStreamSelection(This,pfSelection) (This)->lpVtbl->GetManualStreamSelection(This,pfSelection)
#define IWMReaderAdvanced5_SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections) (This)->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections)
#define IWMReaderAdvanced5_GetStreamSelected(This,wStreamNum,pSelection) (This)->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection)
#define IWMReaderAdvanced5_SetReceiveSelectionCallbacks(This,fGetCallbacks) (This)->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks)
#define IWMReaderAdvanced5_GetReceiveSelectionCallbacks(This,pfGetCallbacks) (This)->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks)
#define IWMReaderAdvanced5_SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples) (This)->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples)
#define IWMReaderAdvanced5_GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples) (This)->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples)
#define IWMReaderAdvanced5_SetAllocateForOutput(This,dwOutputNum,fAllocate) (This)->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate)
#define IWMReaderAdvanced5_GetAllocateForOutput(This,dwOutputNum,pfAllocate) (This)->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate)
#define IWMReaderAdvanced5_SetAllocateForStream(This,wStreamNum,fAllocate) (This)->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate)
#define IWMReaderAdvanced5_GetAllocateForStream(This,dwStreamNum,pfAllocate) (This)->lpVtbl->GetAllocateForStream(This,dwStreamNum,pfAllocate)
#define IWMReaderAdvanced5_GetStatistics(This,pStatistics) (This)->lpVtbl->GetStatistics(This,pStatistics)
#define IWMReaderAdvanced5_SetClientInfo(This,pClientInfo) (This)->lpVtbl->SetClientInfo(This,pClientInfo)
#define IWMReaderAdvanced5_GetMaxOutputSampleSize(This,dwOutput,pcbMax) (This)->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax)
#define IWMReaderAdvanced5_GetMaxStreamSampleSize(This,wStream,pcbMax) (This)->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax)
#define IWMReaderAdvanced5_NotifyLateDelivery(This,cnsLateness) (This)->lpVtbl->NotifyLateDelivery(This,cnsLateness)
/*** IWMReaderAdvanced2 methods ***/
#define IWMReaderAdvanced5_SetPlayMode(This,Mode) (This)->lpVtbl->SetPlayMode(This,Mode)
#define IWMReaderAdvanced5_GetPlayMode(This,pMode) (This)->lpVtbl->GetPlayMode(This,pMode)
#define IWMReaderAdvanced5_GetBufferProgress(This,pdwPercent,pcnsBuffering) (This)->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering)
#define IWMReaderAdvanced5_GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload) (This)->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload)
#define IWMReaderAdvanced5_GetSaveAsProgress(This,pdwPercent) (This)->lpVtbl->GetSaveAsProgress(This,pdwPercent)
#define IWMReaderAdvanced5_SaveFileAs(This,pwszFilename) (This)->lpVtbl->SaveFileAs(This,pwszFilename)
#define IWMReaderAdvanced5_GetProtocolName(This,pwszProtocol,pcchProtocol) (This)->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol)
#define IWMReaderAdvanced5_StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext) (This)->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext)
#define IWMReaderAdvanced5_GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength) (This)->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength)
#define IWMReaderAdvanced5_SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength) (This)->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength)
#define IWMReaderAdvanced5_Preroll(This,cnsStart,cnsDuration,fRate) (This)->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate)
#define IWMReaderAdvanced5_SetLogClientID(This,fLogClientID) (This)->lpVtbl->SetLogClientID(This,fLogClientID)
#define IWMReaderAdvanced5_GetLogClientID(This,pfLogClientID) (This)->lpVtbl->GetLogClientID(This,pfLogClientID)
#define IWMReaderAdvanced5_StopBuffering(This) (This)->lpVtbl->StopBuffering(This)
#define IWMReaderAdvanced5_OpenStream(This,pStream,pCallback,pvContext) (This)->lpVtbl->OpenStream(This,pStream,pCallback,pvContext)
/*** IWMReaderAdvanced3 methods ***/
#define IWMReaderAdvanced5_StopNetStreaming(This) (This)->lpVtbl->StopNetStreaming(This)
#define IWMReaderAdvanced5_StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext) (This)->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext)
/*** IWMReaderAdvanced4 methods ***/
#define IWMReaderAdvanced5_GetLanguageCount(This,dwOutputNum,pwLanguageCount) (This)->lpVtbl->GetLanguageCount(This,dwOutputNum,pwLanguageCount)
#define IWMReaderAdvanced5_GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength) (This)->lpVtbl->GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength)
#define IWMReaderAdvanced5_GetMaxSpeedFactor(This,pdblFactor) (This)->lpVtbl->GetMaxSpeedFactor(This,pdblFactor)
#define IWMReaderAdvanced5_IsUsingFastCache(This,pfUsingFastCache) (This)->lpVtbl->IsUsingFastCache(This,pfUsingFastCache)
#define IWMReaderAdvanced5_AddLogParam(This,wszNameSpace,wszName,wszValue) (This)->lpVtbl->AddLogParam(This,wszNameSpace,wszName,wszValue)
#define IWMReaderAdvanced5_SendLogParams(This) (This)->lpVtbl->SendLogParams(This)
#define IWMReaderAdvanced5_CanSaveFileAs(This,pfCanSave) (This)->lpVtbl->CanSaveFileAs(This,pfCanSave)
#define IWMReaderAdvanced5_CancelSaveFileAs(This) (This)->lpVtbl->CancelSaveFileAs(This)
#define IWMReaderAdvanced5_GetURL(This,pwszURL,pcchURL) (This)->lpVtbl->GetURL(This,pwszURL,pcchURL)
/*** IWMReaderAdvanced5 methods ***/
#define IWMReaderAdvanced5_SetPlayerHook(This,dwOutputNum,pHook) (This)->lpVtbl->SetPlayerHook(This,dwOutputNum,pHook)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced5_QueryInterface(IWMReaderAdvanced5* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMReaderAdvanced5_AddRef(IWMReaderAdvanced5* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMReaderAdvanced5_Release(IWMReaderAdvanced5* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMReaderAdvanced methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced5_SetUserProvidedClock(IWMReaderAdvanced5* This,BOOL fUserClock) {
    return This->lpVtbl->SetUserProvidedClock(This,fUserClock);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetUserProvidedClock(IWMReaderAdvanced5* This,BOOL *pfUserClock) {
    return This->lpVtbl->GetUserProvidedClock(This,pfUserClock);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_DeliverTime(IWMReaderAdvanced5* This,QWORD cnsTime) {
    return This->lpVtbl->DeliverTime(This,cnsTime);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_SetManualStreamSelection(IWMReaderAdvanced5* This,BOOL fSelection) {
    return This->lpVtbl->SetManualStreamSelection(This,fSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetManualStreamSelection(IWMReaderAdvanced5* This,BOOL *pfSelection) {
    return This->lpVtbl->GetManualStreamSelection(This,pfSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_SetStreamsSelected(IWMReaderAdvanced5* This,WORD cStreamCount,WORD *pwStreamNumbers,WMT_STREAM_SELECTION *pSelections) {
    return This->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetStreamSelected(IWMReaderAdvanced5* This,WORD wStreamNum,WMT_STREAM_SELECTION *pSelection) {
    return This->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_SetReceiveSelectionCallbacks(IWMReaderAdvanced5* This,BOOL fGetCallbacks) {
    return This->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetReceiveSelectionCallbacks(IWMReaderAdvanced5* This,BOOL *pfGetCallbacks) {
    return This->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_SetReceiveStreamSamples(IWMReaderAdvanced5* This,WORD wStreamNum,BOOL fReceiveStreamSamples) {
    return This->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetReceiveStreamSamples(IWMReaderAdvanced5* This,WORD wStreamNum,BOOL *pfReceiveStreamSamples) {
    return This->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_SetAllocateForOutput(IWMReaderAdvanced5* This,DWORD dwOutputNum,BOOL fAllocate) {
    return This->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetAllocateForOutput(IWMReaderAdvanced5* This,DWORD dwOutputNum,BOOL *pfAllocate) {
    return This->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_SetAllocateForStream(IWMReaderAdvanced5* This,WORD wStreamNum,BOOL fAllocate) {
    return This->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetAllocateForStream(IWMReaderAdvanced5* This,WORD dwStreamNum,BOOL *pfAllocate) {
    return This->lpVtbl->GetAllocateForStream(This,dwStreamNum,pfAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetStatistics(IWMReaderAdvanced5* This,WM_READER_STATISTICS *pStatistics) {
    return This->lpVtbl->GetStatistics(This,pStatistics);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_SetClientInfo(IWMReaderAdvanced5* This,WM_READER_CLIENTINFO *pClientInfo) {
    return This->lpVtbl->SetClientInfo(This,pClientInfo);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetMaxOutputSampleSize(IWMReaderAdvanced5* This,DWORD dwOutput,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetMaxStreamSampleSize(IWMReaderAdvanced5* This,WORD wStream,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_NotifyLateDelivery(IWMReaderAdvanced5* This,QWORD cnsLateness) {
    return This->lpVtbl->NotifyLateDelivery(This,cnsLateness);
}
/*** IWMReaderAdvanced2 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced5_SetPlayMode(IWMReaderAdvanced5* This,WMT_PLAY_MODE Mode) {
    return This->lpVtbl->SetPlayMode(This,Mode);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetPlayMode(IWMReaderAdvanced5* This,WMT_PLAY_MODE *pMode) {
    return This->lpVtbl->GetPlayMode(This,pMode);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetBufferProgress(IWMReaderAdvanced5* This,DWORD *pdwPercent,QWORD *pcnsBuffering) {
    return This->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetDownloadProgress(IWMReaderAdvanced5* This,DWORD *pdwPercent,QWORD *pqwBytesDownloaded,QWORD *pcnsDownload) {
    return This->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetSaveAsProgress(IWMReaderAdvanced5* This,DWORD *pdwPercent) {
    return This->lpVtbl->GetSaveAsProgress(This,pdwPercent);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_SaveFileAs(IWMReaderAdvanced5* This,const WCHAR *pwszFilename) {
    return This->lpVtbl->SaveFileAs(This,pwszFilename);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetProtocolName(IWMReaderAdvanced5* This,WCHAR *pwszProtocol,DWORD *pcchProtocol) {
    return This->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_StartAtMarker(IWMReaderAdvanced5* This,WORD wMarkerIndex,QWORD cnsDuration,float fRate,void *pvContext) {
    return This->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetOutputSetting(IWMReaderAdvanced5* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE *pType,BYTE *pValue,WORD *pcbLength) {
    return This->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_SetOutputSetting(IWMReaderAdvanced5* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE Type,const BYTE *pValue,WORD cbLength) {
    return This->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_Preroll(IWMReaderAdvanced5* This,QWORD cnsStart,QWORD cnsDuration,float fRate) {
    return This->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_SetLogClientID(IWMReaderAdvanced5* This,BOOL fLogClientID) {
    return This->lpVtbl->SetLogClientID(This,fLogClientID);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetLogClientID(IWMReaderAdvanced5* This,BOOL *pfLogClientID) {
    return This->lpVtbl->GetLogClientID(This,pfLogClientID);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_StopBuffering(IWMReaderAdvanced5* This) {
    return This->lpVtbl->StopBuffering(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_OpenStream(IWMReaderAdvanced5* This,IStream *pStream,IWMReaderCallback *pCallback,void *pvContext) {
    return This->lpVtbl->OpenStream(This,pStream,pCallback,pvContext);
}
/*** IWMReaderAdvanced3 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced5_StopNetStreaming(IWMReaderAdvanced5* This) {
    return This->lpVtbl->StopNetStreaming(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_StartAtPosition(IWMReaderAdvanced5* This,WORD wStreamNum,void *pvOffsetStart,void *pvDuration,WMT_OFFSET_FORMAT dwOffsetFormat,float fRate,void *pvContext) {
    return This->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext);
}
/*** IWMReaderAdvanced4 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetLanguageCount(IWMReaderAdvanced5* This,DWORD dwOutputNum,WORD *pwLanguageCount) {
    return This->lpVtbl->GetLanguageCount(This,dwOutputNum,pwLanguageCount);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetLanguage(IWMReaderAdvanced5* This,DWORD dwOutputNum,WORD wLanguage,WCHAR *pwszLanguageString,WORD *pcchLanguageStringLength) {
    return This->lpVtbl->GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetMaxSpeedFactor(IWMReaderAdvanced5* This,double *pdblFactor) {
    return This->lpVtbl->GetMaxSpeedFactor(This,pdblFactor);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_IsUsingFastCache(IWMReaderAdvanced5* This,BOOL *pfUsingFastCache) {
    return This->lpVtbl->IsUsingFastCache(This,pfUsingFastCache);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_AddLogParam(IWMReaderAdvanced5* This,LPCWSTR wszNameSpace,LPCWSTR wszName,LPCWSTR wszValue) {
    return This->lpVtbl->AddLogParam(This,wszNameSpace,wszName,wszValue);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_SendLogParams(IWMReaderAdvanced5* This) {
    return This->lpVtbl->SendLogParams(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_CanSaveFileAs(IWMReaderAdvanced5* This,BOOL *pfCanSave) {
    return This->lpVtbl->CanSaveFileAs(This,pfCanSave);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_CancelSaveFileAs(IWMReaderAdvanced5* This) {
    return This->lpVtbl->CancelSaveFileAs(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced5_GetURL(IWMReaderAdvanced5* This,WCHAR *pwszURL,DWORD *pcchURL) {
    return This->lpVtbl->GetURL(This,pwszURL,pcchURL);
}
/*** IWMReaderAdvanced5 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced5_SetPlayerHook(IWMReaderAdvanced5* This,DWORD dwOutputNum,IWMPlayerHook *pHook) {
    return This->lpVtbl->SetPlayerHook(This,dwOutputNum,pHook);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMReaderAdvanced5_SetPlayerHook_Proxy(
    IWMReaderAdvanced5* This,
    DWORD dwOutputNum,
    IWMPlayerHook *pHook);
void __RPC_STUB IWMReaderAdvanced5_SetPlayerHook_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMReaderAdvanced5_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMReaderAdvanced6 interface
 */
#ifndef __IWMReaderAdvanced6_INTERFACE_DEFINED__
#define __IWMReaderAdvanced6_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMReaderAdvanced6, 0x18a2e7f8, 0x428f, 0x4acd, 0x8a,0x00, 0xe6,0x46,0x39,0xbc,0x93,0xde);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("18a2e7f8-428f-4acd-8a00-e64639bc93de")
IWMReaderAdvanced6 : public IWMReaderAdvanced5
{
    virtual HRESULT STDMETHODCALLTYPE SetProtectStreamSamples(
        BYTE *pbCertificate,
        DWORD cbCertificate,
        DWORD dwCertificateType,
        DWORD dwFlags,
        BYTE *pbInitializationVector,
        DWORD *pcbInitializationVector) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMReaderAdvanced6, 0x18a2e7f8, 0x428f, 0x4acd, 0x8a,0x00, 0xe6,0x46,0x39,0xbc,0x93,0xde)
#endif
#else
typedef struct IWMReaderAdvanced6Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMReaderAdvanced6 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMReaderAdvanced6 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMReaderAdvanced6 *This);

    /*** IWMReaderAdvanced methods ***/
    HRESULT (STDMETHODCALLTYPE *SetUserProvidedClock)(
        IWMReaderAdvanced6 *This,
        BOOL fUserClock);

    HRESULT (STDMETHODCALLTYPE *GetUserProvidedClock)(
        IWMReaderAdvanced6 *This,
        BOOL *pfUserClock);

    HRESULT (STDMETHODCALLTYPE *DeliverTime)(
        IWMReaderAdvanced6 *This,
        QWORD cnsTime);

    HRESULT (STDMETHODCALLTYPE *SetManualStreamSelection)(
        IWMReaderAdvanced6 *This,
        BOOL fSelection);

    HRESULT (STDMETHODCALLTYPE *GetManualStreamSelection)(
        IWMReaderAdvanced6 *This,
        BOOL *pfSelection);

    HRESULT (STDMETHODCALLTYPE *SetStreamsSelected)(
        IWMReaderAdvanced6 *This,
        WORD cStreamCount,
        WORD *pwStreamNumbers,
        WMT_STREAM_SELECTION *pSelections);

    HRESULT (STDMETHODCALLTYPE *GetStreamSelected)(
        IWMReaderAdvanced6 *This,
        WORD wStreamNum,
        WMT_STREAM_SELECTION *pSelection);

    HRESULT (STDMETHODCALLTYPE *SetReceiveSelectionCallbacks)(
        IWMReaderAdvanced6 *This,
        BOOL fGetCallbacks);

    HRESULT (STDMETHODCALLTYPE *GetReceiveSelectionCallbacks)(
        IWMReaderAdvanced6 *This,
        BOOL *pfGetCallbacks);

    HRESULT (STDMETHODCALLTYPE *SetReceiveStreamSamples)(
        IWMReaderAdvanced6 *This,
        WORD wStreamNum,
        BOOL fReceiveStreamSamples);

    HRESULT (STDMETHODCALLTYPE *GetReceiveStreamSamples)(
        IWMReaderAdvanced6 *This,
        WORD wStreamNum,
        BOOL *pfReceiveStreamSamples);

    HRESULT (STDMETHODCALLTYPE *SetAllocateForOutput)(
        IWMReaderAdvanced6 *This,
        DWORD dwOutputNum,
        BOOL fAllocate);

    HRESULT (STDMETHODCALLTYPE *GetAllocateForOutput)(
        IWMReaderAdvanced6 *This,
        DWORD dwOutputNum,
        BOOL *pfAllocate);

    HRESULT (STDMETHODCALLTYPE *SetAllocateForStream)(
        IWMReaderAdvanced6 *This,
        WORD wStreamNum,
        BOOL fAllocate);

    HRESULT (STDMETHODCALLTYPE *GetAllocateForStream)(
        IWMReaderAdvanced6 *This,
        WORD dwStreamNum,
        BOOL *pfAllocate);

    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
        IWMReaderAdvanced6 *This,
        WM_READER_STATISTICS *pStatistics);

    HRESULT (STDMETHODCALLTYPE *SetClientInfo)(
        IWMReaderAdvanced6 *This,
        WM_READER_CLIENTINFO *pClientInfo);

    HRESULT (STDMETHODCALLTYPE *GetMaxOutputSampleSize)(
        IWMReaderAdvanced6 *This,
        DWORD dwOutput,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *GetMaxStreamSampleSize)(
        IWMReaderAdvanced6 *This,
        WORD wStream,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *NotifyLateDelivery)(
        IWMReaderAdvanced6 *This,
        QWORD cnsLateness);

    /*** IWMReaderAdvanced2 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPlayMode)(
        IWMReaderAdvanced6 *This,
        WMT_PLAY_MODE Mode);

    HRESULT (STDMETHODCALLTYPE *GetPlayMode)(
        IWMReaderAdvanced6 *This,
        WMT_PLAY_MODE *pMode);

    HRESULT (STDMETHODCALLTYPE *GetBufferProgress)(
        IWMReaderAdvanced6 *This,
        DWORD *pdwPercent,
        QWORD *pcnsBuffering);

    HRESULT (STDMETHODCALLTYPE *GetDownloadProgress)(
        IWMReaderAdvanced6 *This,
        DWORD *pdwPercent,
        QWORD *pqwBytesDownloaded,
        QWORD *pcnsDownload);

    HRESULT (STDMETHODCALLTYPE *GetSaveAsProgress)(
        IWMReaderAdvanced6 *This,
        DWORD *pdwPercent);

    HRESULT (STDMETHODCALLTYPE *SaveFileAs)(
        IWMReaderAdvanced6 *This,
        const WCHAR *pwszFilename);

    HRESULT (STDMETHODCALLTYPE *GetProtocolName)(
        IWMReaderAdvanced6 *This,
        WCHAR *pwszProtocol,
        DWORD *pcchProtocol);

    HRESULT (STDMETHODCALLTYPE *StartAtMarker)(
        IWMReaderAdvanced6 *This,
        WORD wMarkerIndex,
        QWORD cnsDuration,
        float fRate,
        void *pvContext);

    HRESULT (STDMETHODCALLTYPE *GetOutputSetting)(
        IWMReaderAdvanced6 *This,
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE *pType,
        BYTE *pValue,
        WORD *pcbLength);

    HRESULT (STDMETHODCALLTYPE *SetOutputSetting)(
        IWMReaderAdvanced6 *This,
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE Type,
        const BYTE *pValue,
        WORD cbLength);

    HRESULT (STDMETHODCALLTYPE *Preroll)(
        IWMReaderAdvanced6 *This,
        QWORD cnsStart,
        QWORD cnsDuration,
        float fRate);

    HRESULT (STDMETHODCALLTYPE *SetLogClientID)(
        IWMReaderAdvanced6 *This,
        BOOL fLogClientID);

    HRESULT (STDMETHODCALLTYPE *GetLogClientID)(
        IWMReaderAdvanced6 *This,
        BOOL *pfLogClientID);

    HRESULT (STDMETHODCALLTYPE *StopBuffering)(
        IWMReaderAdvanced6 *This);

    HRESULT (STDMETHODCALLTYPE *OpenStream)(
        IWMReaderAdvanced6 *This,
        IStream *pStream,
        IWMReaderCallback *pCallback,
        void *pvContext);

    /*** IWMReaderAdvanced3 methods ***/
    HRESULT (STDMETHODCALLTYPE *StopNetStreaming)(
        IWMReaderAdvanced6 *This);

    HRESULT (STDMETHODCALLTYPE *StartAtPosition)(
        IWMReaderAdvanced6 *This,
        WORD wStreamNum,
        void *pvOffsetStart,
        void *pvDuration,
        WMT_OFFSET_FORMAT dwOffsetFormat,
        float fRate,
        void *pvContext);

    /*** IWMReaderAdvanced4 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetLanguageCount)(
        IWMReaderAdvanced6 *This,
        DWORD dwOutputNum,
        WORD *pwLanguageCount);

    HRESULT (STDMETHODCALLTYPE *GetLanguage)(
        IWMReaderAdvanced6 *This,
        DWORD dwOutputNum,
        WORD wLanguage,
        WCHAR *pwszLanguageString,
        WORD *pcchLanguageStringLength);

    HRESULT (STDMETHODCALLTYPE *GetMaxSpeedFactor)(
        IWMReaderAdvanced6 *This,
        double *pdblFactor);

    HRESULT (STDMETHODCALLTYPE *IsUsingFastCache)(
        IWMReaderAdvanced6 *This,
        BOOL *pfUsingFastCache);

    HRESULT (STDMETHODCALLTYPE *AddLogParam)(
        IWMReaderAdvanced6 *This,
        LPCWSTR wszNameSpace,
        LPCWSTR wszName,
        LPCWSTR wszValue);

    HRESULT (STDMETHODCALLTYPE *SendLogParams)(
        IWMReaderAdvanced6 *This);

    HRESULT (STDMETHODCALLTYPE *CanSaveFileAs)(
        IWMReaderAdvanced6 *This,
        BOOL *pfCanSave);

    HRESULT (STDMETHODCALLTYPE *CancelSaveFileAs)(
        IWMReaderAdvanced6 *This);

    HRESULT (STDMETHODCALLTYPE *GetURL)(
        IWMReaderAdvanced6 *This,
        WCHAR *pwszURL,
        DWORD *pcchURL);

    /*** IWMReaderAdvanced5 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPlayerHook)(
        IWMReaderAdvanced6 *This,
        DWORD dwOutputNum,
        IWMPlayerHook *pHook);

    /*** IWMReaderAdvanced6 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetProtectStreamSamples)(
        IWMReaderAdvanced6 *This,
        BYTE *pbCertificate,
        DWORD cbCertificate,
        DWORD dwCertificateType,
        DWORD dwFlags,
        BYTE *pbInitializationVector,
        DWORD *pcbInitializationVector);

    END_INTERFACE
} IWMReaderAdvanced6Vtbl;

interface IWMReaderAdvanced6 {
    CONST_VTBL IWMReaderAdvanced6Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMReaderAdvanced6_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMReaderAdvanced6_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMReaderAdvanced6_Release(This) (This)->lpVtbl->Release(This)
/*** IWMReaderAdvanced methods ***/
#define IWMReaderAdvanced6_SetUserProvidedClock(This,fUserClock) (This)->lpVtbl->SetUserProvidedClock(This,fUserClock)
#define IWMReaderAdvanced6_GetUserProvidedClock(This,pfUserClock) (This)->lpVtbl->GetUserProvidedClock(This,pfUserClock)
#define IWMReaderAdvanced6_DeliverTime(This,cnsTime) (This)->lpVtbl->DeliverTime(This,cnsTime)
#define IWMReaderAdvanced6_SetManualStreamSelection(This,fSelection) (This)->lpVtbl->SetManualStreamSelection(This,fSelection)
#define IWMReaderAdvanced6_GetManualStreamSelection(This,pfSelection) (This)->lpVtbl->GetManualStreamSelection(This,pfSelection)
#define IWMReaderAdvanced6_SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections) (This)->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections)
#define IWMReaderAdvanced6_GetStreamSelected(This,wStreamNum,pSelection) (This)->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection)
#define IWMReaderAdvanced6_SetReceiveSelectionCallbacks(This,fGetCallbacks) (This)->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks)
#define IWMReaderAdvanced6_GetReceiveSelectionCallbacks(This,pfGetCallbacks) (This)->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks)
#define IWMReaderAdvanced6_SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples) (This)->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples)
#define IWMReaderAdvanced6_GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples) (This)->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples)
#define IWMReaderAdvanced6_SetAllocateForOutput(This,dwOutputNum,fAllocate) (This)->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate)
#define IWMReaderAdvanced6_GetAllocateForOutput(This,dwOutputNum,pfAllocate) (This)->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate)
#define IWMReaderAdvanced6_SetAllocateForStream(This,wStreamNum,fAllocate) (This)->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate)
#define IWMReaderAdvanced6_GetAllocateForStream(This,dwStreamNum,pfAllocate) (This)->lpVtbl->GetAllocateForStream(This,dwStreamNum,pfAllocate)
#define IWMReaderAdvanced6_GetStatistics(This,pStatistics) (This)->lpVtbl->GetStatistics(This,pStatistics)
#define IWMReaderAdvanced6_SetClientInfo(This,pClientInfo) (This)->lpVtbl->SetClientInfo(This,pClientInfo)
#define IWMReaderAdvanced6_GetMaxOutputSampleSize(This,dwOutput,pcbMax) (This)->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax)
#define IWMReaderAdvanced6_GetMaxStreamSampleSize(This,wStream,pcbMax) (This)->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax)
#define IWMReaderAdvanced6_NotifyLateDelivery(This,cnsLateness) (This)->lpVtbl->NotifyLateDelivery(This,cnsLateness)
/*** IWMReaderAdvanced2 methods ***/
#define IWMReaderAdvanced6_SetPlayMode(This,Mode) (This)->lpVtbl->SetPlayMode(This,Mode)
#define IWMReaderAdvanced6_GetPlayMode(This,pMode) (This)->lpVtbl->GetPlayMode(This,pMode)
#define IWMReaderAdvanced6_GetBufferProgress(This,pdwPercent,pcnsBuffering) (This)->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering)
#define IWMReaderAdvanced6_GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload) (This)->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload)
#define IWMReaderAdvanced6_GetSaveAsProgress(This,pdwPercent) (This)->lpVtbl->GetSaveAsProgress(This,pdwPercent)
#define IWMReaderAdvanced6_SaveFileAs(This,pwszFilename) (This)->lpVtbl->SaveFileAs(This,pwszFilename)
#define IWMReaderAdvanced6_GetProtocolName(This,pwszProtocol,pcchProtocol) (This)->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol)
#define IWMReaderAdvanced6_StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext) (This)->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext)
#define IWMReaderAdvanced6_GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength) (This)->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength)
#define IWMReaderAdvanced6_SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength) (This)->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength)
#define IWMReaderAdvanced6_Preroll(This,cnsStart,cnsDuration,fRate) (This)->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate)
#define IWMReaderAdvanced6_SetLogClientID(This,fLogClientID) (This)->lpVtbl->SetLogClientID(This,fLogClientID)
#define IWMReaderAdvanced6_GetLogClientID(This,pfLogClientID) (This)->lpVtbl->GetLogClientID(This,pfLogClientID)
#define IWMReaderAdvanced6_StopBuffering(This) (This)->lpVtbl->StopBuffering(This)
#define IWMReaderAdvanced6_OpenStream(This,pStream,pCallback,pvContext) (This)->lpVtbl->OpenStream(This,pStream,pCallback,pvContext)
/*** IWMReaderAdvanced3 methods ***/
#define IWMReaderAdvanced6_StopNetStreaming(This) (This)->lpVtbl->StopNetStreaming(This)
#define IWMReaderAdvanced6_StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext) (This)->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext)
/*** IWMReaderAdvanced4 methods ***/
#define IWMReaderAdvanced6_GetLanguageCount(This,dwOutputNum,pwLanguageCount) (This)->lpVtbl->GetLanguageCount(This,dwOutputNum,pwLanguageCount)
#define IWMReaderAdvanced6_GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength) (This)->lpVtbl->GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength)
#define IWMReaderAdvanced6_GetMaxSpeedFactor(This,pdblFactor) (This)->lpVtbl->GetMaxSpeedFactor(This,pdblFactor)
#define IWMReaderAdvanced6_IsUsingFastCache(This,pfUsingFastCache) (This)->lpVtbl->IsUsingFastCache(This,pfUsingFastCache)
#define IWMReaderAdvanced6_AddLogParam(This,wszNameSpace,wszName,wszValue) (This)->lpVtbl->AddLogParam(This,wszNameSpace,wszName,wszValue)
#define IWMReaderAdvanced6_SendLogParams(This) (This)->lpVtbl->SendLogParams(This)
#define IWMReaderAdvanced6_CanSaveFileAs(This,pfCanSave) (This)->lpVtbl->CanSaveFileAs(This,pfCanSave)
#define IWMReaderAdvanced6_CancelSaveFileAs(This) (This)->lpVtbl->CancelSaveFileAs(This)
#define IWMReaderAdvanced6_GetURL(This,pwszURL,pcchURL) (This)->lpVtbl->GetURL(This,pwszURL,pcchURL)
/*** IWMReaderAdvanced5 methods ***/
#define IWMReaderAdvanced6_SetPlayerHook(This,dwOutputNum,pHook) (This)->lpVtbl->SetPlayerHook(This,dwOutputNum,pHook)
/*** IWMReaderAdvanced6 methods ***/
#define IWMReaderAdvanced6_SetProtectStreamSamples(This,pbCertificate,cbCertificate,dwCertificateType,dwFlags,pbInitializationVector,pcbInitializationVector) (This)->lpVtbl->SetProtectStreamSamples(This,pbCertificate,cbCertificate,dwCertificateType,dwFlags,pbInitializationVector,pcbInitializationVector)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced6_QueryInterface(IWMReaderAdvanced6* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMReaderAdvanced6_AddRef(IWMReaderAdvanced6* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMReaderAdvanced6_Release(IWMReaderAdvanced6* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMReaderAdvanced methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced6_SetUserProvidedClock(IWMReaderAdvanced6* This,BOOL fUserClock) {
    return This->lpVtbl->SetUserProvidedClock(This,fUserClock);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetUserProvidedClock(IWMReaderAdvanced6* This,BOOL *pfUserClock) {
    return This->lpVtbl->GetUserProvidedClock(This,pfUserClock);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_DeliverTime(IWMReaderAdvanced6* This,QWORD cnsTime) {
    return This->lpVtbl->DeliverTime(This,cnsTime);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_SetManualStreamSelection(IWMReaderAdvanced6* This,BOOL fSelection) {
    return This->lpVtbl->SetManualStreamSelection(This,fSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetManualStreamSelection(IWMReaderAdvanced6* This,BOOL *pfSelection) {
    return This->lpVtbl->GetManualStreamSelection(This,pfSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_SetStreamsSelected(IWMReaderAdvanced6* This,WORD cStreamCount,WORD *pwStreamNumbers,WMT_STREAM_SELECTION *pSelections) {
    return This->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetStreamSelected(IWMReaderAdvanced6* This,WORD wStreamNum,WMT_STREAM_SELECTION *pSelection) {
    return This->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_SetReceiveSelectionCallbacks(IWMReaderAdvanced6* This,BOOL fGetCallbacks) {
    return This->lpVtbl->SetReceiveSelectionCallbacks(This,fGetCallbacks);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetReceiveSelectionCallbacks(IWMReaderAdvanced6* This,BOOL *pfGetCallbacks) {
    return This->lpVtbl->GetReceiveSelectionCallbacks(This,pfGetCallbacks);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_SetReceiveStreamSamples(IWMReaderAdvanced6* This,WORD wStreamNum,BOOL fReceiveStreamSamples) {
    return This->lpVtbl->SetReceiveStreamSamples(This,wStreamNum,fReceiveStreamSamples);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetReceiveStreamSamples(IWMReaderAdvanced6* This,WORD wStreamNum,BOOL *pfReceiveStreamSamples) {
    return This->lpVtbl->GetReceiveStreamSamples(This,wStreamNum,pfReceiveStreamSamples);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_SetAllocateForOutput(IWMReaderAdvanced6* This,DWORD dwOutputNum,BOOL fAllocate) {
    return This->lpVtbl->SetAllocateForOutput(This,dwOutputNum,fAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetAllocateForOutput(IWMReaderAdvanced6* This,DWORD dwOutputNum,BOOL *pfAllocate) {
    return This->lpVtbl->GetAllocateForOutput(This,dwOutputNum,pfAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_SetAllocateForStream(IWMReaderAdvanced6* This,WORD wStreamNum,BOOL fAllocate) {
    return This->lpVtbl->SetAllocateForStream(This,wStreamNum,fAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetAllocateForStream(IWMReaderAdvanced6* This,WORD dwStreamNum,BOOL *pfAllocate) {
    return This->lpVtbl->GetAllocateForStream(This,dwStreamNum,pfAllocate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetStatistics(IWMReaderAdvanced6* This,WM_READER_STATISTICS *pStatistics) {
    return This->lpVtbl->GetStatistics(This,pStatistics);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_SetClientInfo(IWMReaderAdvanced6* This,WM_READER_CLIENTINFO *pClientInfo) {
    return This->lpVtbl->SetClientInfo(This,pClientInfo);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetMaxOutputSampleSize(IWMReaderAdvanced6* This,DWORD dwOutput,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetMaxStreamSampleSize(IWMReaderAdvanced6* This,WORD wStream,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_NotifyLateDelivery(IWMReaderAdvanced6* This,QWORD cnsLateness) {
    return This->lpVtbl->NotifyLateDelivery(This,cnsLateness);
}
/*** IWMReaderAdvanced2 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced6_SetPlayMode(IWMReaderAdvanced6* This,WMT_PLAY_MODE Mode) {
    return This->lpVtbl->SetPlayMode(This,Mode);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetPlayMode(IWMReaderAdvanced6* This,WMT_PLAY_MODE *pMode) {
    return This->lpVtbl->GetPlayMode(This,pMode);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetBufferProgress(IWMReaderAdvanced6* This,DWORD *pdwPercent,QWORD *pcnsBuffering) {
    return This->lpVtbl->GetBufferProgress(This,pdwPercent,pcnsBuffering);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetDownloadProgress(IWMReaderAdvanced6* This,DWORD *pdwPercent,QWORD *pqwBytesDownloaded,QWORD *pcnsDownload) {
    return This->lpVtbl->GetDownloadProgress(This,pdwPercent,pqwBytesDownloaded,pcnsDownload);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetSaveAsProgress(IWMReaderAdvanced6* This,DWORD *pdwPercent) {
    return This->lpVtbl->GetSaveAsProgress(This,pdwPercent);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_SaveFileAs(IWMReaderAdvanced6* This,const WCHAR *pwszFilename) {
    return This->lpVtbl->SaveFileAs(This,pwszFilename);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetProtocolName(IWMReaderAdvanced6* This,WCHAR *pwszProtocol,DWORD *pcchProtocol) {
    return This->lpVtbl->GetProtocolName(This,pwszProtocol,pcchProtocol);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_StartAtMarker(IWMReaderAdvanced6* This,WORD wMarkerIndex,QWORD cnsDuration,float fRate,void *pvContext) {
    return This->lpVtbl->StartAtMarker(This,wMarkerIndex,cnsDuration,fRate,pvContext);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetOutputSetting(IWMReaderAdvanced6* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE *pType,BYTE *pValue,WORD *pcbLength) {
    return This->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_SetOutputSetting(IWMReaderAdvanced6* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE Type,const BYTE *pValue,WORD cbLength) {
    return This->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_Preroll(IWMReaderAdvanced6* This,QWORD cnsStart,QWORD cnsDuration,float fRate) {
    return This->lpVtbl->Preroll(This,cnsStart,cnsDuration,fRate);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_SetLogClientID(IWMReaderAdvanced6* This,BOOL fLogClientID) {
    return This->lpVtbl->SetLogClientID(This,fLogClientID);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetLogClientID(IWMReaderAdvanced6* This,BOOL *pfLogClientID) {
    return This->lpVtbl->GetLogClientID(This,pfLogClientID);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_StopBuffering(IWMReaderAdvanced6* This) {
    return This->lpVtbl->StopBuffering(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_OpenStream(IWMReaderAdvanced6* This,IStream *pStream,IWMReaderCallback *pCallback,void *pvContext) {
    return This->lpVtbl->OpenStream(This,pStream,pCallback,pvContext);
}
/*** IWMReaderAdvanced3 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced6_StopNetStreaming(IWMReaderAdvanced6* This) {
    return This->lpVtbl->StopNetStreaming(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_StartAtPosition(IWMReaderAdvanced6* This,WORD wStreamNum,void *pvOffsetStart,void *pvDuration,WMT_OFFSET_FORMAT dwOffsetFormat,float fRate,void *pvContext) {
    return This->lpVtbl->StartAtPosition(This,wStreamNum,pvOffsetStart,pvDuration,dwOffsetFormat,fRate,pvContext);
}
/*** IWMReaderAdvanced4 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetLanguageCount(IWMReaderAdvanced6* This,DWORD dwOutputNum,WORD *pwLanguageCount) {
    return This->lpVtbl->GetLanguageCount(This,dwOutputNum,pwLanguageCount);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetLanguage(IWMReaderAdvanced6* This,DWORD dwOutputNum,WORD wLanguage,WCHAR *pwszLanguageString,WORD *pcchLanguageStringLength) {
    return This->lpVtbl->GetLanguage(This,dwOutputNum,wLanguage,pwszLanguageString,pcchLanguageStringLength);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetMaxSpeedFactor(IWMReaderAdvanced6* This,double *pdblFactor) {
    return This->lpVtbl->GetMaxSpeedFactor(This,pdblFactor);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_IsUsingFastCache(IWMReaderAdvanced6* This,BOOL *pfUsingFastCache) {
    return This->lpVtbl->IsUsingFastCache(This,pfUsingFastCache);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_AddLogParam(IWMReaderAdvanced6* This,LPCWSTR wszNameSpace,LPCWSTR wszName,LPCWSTR wszValue) {
    return This->lpVtbl->AddLogParam(This,wszNameSpace,wszName,wszValue);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_SendLogParams(IWMReaderAdvanced6* This) {
    return This->lpVtbl->SendLogParams(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_CanSaveFileAs(IWMReaderAdvanced6* This,BOOL *pfCanSave) {
    return This->lpVtbl->CanSaveFileAs(This,pfCanSave);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_CancelSaveFileAs(IWMReaderAdvanced6* This) {
    return This->lpVtbl->CancelSaveFileAs(This);
}
static FORCEINLINE HRESULT IWMReaderAdvanced6_GetURL(IWMReaderAdvanced6* This,WCHAR *pwszURL,DWORD *pcchURL) {
    return This->lpVtbl->GetURL(This,pwszURL,pcchURL);
}
/*** IWMReaderAdvanced5 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced6_SetPlayerHook(IWMReaderAdvanced6* This,DWORD dwOutputNum,IWMPlayerHook *pHook) {
    return This->lpVtbl->SetPlayerHook(This,dwOutputNum,pHook);
}
/*** IWMReaderAdvanced6 methods ***/
static FORCEINLINE HRESULT IWMReaderAdvanced6_SetProtectStreamSamples(IWMReaderAdvanced6* This,BYTE *pbCertificate,DWORD cbCertificate,DWORD dwCertificateType,DWORD dwFlags,BYTE *pbInitializationVector,DWORD *pcbInitializationVector) {
    return This->lpVtbl->SetProtectStreamSamples(This,pbCertificate,cbCertificate,dwCertificateType,dwFlags,pbInitializationVector,pcbInitializationVector);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMReaderAdvanced6_SetProtectStreamSamples_Proxy(
    IWMReaderAdvanced6* This,
    BYTE *pbCertificate,
    DWORD cbCertificate,
    DWORD dwCertificateType,
    DWORD dwFlags,
    BYTE *pbInitializationVector,
    DWORD *pcbInitializationVector);
void __RPC_STUB IWMReaderAdvanced6_SetProtectStreamSamples_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMReaderAdvanced6_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMSyncReader interface
 */
#ifndef __IWMSyncReader_INTERFACE_DEFINED__
#define __IWMSyncReader_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMSyncReader, 0x9397f121, 0x7705, 0x4dc9, 0xb0,0x49, 0x98,0xb6,0x98,0x18,0x84,0x14);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9397f121-7705-4dc9-b049-98b698188414")
IWMSyncReader : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Open(
        const WCHAR *pwszFilename) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRange(
        QWORD cnsStartTime,
        LONGLONG cnsDuration) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRangeByFrame(
        WORD wStreamNum,
        QWORD qwFrameNumber,
        LONGLONG cFramesToRead) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNextSample(
        WORD wStreamNum,
        INSSBuffer **ppSample,
        QWORD *pcnsSampleTime,
        QWORD *pcnsDuration,
        DWORD *pdwFlags,
        DWORD *pdwOutputNum,
        WORD *pwStreamNum) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStreamsSelected(
        WORD cStreamCount,
        WORD *pwStreamNumbers,
        WMT_STREAM_SELECTION *pSelections) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamSelected(
        WORD wStreamNum,
        WMT_STREAM_SELECTION *pSelection) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetReadStreamSamples(
        WORD wStreamNum,
        BOOL fCompressed) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetReadStreamSamples(
        WORD wStreamNum,
        BOOL *pfCompressed) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputSetting(
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE *pType,
        BYTE *pValue,
        WORD *pcbLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputSetting(
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE Type,
        const BYTE *pValue,
        WORD cbLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputCount(
        DWORD *pcOutputs) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputProps(
        DWORD dwOutputNum,
        IWMOutputMediaProps **ppOutput) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputProps(
        DWORD dwOutputNum,
        IWMOutputMediaProps *pOutput) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputFormatCount(
        DWORD dwOutputNum,
        DWORD *pcFormats) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputFormat(
        DWORD dwOutputNum,
        DWORD dwFormatNum,
        IWMOutputMediaProps **ppProps) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputNumberForStream(
        WORD wStreamNum,
        DWORD *pdwOutputNum) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStreamNumberForOutput(
        DWORD dwOutputNum,
        WORD *pwStreamNum) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMaxOutputSampleSize(
        DWORD dwOutput,
        DWORD *pcbMax) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMaxStreamSampleSize(
        WORD wStream,
        DWORD *pcbMax) = 0;

    virtual HRESULT STDMETHODCALLTYPE OpenStream(
        IStream *pStream) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMSyncReader, 0x9397f121, 0x7705, 0x4dc9, 0xb0,0x49, 0x98,0xb6,0x98,0x18,0x84,0x14)
#endif
#else
typedef struct IWMSyncReaderVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMSyncReader *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMSyncReader *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMSyncReader *This);

    /*** IWMSyncReader methods ***/
    HRESULT (STDMETHODCALLTYPE *Open)(
        IWMSyncReader *This,
        const WCHAR *pwszFilename);

    HRESULT (STDMETHODCALLTYPE *Close)(
        IWMSyncReader *This);

    HRESULT (STDMETHODCALLTYPE *SetRange)(
        IWMSyncReader *This,
        QWORD cnsStartTime,
        LONGLONG cnsDuration);

    HRESULT (STDMETHODCALLTYPE *SetRangeByFrame)(
        IWMSyncReader *This,
        WORD wStreamNum,
        QWORD qwFrameNumber,
        LONGLONG cFramesToRead);

    HRESULT (STDMETHODCALLTYPE *GetNextSample)(
        IWMSyncReader *This,
        WORD wStreamNum,
        INSSBuffer **ppSample,
        QWORD *pcnsSampleTime,
        QWORD *pcnsDuration,
        DWORD *pdwFlags,
        DWORD *pdwOutputNum,
        WORD *pwStreamNum);

    HRESULT (STDMETHODCALLTYPE *SetStreamsSelected)(
        IWMSyncReader *This,
        WORD cStreamCount,
        WORD *pwStreamNumbers,
        WMT_STREAM_SELECTION *pSelections);

    HRESULT (STDMETHODCALLTYPE *GetStreamSelected)(
        IWMSyncReader *This,
        WORD wStreamNum,
        WMT_STREAM_SELECTION *pSelection);

    HRESULT (STDMETHODCALLTYPE *SetReadStreamSamples)(
        IWMSyncReader *This,
        WORD wStreamNum,
        BOOL fCompressed);

    HRESULT (STDMETHODCALLTYPE *GetReadStreamSamples)(
        IWMSyncReader *This,
        WORD wStreamNum,
        BOOL *pfCompressed);

    HRESULT (STDMETHODCALLTYPE *GetOutputSetting)(
        IWMSyncReader *This,
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE *pType,
        BYTE *pValue,
        WORD *pcbLength);

    HRESULT (STDMETHODCALLTYPE *SetOutputSetting)(
        IWMSyncReader *This,
        DWORD dwOutputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE Type,
        const BYTE *pValue,
        WORD cbLength);

    HRESULT (STDMETHODCALLTYPE *GetOutputCount)(
        IWMSyncReader *This,
        DWORD *pcOutputs);

    HRESULT (STDMETHODCALLTYPE *GetOutputProps)(
        IWMSyncReader *This,
        DWORD dwOutputNum,
        IWMOutputMediaProps **ppOutput);

    HRESULT (STDMETHODCALLTYPE *SetOutputProps)(
        IWMSyncReader *This,
        DWORD dwOutputNum,
        IWMOutputMediaProps *pOutput);

    HRESULT (STDMETHODCALLTYPE *GetOutputFormatCount)(
        IWMSyncReader *This,
        DWORD dwOutputNum,
        DWORD *pcFormats);

    HRESULT (STDMETHODCALLTYPE *GetOutputFormat)(
        IWMSyncReader *This,
        DWORD dwOutputNum,
        DWORD dwFormatNum,
        IWMOutputMediaProps **ppProps);

    HRESULT (STDMETHODCALLTYPE *GetOutputNumberForStream)(
        IWMSyncReader *This,
        WORD wStreamNum,
        DWORD *pdwOutputNum);

    HRESULT (STDMETHODCALLTYPE *GetStreamNumberForOutput)(
        IWMSyncReader *This,
        DWORD dwOutputNum,
        WORD *pwStreamNum);

    HRESULT (STDMETHODCALLTYPE *GetMaxOutputSampleSize)(
        IWMSyncReader *This,
        DWORD dwOutput,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *GetMaxStreamSampleSize)(
        IWMSyncReader *This,
        WORD wStream,
        DWORD *pcbMax);

    HRESULT (STDMETHODCALLTYPE *OpenStream)(
        IWMSyncReader *This,
        IStream *pStream);

    END_INTERFACE
} IWMSyncReaderVtbl;

interface IWMSyncReader {
    CONST_VTBL IWMSyncReaderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMSyncReader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMSyncReader_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMSyncReader_Release(This) (This)->lpVtbl->Release(This)
/*** IWMSyncReader methods ***/
#define IWMSyncReader_Open(This,pwszFilename) (This)->lpVtbl->Open(This,pwszFilename)
#define IWMSyncReader_Close(This) (This)->lpVtbl->Close(This)
#define IWMSyncReader_SetRange(This,cnsStartTime,cnsDuration) (This)->lpVtbl->SetRange(This,cnsStartTime,cnsDuration)
#define IWMSyncReader_SetRangeByFrame(This,wStreamNum,qwFrameNumber,cFramesToRead) (This)->lpVtbl->SetRangeByFrame(This,wStreamNum,qwFrameNumber,cFramesToRead)
#define IWMSyncReader_GetNextSample(This,wStreamNum,ppSample,pcnsSampleTime,pcnsDuration,pdwFlags,pdwOutputNum,pwStreamNum) (This)->lpVtbl->GetNextSample(This,wStreamNum,ppSample,pcnsSampleTime,pcnsDuration,pdwFlags,pdwOutputNum,pwStreamNum)
#define IWMSyncReader_SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections) (This)->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections)
#define IWMSyncReader_GetStreamSelected(This,wStreamNum,pSelection) (This)->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection)
#define IWMSyncReader_SetReadStreamSamples(This,wStreamNum,fCompressed) (This)->lpVtbl->SetReadStreamSamples(This,wStreamNum,fCompressed)
#define IWMSyncReader_GetReadStreamSamples(This,wStreamNum,pfCompressed) (This)->lpVtbl->GetReadStreamSamples(This,wStreamNum,pfCompressed)
#define IWMSyncReader_GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength) (This)->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength)
#define IWMSyncReader_SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength) (This)->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength)
#define IWMSyncReader_GetOutputCount(This,pcOutputs) (This)->lpVtbl->GetOutputCount(This,pcOutputs)
#define IWMSyncReader_GetOutputProps(This,dwOutputNum,ppOutput) (This)->lpVtbl->GetOutputProps(This,dwOutputNum,ppOutput)
#define IWMSyncReader_SetOutputProps(This,dwOutputNum,pOutput) (This)->lpVtbl->SetOutputProps(This,dwOutputNum,pOutput)
#define IWMSyncReader_GetOutputFormatCount(This,dwOutputNum,pcFormats) (This)->lpVtbl->GetOutputFormatCount(This,dwOutputNum,pcFormats)
#define IWMSyncReader_GetOutputFormat(This,dwOutputNum,dwFormatNum,ppProps) (This)->lpVtbl->GetOutputFormat(This,dwOutputNum,dwFormatNum,ppProps)
#define IWMSyncReader_GetOutputNumberForStream(This,wStreamNum,pdwOutputNum) (This)->lpVtbl->GetOutputNumberForStream(This,wStreamNum,pdwOutputNum)
#define IWMSyncReader_GetStreamNumberForOutput(This,dwOutputNum,pwStreamNum) (This)->lpVtbl->GetStreamNumberForOutput(This,dwOutputNum,pwStreamNum)
#define IWMSyncReader_GetMaxOutputSampleSize(This,dwOutput,pcbMax) (This)->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax)
#define IWMSyncReader_GetMaxStreamSampleSize(This,wStream,pcbMax) (This)->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax)
#define IWMSyncReader_OpenStream(This,pStream) (This)->lpVtbl->OpenStream(This,pStream)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMSyncReader_QueryInterface(IWMSyncReader* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMSyncReader_AddRef(IWMSyncReader* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMSyncReader_Release(IWMSyncReader* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMSyncReader methods ***/
static FORCEINLINE HRESULT IWMSyncReader_Open(IWMSyncReader* This,const WCHAR *pwszFilename) {
    return This->lpVtbl->Open(This,pwszFilename);
}
static FORCEINLINE HRESULT IWMSyncReader_Close(IWMSyncReader* This) {
    return This->lpVtbl->Close(This);
}
static FORCEINLINE HRESULT IWMSyncReader_SetRange(IWMSyncReader* This,QWORD cnsStartTime,LONGLONG cnsDuration) {
    return This->lpVtbl->SetRange(This,cnsStartTime,cnsDuration);
}
static FORCEINLINE HRESULT IWMSyncReader_SetRangeByFrame(IWMSyncReader* This,WORD wStreamNum,QWORD qwFrameNumber,LONGLONG cFramesToRead) {
    return This->lpVtbl->SetRangeByFrame(This,wStreamNum,qwFrameNumber,cFramesToRead);
}
static FORCEINLINE HRESULT IWMSyncReader_GetNextSample(IWMSyncReader* This,WORD wStreamNum,INSSBuffer **ppSample,QWORD *pcnsSampleTime,QWORD *pcnsDuration,DWORD *pdwFlags,DWORD *pdwOutputNum,WORD *pwStreamNum) {
    return This->lpVtbl->GetNextSample(This,wStreamNum,ppSample,pcnsSampleTime,pcnsDuration,pdwFlags,pdwOutputNum,pwStreamNum);
}
static FORCEINLINE HRESULT IWMSyncReader_SetStreamsSelected(IWMSyncReader* This,WORD cStreamCount,WORD *pwStreamNumbers,WMT_STREAM_SELECTION *pSelections) {
    return This->lpVtbl->SetStreamsSelected(This,cStreamCount,pwStreamNumbers,pSelections);
}
static FORCEINLINE HRESULT IWMSyncReader_GetStreamSelected(IWMSyncReader* This,WORD wStreamNum,WMT_STREAM_SELECTION *pSelection) {
    return This->lpVtbl->GetStreamSelected(This,wStreamNum,pSelection);
}
static FORCEINLINE HRESULT IWMSyncReader_SetReadStreamSamples(IWMSyncReader* This,WORD wStreamNum,BOOL fCompressed) {
    return This->lpVtbl->SetReadStreamSamples(This,wStreamNum,fCompressed);
}
static FORCEINLINE HRESULT IWMSyncReader_GetReadStreamSamples(IWMSyncReader* This,WORD wStreamNum,BOOL *pfCompressed) {
    return This->lpVtbl->GetReadStreamSamples(This,wStreamNum,pfCompressed);
}
static FORCEINLINE HRESULT IWMSyncReader_GetOutputSetting(IWMSyncReader* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE *pType,BYTE *pValue,WORD *pcbLength) {
    return This->lpVtbl->GetOutputSetting(This,dwOutputNum,pszName,pType,pValue,pcbLength);
}
static FORCEINLINE HRESULT IWMSyncReader_SetOutputSetting(IWMSyncReader* This,DWORD dwOutputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE Type,const BYTE *pValue,WORD cbLength) {
    return This->lpVtbl->SetOutputSetting(This,dwOutputNum,pszName,Type,pValue,cbLength);
}
static FORCEINLINE HRESULT IWMSyncReader_GetOutputCount(IWMSyncReader* This,DWORD *pcOutputs) {
    return This->lpVtbl->GetOutputCount(This,pcOutputs);
}
static FORCEINLINE HRESULT IWMSyncReader_GetOutputProps(IWMSyncReader* This,DWORD dwOutputNum,IWMOutputMediaProps **ppOutput) {
    return This->lpVtbl->GetOutputProps(This,dwOutputNum,ppOutput);
}
static FORCEINLINE HRESULT IWMSyncReader_SetOutputProps(IWMSyncReader* This,DWORD dwOutputNum,IWMOutputMediaProps *pOutput) {
    return This->lpVtbl->SetOutputProps(This,dwOutputNum,pOutput);
}
static FORCEINLINE HRESULT IWMSyncReader_GetOutputFormatCount(IWMSyncReader* This,DWORD dwOutputNum,DWORD *pcFormats) {
    return This->lpVtbl->GetOutputFormatCount(This,dwOutputNum,pcFormats);
}
static FORCEINLINE HRESULT IWMSyncReader_GetOutputFormat(IWMSyncReader* This,DWORD dwOutputNum,DWORD dwFormatNum,IWMOutputMediaProps **ppProps) {
    return This->lpVtbl->GetOutputFormat(This,dwOutputNum,dwFormatNum,ppProps);
}
static FORCEINLINE HRESULT IWMSyncReader_GetOutputNumberForStream(IWMSyncReader* This,WORD wStreamNum,DWORD *pdwOutputNum) {
    return This->lpVtbl->GetOutputNumberForStream(This,wStreamNum,pdwOutputNum);
}
static FORCEINLINE HRESULT IWMSyncReader_GetStreamNumberForOutput(IWMSyncReader* This,DWORD dwOutputNum,WORD *pwStreamNum) {
    return This->lpVtbl->GetStreamNumberForOutput(This,dwOutputNum,pwStreamNum);
}
static FORCEINLINE HRESULT IWMSyncReader_GetMaxOutputSampleSize(IWMSyncReader* This,DWORD dwOutput,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxOutputSampleSize(This,dwOutput,pcbMax);
}
static FORCEINLINE HRESULT IWMSyncReader_GetMaxStreamSampleSize(IWMSyncReader* This,WORD wStream,DWORD *pcbMax) {
    return This->lpVtbl->GetMaxStreamSampleSize(This,wStream,pcbMax);
}
static FORCEINLINE HRESULT IWMSyncReader_OpenStream(IWMSyncReader* This,IStream *pStream) {
    return This->lpVtbl->OpenStream(This,pStream);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMSyncReader_Open_Proxy(
    IWMSyncReader* This,
    const WCHAR *pwszFilename);
void __RPC_STUB IWMSyncReader_Open_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_Close_Proxy(
    IWMSyncReader* This);
void __RPC_STUB IWMSyncReader_Close_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_SetRange_Proxy(
    IWMSyncReader* This,
    QWORD cnsStartTime,
    LONGLONG cnsDuration);
void __RPC_STUB IWMSyncReader_SetRange_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_SetRangeByFrame_Proxy(
    IWMSyncReader* This,
    WORD wStreamNum,
    QWORD qwFrameNumber,
    LONGLONG cFramesToRead);
void __RPC_STUB IWMSyncReader_SetRangeByFrame_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_GetNextSample_Proxy(
    IWMSyncReader* This,
    WORD wStreamNum,
    INSSBuffer **ppSample,
    QWORD *pcnsSampleTime,
    QWORD *pcnsDuration,
    DWORD *pdwFlags,
    DWORD *pdwOutputNum,
    WORD *pwStreamNum);
void __RPC_STUB IWMSyncReader_GetNextSample_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_SetStreamsSelected_Proxy(
    IWMSyncReader* This,
    WORD cStreamCount,
    WORD *pwStreamNumbers,
    WMT_STREAM_SELECTION *pSelections);
void __RPC_STUB IWMSyncReader_SetStreamsSelected_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_GetStreamSelected_Proxy(
    IWMSyncReader* This,
    WORD wStreamNum,
    WMT_STREAM_SELECTION *pSelection);
void __RPC_STUB IWMSyncReader_GetStreamSelected_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_SetReadStreamSamples_Proxy(
    IWMSyncReader* This,
    WORD wStreamNum,
    BOOL fCompressed);
void __RPC_STUB IWMSyncReader_SetReadStreamSamples_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_GetReadStreamSamples_Proxy(
    IWMSyncReader* This,
    WORD wStreamNum,
    BOOL *pfCompressed);
void __RPC_STUB IWMSyncReader_GetReadStreamSamples_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_GetOutputSetting_Proxy(
    IWMSyncReader* This,
    DWORD dwOutputNum,
    LPCWSTR pszName,
    WMT_ATTR_DATATYPE *pType,
    BYTE *pValue,
    WORD *pcbLength);
void __RPC_STUB IWMSyncReader_GetOutputSetting_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_SetOutputSetting_Proxy(
    IWMSyncReader* This,
    DWORD dwOutputNum,
    LPCWSTR pszName,
    WMT_ATTR_DATATYPE Type,
    const BYTE *pValue,
    WORD cbLength);
void __RPC_STUB IWMSyncReader_SetOutputSetting_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_GetOutputCount_Proxy(
    IWMSyncReader* This,
    DWORD *pcOutputs);
void __RPC_STUB IWMSyncReader_GetOutputCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_GetOutputProps_Proxy(
    IWMSyncReader* This,
    DWORD dwOutputNum,
    IWMOutputMediaProps **ppOutput);
void __RPC_STUB IWMSyncReader_GetOutputProps_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_SetOutputProps_Proxy(
    IWMSyncReader* This,
    DWORD dwOutputNum,
    IWMOutputMediaProps *pOutput);
void __RPC_STUB IWMSyncReader_SetOutputProps_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_GetOutputFormatCount_Proxy(
    IWMSyncReader* This,
    DWORD dwOutputNum,
    DWORD *pcFormats);
void __RPC_STUB IWMSyncReader_GetOutputFormatCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_GetOutputFormat_Proxy(
    IWMSyncReader* This,
    DWORD dwOutputNum,
    DWORD dwFormatNum,
    IWMOutputMediaProps **ppProps);
void __RPC_STUB IWMSyncReader_GetOutputFormat_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_GetOutputNumberForStream_Proxy(
    IWMSyncReader* This,
    WORD wStreamNum,
    DWORD *pdwOutputNum);
void __RPC_STUB IWMSyncReader_GetOutputNumberForStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_GetStreamNumberForOutput_Proxy(
    IWMSyncReader* This,
    DWORD dwOutputNum,
    WORD *pwStreamNum);
void __RPC_STUB IWMSyncReader_GetStreamNumberForOutput_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_GetMaxOutputSampleSize_Proxy(
    IWMSyncReader* This,
    DWORD dwOutput,
    DWORD *pcbMax);
void __RPC_STUB IWMSyncReader_GetMaxOutputSampleSize_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_GetMaxStreamSampleSize_Proxy(
    IWMSyncReader* This,
    WORD wStream,
    DWORD *pcbMax);
void __RPC_STUB IWMSyncReader_GetMaxStreamSampleSize_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMSyncReader_OpenStream_Proxy(
    IWMSyncReader* This,
    IStream *pStream);
void __RPC_STUB IWMSyncReader_OpenStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMSyncReader_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMInputMediaProps interface
 */
#ifndef __IWMInputMediaProps_INTERFACE_DEFINED__
#define __IWMInputMediaProps_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMInputMediaProps, 0x96406bd5, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406bd5-2b2b-11d3-b36b-00c04f6108ff")
IWMInputMediaProps : public IWMMediaProps
{
    virtual HRESULT STDMETHODCALLTYPE GetConnectionName(
        WCHAR *pwszName,
        WORD *pcchName) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetGroupName(
        WCHAR *pwszName,
        WORD *pcchName) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMInputMediaProps, 0x96406bd5, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMInputMediaPropsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMInputMediaProps *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMInputMediaProps *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMInputMediaProps *This);

    /*** IWMMediaProps methods ***/
    HRESULT (STDMETHODCALLTYPE *GetType)(
        IWMInputMediaProps *This,
        GUID *pguidType);

    HRESULT (STDMETHODCALLTYPE *GetMediaType)(
        IWMInputMediaProps *This,
        WM_MEDIA_TYPE *pType,
        DWORD *pcbType);

    HRESULT (STDMETHODCALLTYPE *SetMediaType)(
        IWMInputMediaProps *This,
        WM_MEDIA_TYPE *pType);

    /*** IWMInputMediaProps methods ***/
    HRESULT (STDMETHODCALLTYPE *GetConnectionName)(
        IWMInputMediaProps *This,
        WCHAR *pwszName,
        WORD *pcchName);

    HRESULT (STDMETHODCALLTYPE *GetGroupName)(
        IWMInputMediaProps *This,
        WCHAR *pwszName,
        WORD *pcchName);

    END_INTERFACE
} IWMInputMediaPropsVtbl;

interface IWMInputMediaProps {
    CONST_VTBL IWMInputMediaPropsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMInputMediaProps_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMInputMediaProps_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMInputMediaProps_Release(This) (This)->lpVtbl->Release(This)
/*** IWMMediaProps methods ***/
#define IWMInputMediaProps_GetType(This,pguidType) (This)->lpVtbl->GetType(This,pguidType)
#define IWMInputMediaProps_GetMediaType(This,pType,pcbType) (This)->lpVtbl->GetMediaType(This,pType,pcbType)
#define IWMInputMediaProps_SetMediaType(This,pType) (This)->lpVtbl->SetMediaType(This,pType)
/*** IWMInputMediaProps methods ***/
#define IWMInputMediaProps_GetConnectionName(This,pwszName,pcchName) (This)->lpVtbl->GetConnectionName(This,pwszName,pcchName)
#define IWMInputMediaProps_GetGroupName(This,pwszName,pcchName) (This)->lpVtbl->GetGroupName(This,pwszName,pcchName)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMInputMediaProps_QueryInterface(IWMInputMediaProps* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMInputMediaProps_AddRef(IWMInputMediaProps* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMInputMediaProps_Release(IWMInputMediaProps* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMMediaProps methods ***/
static FORCEINLINE HRESULT IWMInputMediaProps_GetType(IWMInputMediaProps* This,GUID *pguidType) {
    return This->lpVtbl->GetType(This,pguidType);
}
static FORCEINLINE HRESULT IWMInputMediaProps_GetMediaType(IWMInputMediaProps* This,WM_MEDIA_TYPE *pType,DWORD *pcbType) {
    return This->lpVtbl->GetMediaType(This,pType,pcbType);
}
static FORCEINLINE HRESULT IWMInputMediaProps_SetMediaType(IWMInputMediaProps* This,WM_MEDIA_TYPE *pType) {
    return This->lpVtbl->SetMediaType(This,pType);
}
/*** IWMInputMediaProps methods ***/
static FORCEINLINE HRESULT IWMInputMediaProps_GetConnectionName(IWMInputMediaProps* This,WCHAR *pwszName,WORD *pcchName) {
    return This->lpVtbl->GetConnectionName(This,pwszName,pcchName);
}
static FORCEINLINE HRESULT IWMInputMediaProps_GetGroupName(IWMInputMediaProps* This,WCHAR *pwszName,WORD *pcchName) {
    return This->lpVtbl->GetGroupName(This,pwszName,pcchName);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMInputMediaProps_GetConnectionName_Proxy(
    IWMInputMediaProps* This,
    WCHAR *pwszName,
    WORD *pcchName);
void __RPC_STUB IWMInputMediaProps_GetConnectionName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMInputMediaProps_GetGroupName_Proxy(
    IWMInputMediaProps* This,
    WCHAR *pwszName,
    WORD *pcchName);
void __RPC_STUB IWMInputMediaProps_GetGroupName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMInputMediaProps_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMWriterSink interface
 */
#ifndef __IWMWriterSink_INTERFACE_DEFINED__
#define __IWMWriterSink_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMWriterSink, 0x96406be4, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406be4-2b2b-11d3-b36b-00c04f6108ff")
IWMWriterSink : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE OnHeader(
        INSSBuffer *pHeader) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsRealTime(
        BOOL *pfRealTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE AllocateDataUnit(
        DWORD cbDataUnit,
        INSSBuffer **ppDataUnit) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnDataUnit(
        INSSBuffer *pDataUnit) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnEndWriting(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMWriterSink, 0x96406be4, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMWriterSinkVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMWriterSink *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMWriterSink *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMWriterSink *This);

    /*** IWMWriterSink methods ***/
    HRESULT (STDMETHODCALLTYPE *OnHeader)(
        IWMWriterSink *This,
        INSSBuffer *pHeader);

    HRESULT (STDMETHODCALLTYPE *IsRealTime)(
        IWMWriterSink *This,
        BOOL *pfRealTime);

    HRESULT (STDMETHODCALLTYPE *AllocateDataUnit)(
        IWMWriterSink *This,
        DWORD cbDataUnit,
        INSSBuffer **ppDataUnit);

    HRESULT (STDMETHODCALLTYPE *OnDataUnit)(
        IWMWriterSink *This,
        INSSBuffer *pDataUnit);

    HRESULT (STDMETHODCALLTYPE *OnEndWriting)(
        IWMWriterSink *This);

    END_INTERFACE
} IWMWriterSinkVtbl;

interface IWMWriterSink {
    CONST_VTBL IWMWriterSinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMWriterSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMWriterSink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMWriterSink_Release(This) (This)->lpVtbl->Release(This)
/*** IWMWriterSink methods ***/
#define IWMWriterSink_OnHeader(This,pHeader) (This)->lpVtbl->OnHeader(This,pHeader)
#define IWMWriterSink_IsRealTime(This,pfRealTime) (This)->lpVtbl->IsRealTime(This,pfRealTime)
#define IWMWriterSink_AllocateDataUnit(This,cbDataUnit,ppDataUnit) (This)->lpVtbl->AllocateDataUnit(This,cbDataUnit,ppDataUnit)
#define IWMWriterSink_OnDataUnit(This,pDataUnit) (This)->lpVtbl->OnDataUnit(This,pDataUnit)
#define IWMWriterSink_OnEndWriting(This) (This)->lpVtbl->OnEndWriting(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMWriterSink_QueryInterface(IWMWriterSink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMWriterSink_AddRef(IWMWriterSink* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMWriterSink_Release(IWMWriterSink* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMWriterSink methods ***/
static FORCEINLINE HRESULT IWMWriterSink_OnHeader(IWMWriterSink* This,INSSBuffer *pHeader) {
    return This->lpVtbl->OnHeader(This,pHeader);
}
static FORCEINLINE HRESULT IWMWriterSink_IsRealTime(IWMWriterSink* This,BOOL *pfRealTime) {
    return This->lpVtbl->IsRealTime(This,pfRealTime);
}
static FORCEINLINE HRESULT IWMWriterSink_AllocateDataUnit(IWMWriterSink* This,DWORD cbDataUnit,INSSBuffer **ppDataUnit) {
    return This->lpVtbl->AllocateDataUnit(This,cbDataUnit,ppDataUnit);
}
static FORCEINLINE HRESULT IWMWriterSink_OnDataUnit(IWMWriterSink* This,INSSBuffer *pDataUnit) {
    return This->lpVtbl->OnDataUnit(This,pDataUnit);
}
static FORCEINLINE HRESULT IWMWriterSink_OnEndWriting(IWMWriterSink* This) {
    return This->lpVtbl->OnEndWriting(This);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMWriterSink_OnHeader_Proxy(
    IWMWriterSink* This,
    INSSBuffer *pHeader);
void __RPC_STUB IWMWriterSink_OnHeader_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterSink_IsRealTime_Proxy(
    IWMWriterSink* This,
    BOOL *pfRealTime);
void __RPC_STUB IWMWriterSink_IsRealTime_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterSink_AllocateDataUnit_Proxy(
    IWMWriterSink* This,
    DWORD cbDataUnit,
    INSSBuffer **ppDataUnit);
void __RPC_STUB IWMWriterSink_AllocateDataUnit_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterSink_OnDataUnit_Proxy(
    IWMWriterSink* This,
    INSSBuffer *pDataUnit);
void __RPC_STUB IWMWriterSink_OnDataUnit_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterSink_OnEndWriting_Proxy(
    IWMWriterSink* This);
void __RPC_STUB IWMWriterSink_OnEndWriting_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMWriterSink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMWriter interface
 */
#ifndef __IWMWriter_INTERFACE_DEFINED__
#define __IWMWriter_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMWriter, 0x96406bd4, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406bd4-2b2b-11d3-b36b-00c04f6108ff")
IWMWriter : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetProfileByID(
        REFGUID guidProfile) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetProfile(
        IWMProfile *pProfile) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputFilename(
        const WCHAR *pwszFilename) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputCount(
        DWORD *pcInputs) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputProps(
        DWORD dwInputNum,
        IWMInputMediaProps **ppInput) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetInputProps(
        DWORD dwInputNum,
        IWMInputMediaProps *pInput) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputFormatCount(
        DWORD dwInputNumber,
        DWORD *pcFormats) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputFormat(
        DWORD dwInputNumber,
        DWORD dwFormatNumber,
        IWMInputMediaProps **pProps) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginWriting(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndWriting(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE AllocateSample(
        DWORD dwSampleSize,
        INSSBuffer **ppSample) = 0;

    virtual HRESULT STDMETHODCALLTYPE WriteSample(
        DWORD dwInputNum,
        QWORD cnsSampleTime,
        DWORD dwFlags,
        INSSBuffer *pSample) = 0;

    virtual HRESULT STDMETHODCALLTYPE Flush(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMWriter, 0x96406bd4, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMWriterVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMWriter *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMWriter *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMWriter *This);

    /*** IWMWriter methods ***/
    HRESULT (STDMETHODCALLTYPE *SetProfileByID)(
        IWMWriter *This,
        REFGUID guidProfile);

    HRESULT (STDMETHODCALLTYPE *SetProfile)(
        IWMWriter *This,
        IWMProfile *pProfile);

    HRESULT (STDMETHODCALLTYPE *SetOutputFilename)(
        IWMWriter *This,
        const WCHAR *pwszFilename);

    HRESULT (STDMETHODCALLTYPE *GetInputCount)(
        IWMWriter *This,
        DWORD *pcInputs);

    HRESULT (STDMETHODCALLTYPE *GetInputProps)(
        IWMWriter *This,
        DWORD dwInputNum,
        IWMInputMediaProps **ppInput);

    HRESULT (STDMETHODCALLTYPE *SetInputProps)(
        IWMWriter *This,
        DWORD dwInputNum,
        IWMInputMediaProps *pInput);

    HRESULT (STDMETHODCALLTYPE *GetInputFormatCount)(
        IWMWriter *This,
        DWORD dwInputNumber,
        DWORD *pcFormats);

    HRESULT (STDMETHODCALLTYPE *GetInputFormat)(
        IWMWriter *This,
        DWORD dwInputNumber,
        DWORD dwFormatNumber,
        IWMInputMediaProps **pProps);

    HRESULT (STDMETHODCALLTYPE *BeginWriting)(
        IWMWriter *This);

    HRESULT (STDMETHODCALLTYPE *EndWriting)(
        IWMWriter *This);

    HRESULT (STDMETHODCALLTYPE *AllocateSample)(
        IWMWriter *This,
        DWORD dwSampleSize,
        INSSBuffer **ppSample);

    HRESULT (STDMETHODCALLTYPE *WriteSample)(
        IWMWriter *This,
        DWORD dwInputNum,
        QWORD cnsSampleTime,
        DWORD dwFlags,
        INSSBuffer *pSample);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        IWMWriter *This);

    END_INTERFACE
} IWMWriterVtbl;

interface IWMWriter {
    CONST_VTBL IWMWriterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMWriter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMWriter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMWriter_Release(This) (This)->lpVtbl->Release(This)
/*** IWMWriter methods ***/
#define IWMWriter_SetProfileByID(This,guidProfile) (This)->lpVtbl->SetProfileByID(This,guidProfile)
#define IWMWriter_SetProfile(This,pProfile) (This)->lpVtbl->SetProfile(This,pProfile)
#define IWMWriter_SetOutputFilename(This,pwszFilename) (This)->lpVtbl->SetOutputFilename(This,pwszFilename)
#define IWMWriter_GetInputCount(This,pcInputs) (This)->lpVtbl->GetInputCount(This,pcInputs)
#define IWMWriter_GetInputProps(This,dwInputNum,ppInput) (This)->lpVtbl->GetInputProps(This,dwInputNum,ppInput)
#define IWMWriter_SetInputProps(This,dwInputNum,pInput) (This)->lpVtbl->SetInputProps(This,dwInputNum,pInput)
#define IWMWriter_GetInputFormatCount(This,dwInputNumber,pcFormats) (This)->lpVtbl->GetInputFormatCount(This,dwInputNumber,pcFormats)
#define IWMWriter_GetInputFormat(This,dwInputNumber,dwFormatNumber,pProps) (This)->lpVtbl->GetInputFormat(This,dwInputNumber,dwFormatNumber,pProps)
#define IWMWriter_BeginWriting(This) (This)->lpVtbl->BeginWriting(This)
#define IWMWriter_EndWriting(This) (This)->lpVtbl->EndWriting(This)
#define IWMWriter_AllocateSample(This,dwSampleSize,ppSample) (This)->lpVtbl->AllocateSample(This,dwSampleSize,ppSample)
#define IWMWriter_WriteSample(This,dwInputNum,cnsSampleTime,dwFlags,pSample) (This)->lpVtbl->WriteSample(This,dwInputNum,cnsSampleTime,dwFlags,pSample)
#define IWMWriter_Flush(This) (This)->lpVtbl->Flush(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMWriter_QueryInterface(IWMWriter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMWriter_AddRef(IWMWriter* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMWriter_Release(IWMWriter* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMWriter methods ***/
static FORCEINLINE HRESULT IWMWriter_SetProfileByID(IWMWriter* This,REFGUID guidProfile) {
    return This->lpVtbl->SetProfileByID(This,guidProfile);
}
static FORCEINLINE HRESULT IWMWriter_SetProfile(IWMWriter* This,IWMProfile *pProfile) {
    return This->lpVtbl->SetProfile(This,pProfile);
}
static FORCEINLINE HRESULT IWMWriter_SetOutputFilename(IWMWriter* This,const WCHAR *pwszFilename) {
    return This->lpVtbl->SetOutputFilename(This,pwszFilename);
}
static FORCEINLINE HRESULT IWMWriter_GetInputCount(IWMWriter* This,DWORD *pcInputs) {
    return This->lpVtbl->GetInputCount(This,pcInputs);
}
static FORCEINLINE HRESULT IWMWriter_GetInputProps(IWMWriter* This,DWORD dwInputNum,IWMInputMediaProps **ppInput) {
    return This->lpVtbl->GetInputProps(This,dwInputNum,ppInput);
}
static FORCEINLINE HRESULT IWMWriter_SetInputProps(IWMWriter* This,DWORD dwInputNum,IWMInputMediaProps *pInput) {
    return This->lpVtbl->SetInputProps(This,dwInputNum,pInput);
}
static FORCEINLINE HRESULT IWMWriter_GetInputFormatCount(IWMWriter* This,DWORD dwInputNumber,DWORD *pcFormats) {
    return This->lpVtbl->GetInputFormatCount(This,dwInputNumber,pcFormats);
}
static FORCEINLINE HRESULT IWMWriter_GetInputFormat(IWMWriter* This,DWORD dwInputNumber,DWORD dwFormatNumber,IWMInputMediaProps **pProps) {
    return This->lpVtbl->GetInputFormat(This,dwInputNumber,dwFormatNumber,pProps);
}
static FORCEINLINE HRESULT IWMWriter_BeginWriting(IWMWriter* This) {
    return This->lpVtbl->BeginWriting(This);
}
static FORCEINLINE HRESULT IWMWriter_EndWriting(IWMWriter* This) {
    return This->lpVtbl->EndWriting(This);
}
static FORCEINLINE HRESULT IWMWriter_AllocateSample(IWMWriter* This,DWORD dwSampleSize,INSSBuffer **ppSample) {
    return This->lpVtbl->AllocateSample(This,dwSampleSize,ppSample);
}
static FORCEINLINE HRESULT IWMWriter_WriteSample(IWMWriter* This,DWORD dwInputNum,QWORD cnsSampleTime,DWORD dwFlags,INSSBuffer *pSample) {
    return This->lpVtbl->WriteSample(This,dwInputNum,cnsSampleTime,dwFlags,pSample);
}
static FORCEINLINE HRESULT IWMWriter_Flush(IWMWriter* This) {
    return This->lpVtbl->Flush(This);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMWriter_SetProfileByID_Proxy(
    IWMWriter* This,
    REFGUID guidProfile);
void __RPC_STUB IWMWriter_SetProfileByID_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriter_SetProfile_Proxy(
    IWMWriter* This,
    IWMProfile *pProfile);
void __RPC_STUB IWMWriter_SetProfile_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriter_SetOutputFilename_Proxy(
    IWMWriter* This,
    const WCHAR *pwszFilename);
void __RPC_STUB IWMWriter_SetOutputFilename_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriter_GetInputCount_Proxy(
    IWMWriter* This,
    DWORD *pcInputs);
void __RPC_STUB IWMWriter_GetInputCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriter_GetInputProps_Proxy(
    IWMWriter* This,
    DWORD dwInputNum,
    IWMInputMediaProps **ppInput);
void __RPC_STUB IWMWriter_GetInputProps_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriter_SetInputProps_Proxy(
    IWMWriter* This,
    DWORD dwInputNum,
    IWMInputMediaProps *pInput);
void __RPC_STUB IWMWriter_SetInputProps_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriter_GetInputFormatCount_Proxy(
    IWMWriter* This,
    DWORD dwInputNumber,
    DWORD *pcFormats);
void __RPC_STUB IWMWriter_GetInputFormatCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriter_GetInputFormat_Proxy(
    IWMWriter* This,
    DWORD dwInputNumber,
    DWORD dwFormatNumber,
    IWMInputMediaProps **pProps);
void __RPC_STUB IWMWriter_GetInputFormat_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriter_BeginWriting_Proxy(
    IWMWriter* This);
void __RPC_STUB IWMWriter_BeginWriting_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriter_EndWriting_Proxy(
    IWMWriter* This);
void __RPC_STUB IWMWriter_EndWriting_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriter_AllocateSample_Proxy(
    IWMWriter* This,
    DWORD dwSampleSize,
    INSSBuffer **ppSample);
void __RPC_STUB IWMWriter_AllocateSample_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriter_WriteSample_Proxy(
    IWMWriter* This,
    DWORD dwInputNum,
    QWORD cnsSampleTime,
    DWORD dwFlags,
    INSSBuffer *pSample);
void __RPC_STUB IWMWriter_WriteSample_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriter_Flush_Proxy(
    IWMWriter* This);
void __RPC_STUB IWMWriter_Flush_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMWriter_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMWriterAdvanced interface
 */
#ifndef __IWMWriterAdvanced_INTERFACE_DEFINED__
#define __IWMWriterAdvanced_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMWriterAdvanced, 0x96406be3, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406be3-2b2b-11d3-b36b-00c04f6108ff")
IWMWriterAdvanced : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetSinkCount(
        DWORD *pcSinks) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSink(
        DWORD dwSinkNum,
        IWMWriterSink **ppSink) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddSink(
        IWMWriterSink *pSink) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveSink(
        IWMWriterSink *pSink) = 0;

    virtual HRESULT STDMETHODCALLTYPE WriteStreamSample(
        WORD wStreamNum,
        QWORD cnsSampleTime,
        DWORD msSampleSendTime,
        QWORD cnsSampleDuration,
        DWORD dwFlags,
        INSSBuffer *pSample) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetLiveSource(
        BOOL fIsLiveSource) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsRealTime(
        BOOL *pfRealTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetWriterTime(
        QWORD *pCurrentTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStatistics(
        WORD wStreamNum,
        WM_WRITER_STATISTICS *pStats) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSyncTolerance(
        DWORD msWindow) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSyncTolerance(
        DWORD *pmsWindow) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMWriterAdvanced, 0x96406be3, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMWriterAdvancedVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMWriterAdvanced *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMWriterAdvanced *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMWriterAdvanced *This);

    /*** IWMWriterAdvanced methods ***/
    HRESULT (STDMETHODCALLTYPE *GetSinkCount)(
        IWMWriterAdvanced *This,
        DWORD *pcSinks);

    HRESULT (STDMETHODCALLTYPE *GetSink)(
        IWMWriterAdvanced *This,
        DWORD dwSinkNum,
        IWMWriterSink **ppSink);

    HRESULT (STDMETHODCALLTYPE *AddSink)(
        IWMWriterAdvanced *This,
        IWMWriterSink *pSink);

    HRESULT (STDMETHODCALLTYPE *RemoveSink)(
        IWMWriterAdvanced *This,
        IWMWriterSink *pSink);

    HRESULT (STDMETHODCALLTYPE *WriteStreamSample)(
        IWMWriterAdvanced *This,
        WORD wStreamNum,
        QWORD cnsSampleTime,
        DWORD msSampleSendTime,
        QWORD cnsSampleDuration,
        DWORD dwFlags,
        INSSBuffer *pSample);

    HRESULT (STDMETHODCALLTYPE *SetLiveSource)(
        IWMWriterAdvanced *This,
        BOOL fIsLiveSource);

    HRESULT (STDMETHODCALLTYPE *IsRealTime)(
        IWMWriterAdvanced *This,
        BOOL *pfRealTime);

    HRESULT (STDMETHODCALLTYPE *GetWriterTime)(
        IWMWriterAdvanced *This,
        QWORD *pCurrentTime);

    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
        IWMWriterAdvanced *This,
        WORD wStreamNum,
        WM_WRITER_STATISTICS *pStats);

    HRESULT (STDMETHODCALLTYPE *SetSyncTolerance)(
        IWMWriterAdvanced *This,
        DWORD msWindow);

    HRESULT (STDMETHODCALLTYPE *GetSyncTolerance)(
        IWMWriterAdvanced *This,
        DWORD *pmsWindow);

    END_INTERFACE
} IWMWriterAdvancedVtbl;

interface IWMWriterAdvanced {
    CONST_VTBL IWMWriterAdvancedVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMWriterAdvanced_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMWriterAdvanced_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMWriterAdvanced_Release(This) (This)->lpVtbl->Release(This)
/*** IWMWriterAdvanced methods ***/
#define IWMWriterAdvanced_GetSinkCount(This,pcSinks) (This)->lpVtbl->GetSinkCount(This,pcSinks)
#define IWMWriterAdvanced_GetSink(This,dwSinkNum,ppSink) (This)->lpVtbl->GetSink(This,dwSinkNum,ppSink)
#define IWMWriterAdvanced_AddSink(This,pSink) (This)->lpVtbl->AddSink(This,pSink)
#define IWMWriterAdvanced_RemoveSink(This,pSink) (This)->lpVtbl->RemoveSink(This,pSink)
#define IWMWriterAdvanced_WriteStreamSample(This,wStreamNum,cnsSampleTime,msSampleSendTime,cnsSampleDuration,dwFlags,pSample) (This)->lpVtbl->WriteStreamSample(This,wStreamNum,cnsSampleTime,msSampleSendTime,cnsSampleDuration,dwFlags,pSample)
#define IWMWriterAdvanced_SetLiveSource(This,fIsLiveSource) (This)->lpVtbl->SetLiveSource(This,fIsLiveSource)
#define IWMWriterAdvanced_IsRealTime(This,pfRealTime) (This)->lpVtbl->IsRealTime(This,pfRealTime)
#define IWMWriterAdvanced_GetWriterTime(This,pCurrentTime) (This)->lpVtbl->GetWriterTime(This,pCurrentTime)
#define IWMWriterAdvanced_GetStatistics(This,wStreamNum,pStats) (This)->lpVtbl->GetStatistics(This,wStreamNum,pStats)
#define IWMWriterAdvanced_SetSyncTolerance(This,msWindow) (This)->lpVtbl->SetSyncTolerance(This,msWindow)
#define IWMWriterAdvanced_GetSyncTolerance(This,pmsWindow) (This)->lpVtbl->GetSyncTolerance(This,pmsWindow)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMWriterAdvanced_QueryInterface(IWMWriterAdvanced* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMWriterAdvanced_AddRef(IWMWriterAdvanced* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMWriterAdvanced_Release(IWMWriterAdvanced* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMWriterAdvanced methods ***/
static FORCEINLINE HRESULT IWMWriterAdvanced_GetSinkCount(IWMWriterAdvanced* This,DWORD *pcSinks) {
    return This->lpVtbl->GetSinkCount(This,pcSinks);
}
static FORCEINLINE HRESULT IWMWriterAdvanced_GetSink(IWMWriterAdvanced* This,DWORD dwSinkNum,IWMWriterSink **ppSink) {
    return This->lpVtbl->GetSink(This,dwSinkNum,ppSink);
}
static FORCEINLINE HRESULT IWMWriterAdvanced_AddSink(IWMWriterAdvanced* This,IWMWriterSink *pSink) {
    return This->lpVtbl->AddSink(This,pSink);
}
static FORCEINLINE HRESULT IWMWriterAdvanced_RemoveSink(IWMWriterAdvanced* This,IWMWriterSink *pSink) {
    return This->lpVtbl->RemoveSink(This,pSink);
}
static FORCEINLINE HRESULT IWMWriterAdvanced_WriteStreamSample(IWMWriterAdvanced* This,WORD wStreamNum,QWORD cnsSampleTime,DWORD msSampleSendTime,QWORD cnsSampleDuration,DWORD dwFlags,INSSBuffer *pSample) {
    return This->lpVtbl->WriteStreamSample(This,wStreamNum,cnsSampleTime,msSampleSendTime,cnsSampleDuration,dwFlags,pSample);
}
static FORCEINLINE HRESULT IWMWriterAdvanced_SetLiveSource(IWMWriterAdvanced* This,BOOL fIsLiveSource) {
    return This->lpVtbl->SetLiveSource(This,fIsLiveSource);
}
static FORCEINLINE HRESULT IWMWriterAdvanced_IsRealTime(IWMWriterAdvanced* This,BOOL *pfRealTime) {
    return This->lpVtbl->IsRealTime(This,pfRealTime);
}
static FORCEINLINE HRESULT IWMWriterAdvanced_GetWriterTime(IWMWriterAdvanced* This,QWORD *pCurrentTime) {
    return This->lpVtbl->GetWriterTime(This,pCurrentTime);
}
static FORCEINLINE HRESULT IWMWriterAdvanced_GetStatistics(IWMWriterAdvanced* This,WORD wStreamNum,WM_WRITER_STATISTICS *pStats) {
    return This->lpVtbl->GetStatistics(This,wStreamNum,pStats);
}
static FORCEINLINE HRESULT IWMWriterAdvanced_SetSyncTolerance(IWMWriterAdvanced* This,DWORD msWindow) {
    return This->lpVtbl->SetSyncTolerance(This,msWindow);
}
static FORCEINLINE HRESULT IWMWriterAdvanced_GetSyncTolerance(IWMWriterAdvanced* This,DWORD *pmsWindow) {
    return This->lpVtbl->GetSyncTolerance(This,pmsWindow);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMWriterAdvanced_GetSinkCount_Proxy(
    IWMWriterAdvanced* This,
    DWORD *pcSinks);
void __RPC_STUB IWMWriterAdvanced_GetSinkCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterAdvanced_GetSink_Proxy(
    IWMWriterAdvanced* This,
    DWORD dwSinkNum,
    IWMWriterSink **ppSink);
void __RPC_STUB IWMWriterAdvanced_GetSink_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterAdvanced_AddSink_Proxy(
    IWMWriterAdvanced* This,
    IWMWriterSink *pSink);
void __RPC_STUB IWMWriterAdvanced_AddSink_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterAdvanced_RemoveSink_Proxy(
    IWMWriterAdvanced* This,
    IWMWriterSink *pSink);
void __RPC_STUB IWMWriterAdvanced_RemoveSink_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterAdvanced_WriteStreamSample_Proxy(
    IWMWriterAdvanced* This,
    WORD wStreamNum,
    QWORD cnsSampleTime,
    DWORD msSampleSendTime,
    QWORD cnsSampleDuration,
    DWORD dwFlags,
    INSSBuffer *pSample);
void __RPC_STUB IWMWriterAdvanced_WriteStreamSample_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterAdvanced_SetLiveSource_Proxy(
    IWMWriterAdvanced* This,
    BOOL fIsLiveSource);
void __RPC_STUB IWMWriterAdvanced_SetLiveSource_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterAdvanced_IsRealTime_Proxy(
    IWMWriterAdvanced* This,
    BOOL *pfRealTime);
void __RPC_STUB IWMWriterAdvanced_IsRealTime_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterAdvanced_GetWriterTime_Proxy(
    IWMWriterAdvanced* This,
    QWORD *pCurrentTime);
void __RPC_STUB IWMWriterAdvanced_GetWriterTime_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterAdvanced_GetStatistics_Proxy(
    IWMWriterAdvanced* This,
    WORD wStreamNum,
    WM_WRITER_STATISTICS *pStats);
void __RPC_STUB IWMWriterAdvanced_GetStatistics_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterAdvanced_SetSyncTolerance_Proxy(
    IWMWriterAdvanced* This,
    DWORD msWindow);
void __RPC_STUB IWMWriterAdvanced_SetSyncTolerance_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterAdvanced_GetSyncTolerance_Proxy(
    IWMWriterAdvanced* This,
    DWORD *pmsWindow);
void __RPC_STUB IWMWriterAdvanced_GetSyncTolerance_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMWriterAdvanced_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMWriterAdvanced2 interface
 */
#ifndef __IWMWriterAdvanced2_INTERFACE_DEFINED__
#define __IWMWriterAdvanced2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMWriterAdvanced2, 0x962dc1ec, 0xc046, 0x4db8, 0x9c,0xc7, 0x26,0xce,0xae,0x50,0x08,0x17);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("962dc1ec-c046-4db8-9cc7-26ceae500817")
IWMWriterAdvanced2 : public IWMWriterAdvanced
{
    virtual HRESULT STDMETHODCALLTYPE GetInputSetting(
        DWORD dwInputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE *pType,
        BYTE *pValue,
        WORD *pcbLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetInputSetting(
        DWORD dwInputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE Type,
        const BYTE *pValue,
        WORD cbLength) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMWriterAdvanced2, 0x962dc1ec, 0xc046, 0x4db8, 0x9c,0xc7, 0x26,0xce,0xae,0x50,0x08,0x17)
#endif
#else
typedef struct IWMWriterAdvanced2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMWriterAdvanced2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMWriterAdvanced2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMWriterAdvanced2 *This);

    /*** IWMWriterAdvanced methods ***/
    HRESULT (STDMETHODCALLTYPE *GetSinkCount)(
        IWMWriterAdvanced2 *This,
        DWORD *pcSinks);

    HRESULT (STDMETHODCALLTYPE *GetSink)(
        IWMWriterAdvanced2 *This,
        DWORD dwSinkNum,
        IWMWriterSink **ppSink);

    HRESULT (STDMETHODCALLTYPE *AddSink)(
        IWMWriterAdvanced2 *This,
        IWMWriterSink *pSink);

    HRESULT (STDMETHODCALLTYPE *RemoveSink)(
        IWMWriterAdvanced2 *This,
        IWMWriterSink *pSink);

    HRESULT (STDMETHODCALLTYPE *WriteStreamSample)(
        IWMWriterAdvanced2 *This,
        WORD wStreamNum,
        QWORD cnsSampleTime,
        DWORD msSampleSendTime,
        QWORD cnsSampleDuration,
        DWORD dwFlags,
        INSSBuffer *pSample);

    HRESULT (STDMETHODCALLTYPE *SetLiveSource)(
        IWMWriterAdvanced2 *This,
        BOOL fIsLiveSource);

    HRESULT (STDMETHODCALLTYPE *IsRealTime)(
        IWMWriterAdvanced2 *This,
        BOOL *pfRealTime);

    HRESULT (STDMETHODCALLTYPE *GetWriterTime)(
        IWMWriterAdvanced2 *This,
        QWORD *pCurrentTime);

    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
        IWMWriterAdvanced2 *This,
        WORD wStreamNum,
        WM_WRITER_STATISTICS *pStats);

    HRESULT (STDMETHODCALLTYPE *SetSyncTolerance)(
        IWMWriterAdvanced2 *This,
        DWORD msWindow);

    HRESULT (STDMETHODCALLTYPE *GetSyncTolerance)(
        IWMWriterAdvanced2 *This,
        DWORD *pmsWindow);

    /*** IWMWriterAdvanced2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetInputSetting)(
        IWMWriterAdvanced2 *This,
        DWORD dwInputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE *pType,
        BYTE *pValue,
        WORD *pcbLength);

    HRESULT (STDMETHODCALLTYPE *SetInputSetting)(
        IWMWriterAdvanced2 *This,
        DWORD dwInputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE Type,
        const BYTE *pValue,
        WORD cbLength);

    END_INTERFACE
} IWMWriterAdvanced2Vtbl;

interface IWMWriterAdvanced2 {
    CONST_VTBL IWMWriterAdvanced2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMWriterAdvanced2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMWriterAdvanced2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMWriterAdvanced2_Release(This) (This)->lpVtbl->Release(This)
/*** IWMWriterAdvanced methods ***/
#define IWMWriterAdvanced2_GetSinkCount(This,pcSinks) (This)->lpVtbl->GetSinkCount(This,pcSinks)
#define IWMWriterAdvanced2_GetSink(This,dwSinkNum,ppSink) (This)->lpVtbl->GetSink(This,dwSinkNum,ppSink)
#define IWMWriterAdvanced2_AddSink(This,pSink) (This)->lpVtbl->AddSink(This,pSink)
#define IWMWriterAdvanced2_RemoveSink(This,pSink) (This)->lpVtbl->RemoveSink(This,pSink)
#define IWMWriterAdvanced2_WriteStreamSample(This,wStreamNum,cnsSampleTime,msSampleSendTime,cnsSampleDuration,dwFlags,pSample) (This)->lpVtbl->WriteStreamSample(This,wStreamNum,cnsSampleTime,msSampleSendTime,cnsSampleDuration,dwFlags,pSample)
#define IWMWriterAdvanced2_SetLiveSource(This,fIsLiveSource) (This)->lpVtbl->SetLiveSource(This,fIsLiveSource)
#define IWMWriterAdvanced2_IsRealTime(This,pfRealTime) (This)->lpVtbl->IsRealTime(This,pfRealTime)
#define IWMWriterAdvanced2_GetWriterTime(This,pCurrentTime) (This)->lpVtbl->GetWriterTime(This,pCurrentTime)
#define IWMWriterAdvanced2_GetStatistics(This,wStreamNum,pStats) (This)->lpVtbl->GetStatistics(This,wStreamNum,pStats)
#define IWMWriterAdvanced2_SetSyncTolerance(This,msWindow) (This)->lpVtbl->SetSyncTolerance(This,msWindow)
#define IWMWriterAdvanced2_GetSyncTolerance(This,pmsWindow) (This)->lpVtbl->GetSyncTolerance(This,pmsWindow)
/*** IWMWriterAdvanced2 methods ***/
#define IWMWriterAdvanced2_GetInputSetting(This,dwInputNum,pszName,pType,pValue,pcbLength) (This)->lpVtbl->GetInputSetting(This,dwInputNum,pszName,pType,pValue,pcbLength)
#define IWMWriterAdvanced2_SetInputSetting(This,dwInputNum,pszName,Type,pValue,cbLength) (This)->lpVtbl->SetInputSetting(This,dwInputNum,pszName,Type,pValue,cbLength)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMWriterAdvanced2_QueryInterface(IWMWriterAdvanced2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMWriterAdvanced2_AddRef(IWMWriterAdvanced2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMWriterAdvanced2_Release(IWMWriterAdvanced2* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMWriterAdvanced methods ***/
static FORCEINLINE HRESULT IWMWriterAdvanced2_GetSinkCount(IWMWriterAdvanced2* This,DWORD *pcSinks) {
    return This->lpVtbl->GetSinkCount(This,pcSinks);
}
static FORCEINLINE HRESULT IWMWriterAdvanced2_GetSink(IWMWriterAdvanced2* This,DWORD dwSinkNum,IWMWriterSink **ppSink) {
    return This->lpVtbl->GetSink(This,dwSinkNum,ppSink);
}
static FORCEINLINE HRESULT IWMWriterAdvanced2_AddSink(IWMWriterAdvanced2* This,IWMWriterSink *pSink) {
    return This->lpVtbl->AddSink(This,pSink);
}
static FORCEINLINE HRESULT IWMWriterAdvanced2_RemoveSink(IWMWriterAdvanced2* This,IWMWriterSink *pSink) {
    return This->lpVtbl->RemoveSink(This,pSink);
}
static FORCEINLINE HRESULT IWMWriterAdvanced2_WriteStreamSample(IWMWriterAdvanced2* This,WORD wStreamNum,QWORD cnsSampleTime,DWORD msSampleSendTime,QWORD cnsSampleDuration,DWORD dwFlags,INSSBuffer *pSample) {
    return This->lpVtbl->WriteStreamSample(This,wStreamNum,cnsSampleTime,msSampleSendTime,cnsSampleDuration,dwFlags,pSample);
}
static FORCEINLINE HRESULT IWMWriterAdvanced2_SetLiveSource(IWMWriterAdvanced2* This,BOOL fIsLiveSource) {
    return This->lpVtbl->SetLiveSource(This,fIsLiveSource);
}
static FORCEINLINE HRESULT IWMWriterAdvanced2_IsRealTime(IWMWriterAdvanced2* This,BOOL *pfRealTime) {
    return This->lpVtbl->IsRealTime(This,pfRealTime);
}
static FORCEINLINE HRESULT IWMWriterAdvanced2_GetWriterTime(IWMWriterAdvanced2* This,QWORD *pCurrentTime) {
    return This->lpVtbl->GetWriterTime(This,pCurrentTime);
}
static FORCEINLINE HRESULT IWMWriterAdvanced2_GetStatistics(IWMWriterAdvanced2* This,WORD wStreamNum,WM_WRITER_STATISTICS *pStats) {
    return This->lpVtbl->GetStatistics(This,wStreamNum,pStats);
}
static FORCEINLINE HRESULT IWMWriterAdvanced2_SetSyncTolerance(IWMWriterAdvanced2* This,DWORD msWindow) {
    return This->lpVtbl->SetSyncTolerance(This,msWindow);
}
static FORCEINLINE HRESULT IWMWriterAdvanced2_GetSyncTolerance(IWMWriterAdvanced2* This,DWORD *pmsWindow) {
    return This->lpVtbl->GetSyncTolerance(This,pmsWindow);
}
/*** IWMWriterAdvanced2 methods ***/
static FORCEINLINE HRESULT IWMWriterAdvanced2_GetInputSetting(IWMWriterAdvanced2* This,DWORD dwInputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE *pType,BYTE *pValue,WORD *pcbLength) {
    return This->lpVtbl->GetInputSetting(This,dwInputNum,pszName,pType,pValue,pcbLength);
}
static FORCEINLINE HRESULT IWMWriterAdvanced2_SetInputSetting(IWMWriterAdvanced2* This,DWORD dwInputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE Type,const BYTE *pValue,WORD cbLength) {
    return This->lpVtbl->SetInputSetting(This,dwInputNum,pszName,Type,pValue,cbLength);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMWriterAdvanced2_GetInputSetting_Proxy(
    IWMWriterAdvanced2* This,
    DWORD dwInputNum,
    LPCWSTR pszName,
    WMT_ATTR_DATATYPE *pType,
    BYTE *pValue,
    WORD *pcbLength);
void __RPC_STUB IWMWriterAdvanced2_GetInputSetting_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterAdvanced2_SetInputSetting_Proxy(
    IWMWriterAdvanced2* This,
    DWORD dwInputNum,
    LPCWSTR pszName,
    WMT_ATTR_DATATYPE Type,
    const BYTE *pValue,
    WORD cbLength);
void __RPC_STUB IWMWriterAdvanced2_SetInputSetting_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMWriterAdvanced2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMWriterAdvanced3 interface
 */
#ifndef __IWMWriterAdvanced3_INTERFACE_DEFINED__
#define __IWMWriterAdvanced3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMWriterAdvanced3, 0x2cd6492d, 0x7c37, 0x4e76, 0x9d,0x3b, 0x59,0x26,0x11,0x83,0xa2,0x2e);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd6492d-7c37-4e76-9d3b-59261183a22e")
IWMWriterAdvanced3 : public IWMWriterAdvanced2
{
    virtual HRESULT STDMETHODCALLTYPE GetStatisticsEx(
        WORD wStreamNum,
        WM_WRITER_STATISTICS_EX *pStats) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetNonBlocking(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMWriterAdvanced3, 0x2cd6492d, 0x7c37, 0x4e76, 0x9d,0x3b, 0x59,0x26,0x11,0x83,0xa2,0x2e)
#endif
#else
typedef struct IWMWriterAdvanced3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMWriterAdvanced3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMWriterAdvanced3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMWriterAdvanced3 *This);

    /*** IWMWriterAdvanced methods ***/
    HRESULT (STDMETHODCALLTYPE *GetSinkCount)(
        IWMWriterAdvanced3 *This,
        DWORD *pcSinks);

    HRESULT (STDMETHODCALLTYPE *GetSink)(
        IWMWriterAdvanced3 *This,
        DWORD dwSinkNum,
        IWMWriterSink **ppSink);

    HRESULT (STDMETHODCALLTYPE *AddSink)(
        IWMWriterAdvanced3 *This,
        IWMWriterSink *pSink);

    HRESULT (STDMETHODCALLTYPE *RemoveSink)(
        IWMWriterAdvanced3 *This,
        IWMWriterSink *pSink);

    HRESULT (STDMETHODCALLTYPE *WriteStreamSample)(
        IWMWriterAdvanced3 *This,
        WORD wStreamNum,
        QWORD cnsSampleTime,
        DWORD msSampleSendTime,
        QWORD cnsSampleDuration,
        DWORD dwFlags,
        INSSBuffer *pSample);

    HRESULT (STDMETHODCALLTYPE *SetLiveSource)(
        IWMWriterAdvanced3 *This,
        BOOL fIsLiveSource);

    HRESULT (STDMETHODCALLTYPE *IsRealTime)(
        IWMWriterAdvanced3 *This,
        BOOL *pfRealTime);

    HRESULT (STDMETHODCALLTYPE *GetWriterTime)(
        IWMWriterAdvanced3 *This,
        QWORD *pCurrentTime);

    HRESULT (STDMETHODCALLTYPE *GetStatistics)(
        IWMWriterAdvanced3 *This,
        WORD wStreamNum,
        WM_WRITER_STATISTICS *pStats);

    HRESULT (STDMETHODCALLTYPE *SetSyncTolerance)(
        IWMWriterAdvanced3 *This,
        DWORD msWindow);

    HRESULT (STDMETHODCALLTYPE *GetSyncTolerance)(
        IWMWriterAdvanced3 *This,
        DWORD *pmsWindow);

    /*** IWMWriterAdvanced2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetInputSetting)(
        IWMWriterAdvanced3 *This,
        DWORD dwInputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE *pType,
        BYTE *pValue,
        WORD *pcbLength);

    HRESULT (STDMETHODCALLTYPE *SetInputSetting)(
        IWMWriterAdvanced3 *This,
        DWORD dwInputNum,
        LPCWSTR pszName,
        WMT_ATTR_DATATYPE Type,
        const BYTE *pValue,
        WORD cbLength);

    /*** IWMWriterAdvanced3 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetStatisticsEx)(
        IWMWriterAdvanced3 *This,
        WORD wStreamNum,
        WM_WRITER_STATISTICS_EX *pStats);

    HRESULT (STDMETHODCALLTYPE *SetNonBlocking)(
        IWMWriterAdvanced3 *This);

    END_INTERFACE
} IWMWriterAdvanced3Vtbl;

interface IWMWriterAdvanced3 {
    CONST_VTBL IWMWriterAdvanced3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMWriterAdvanced3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMWriterAdvanced3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMWriterAdvanced3_Release(This) (This)->lpVtbl->Release(This)
/*** IWMWriterAdvanced methods ***/
#define IWMWriterAdvanced3_GetSinkCount(This,pcSinks) (This)->lpVtbl->GetSinkCount(This,pcSinks)
#define IWMWriterAdvanced3_GetSink(This,dwSinkNum,ppSink) (This)->lpVtbl->GetSink(This,dwSinkNum,ppSink)
#define IWMWriterAdvanced3_AddSink(This,pSink) (This)->lpVtbl->AddSink(This,pSink)
#define IWMWriterAdvanced3_RemoveSink(This,pSink) (This)->lpVtbl->RemoveSink(This,pSink)
#define IWMWriterAdvanced3_WriteStreamSample(This,wStreamNum,cnsSampleTime,msSampleSendTime,cnsSampleDuration,dwFlags,pSample) (This)->lpVtbl->WriteStreamSample(This,wStreamNum,cnsSampleTime,msSampleSendTime,cnsSampleDuration,dwFlags,pSample)
#define IWMWriterAdvanced3_SetLiveSource(This,fIsLiveSource) (This)->lpVtbl->SetLiveSource(This,fIsLiveSource)
#define IWMWriterAdvanced3_IsRealTime(This,pfRealTime) (This)->lpVtbl->IsRealTime(This,pfRealTime)
#define IWMWriterAdvanced3_GetWriterTime(This,pCurrentTime) (This)->lpVtbl->GetWriterTime(This,pCurrentTime)
#define IWMWriterAdvanced3_GetStatistics(This,wStreamNum,pStats) (This)->lpVtbl->GetStatistics(This,wStreamNum,pStats)
#define IWMWriterAdvanced3_SetSyncTolerance(This,msWindow) (This)->lpVtbl->SetSyncTolerance(This,msWindow)
#define IWMWriterAdvanced3_GetSyncTolerance(This,pmsWindow) (This)->lpVtbl->GetSyncTolerance(This,pmsWindow)
/*** IWMWriterAdvanced2 methods ***/
#define IWMWriterAdvanced3_GetInputSetting(This,dwInputNum,pszName,pType,pValue,pcbLength) (This)->lpVtbl->GetInputSetting(This,dwInputNum,pszName,pType,pValue,pcbLength)
#define IWMWriterAdvanced3_SetInputSetting(This,dwInputNum,pszName,Type,pValue,cbLength) (This)->lpVtbl->SetInputSetting(This,dwInputNum,pszName,Type,pValue,cbLength)
/*** IWMWriterAdvanced3 methods ***/
#define IWMWriterAdvanced3_GetStatisticsEx(This,wStreamNum,pStats) (This)->lpVtbl->GetStatisticsEx(This,wStreamNum,pStats)
#define IWMWriterAdvanced3_SetNonBlocking(This) (This)->lpVtbl->SetNonBlocking(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMWriterAdvanced3_QueryInterface(IWMWriterAdvanced3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMWriterAdvanced3_AddRef(IWMWriterAdvanced3* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMWriterAdvanced3_Release(IWMWriterAdvanced3* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMWriterAdvanced methods ***/
static FORCEINLINE HRESULT IWMWriterAdvanced3_GetSinkCount(IWMWriterAdvanced3* This,DWORD *pcSinks) {
    return This->lpVtbl->GetSinkCount(This,pcSinks);
}
static FORCEINLINE HRESULT IWMWriterAdvanced3_GetSink(IWMWriterAdvanced3* This,DWORD dwSinkNum,IWMWriterSink **ppSink) {
    return This->lpVtbl->GetSink(This,dwSinkNum,ppSink);
}
static FORCEINLINE HRESULT IWMWriterAdvanced3_AddSink(IWMWriterAdvanced3* This,IWMWriterSink *pSink) {
    return This->lpVtbl->AddSink(This,pSink);
}
static FORCEINLINE HRESULT IWMWriterAdvanced3_RemoveSink(IWMWriterAdvanced3* This,IWMWriterSink *pSink) {
    return This->lpVtbl->RemoveSink(This,pSink);
}
static FORCEINLINE HRESULT IWMWriterAdvanced3_WriteStreamSample(IWMWriterAdvanced3* This,WORD wStreamNum,QWORD cnsSampleTime,DWORD msSampleSendTime,QWORD cnsSampleDuration,DWORD dwFlags,INSSBuffer *pSample) {
    return This->lpVtbl->WriteStreamSample(This,wStreamNum,cnsSampleTime,msSampleSendTime,cnsSampleDuration,dwFlags,pSample);
}
static FORCEINLINE HRESULT IWMWriterAdvanced3_SetLiveSource(IWMWriterAdvanced3* This,BOOL fIsLiveSource) {
    return This->lpVtbl->SetLiveSource(This,fIsLiveSource);
}
static FORCEINLINE HRESULT IWMWriterAdvanced3_IsRealTime(IWMWriterAdvanced3* This,BOOL *pfRealTime) {
    return This->lpVtbl->IsRealTime(This,pfRealTime);
}
static FORCEINLINE HRESULT IWMWriterAdvanced3_GetWriterTime(IWMWriterAdvanced3* This,QWORD *pCurrentTime) {
    return This->lpVtbl->GetWriterTime(This,pCurrentTime);
}
static FORCEINLINE HRESULT IWMWriterAdvanced3_GetStatistics(IWMWriterAdvanced3* This,WORD wStreamNum,WM_WRITER_STATISTICS *pStats) {
    return This->lpVtbl->GetStatistics(This,wStreamNum,pStats);
}
static FORCEINLINE HRESULT IWMWriterAdvanced3_SetSyncTolerance(IWMWriterAdvanced3* This,DWORD msWindow) {
    return This->lpVtbl->SetSyncTolerance(This,msWindow);
}
static FORCEINLINE HRESULT IWMWriterAdvanced3_GetSyncTolerance(IWMWriterAdvanced3* This,DWORD *pmsWindow) {
    return This->lpVtbl->GetSyncTolerance(This,pmsWindow);
}
/*** IWMWriterAdvanced2 methods ***/
static FORCEINLINE HRESULT IWMWriterAdvanced3_GetInputSetting(IWMWriterAdvanced3* This,DWORD dwInputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE *pType,BYTE *pValue,WORD *pcbLength) {
    return This->lpVtbl->GetInputSetting(This,dwInputNum,pszName,pType,pValue,pcbLength);
}
static FORCEINLINE HRESULT IWMWriterAdvanced3_SetInputSetting(IWMWriterAdvanced3* This,DWORD dwInputNum,LPCWSTR pszName,WMT_ATTR_DATATYPE Type,const BYTE *pValue,WORD cbLength) {
    return This->lpVtbl->SetInputSetting(This,dwInputNum,pszName,Type,pValue,cbLength);
}
/*** IWMWriterAdvanced3 methods ***/
static FORCEINLINE HRESULT IWMWriterAdvanced3_GetStatisticsEx(IWMWriterAdvanced3* This,WORD wStreamNum,WM_WRITER_STATISTICS_EX *pStats) {
    return This->lpVtbl->GetStatisticsEx(This,wStreamNum,pStats);
}
static FORCEINLINE HRESULT IWMWriterAdvanced3_SetNonBlocking(IWMWriterAdvanced3* This) {
    return This->lpVtbl->SetNonBlocking(This);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMWriterAdvanced3_GetStatisticsEx_Proxy(
    IWMWriterAdvanced3* This,
    WORD wStreamNum,
    WM_WRITER_STATISTICS_EX *pStats);
void __RPC_STUB IWMWriterAdvanced3_GetStatisticsEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMWriterAdvanced3_SetNonBlocking_Proxy(
    IWMWriterAdvanced3* This);
void __RPC_STUB IWMWriterAdvanced3_SetNonBlocking_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMWriterAdvanced3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMHeaderInfo interface
 */
#ifndef __IWMHeaderInfo_INTERFACE_DEFINED__
#define __IWMHeaderInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMHeaderInfo, 0x96406bda, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("96406bda-2b2b-11d3-b36b-00c04f6108ff")
IWMHeaderInfo : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetAttributeCount(
        WORD stream_num,
        WORD *attributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAttributeByIndex(
        WORD index,
        WORD *stream_num,
        WCHAR *name,
        WORD *name_len,
        WMT_ATTR_DATATYPE *type,
        BYTE *value,
        WORD *length) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAttributeByName(
        WORD *stream_num,
        LPCWSTR name,
        WMT_ATTR_DATATYPE *type,
        BYTE *value,
        WORD *length) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAttribute(
        WORD stream_num,
        LPCWSTR name,
        WMT_ATTR_DATATYPE type,
        const BYTE *value,
        WORD length) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMarkerCount(
        WORD *markers) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMarker(
        WORD index,
        WCHAR *marker_name,
        WORD *marker_len,
        QWORD *marker_time) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddMarker(
        LPCWSTR_WMSDK_TYPE_SAFE marker_name,
        QWORD marker_time) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveMarker(
        WORD index) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetScriptCount(
        WORD *scripts) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetScript(
        WORD index,
        WCHAR *type,
        WORD *type_len,
        WCHAR *command,
        WORD *command_len,
        QWORD *script_time) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddScript(
        LPCWSTR_WMSDK_TYPE_SAFE type,
        LPCWSTR_WMSDK_TYPE_SAFE command,
        QWORD script_time) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveScript(
        WORD index) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMHeaderInfo, 0x96406bda, 0x2b2b, 0x11d3, 0xb3,0x6b, 0x00,0xc0,0x4f,0x61,0x08,0xff)
#endif
#else
typedef struct IWMHeaderInfoVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMHeaderInfo *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMHeaderInfo *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMHeaderInfo *This);

    /*** IWMHeaderInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAttributeCount)(
        IWMHeaderInfo *This,
        WORD stream_num,
        WORD *attributes);

    HRESULT (STDMETHODCALLTYPE *GetAttributeByIndex)(
        IWMHeaderInfo *This,
        WORD index,
        WORD *stream_num,
        WCHAR *name,
        WORD *name_len,
        WMT_ATTR_DATATYPE *type,
        BYTE *value,
        WORD *length);

    HRESULT (STDMETHODCALLTYPE *GetAttributeByName)(
        IWMHeaderInfo *This,
        WORD *stream_num,
        LPCWSTR name,
        WMT_ATTR_DATATYPE *type,
        BYTE *value,
        WORD *length);

    HRESULT (STDMETHODCALLTYPE *SetAttribute)(
        IWMHeaderInfo *This,
        WORD stream_num,
        LPCWSTR name,
        WMT_ATTR_DATATYPE type,
        const BYTE *value,
        WORD length);

    HRESULT (STDMETHODCALLTYPE *GetMarkerCount)(
        IWMHeaderInfo *This,
        WORD *markers);

    HRESULT (STDMETHODCALLTYPE *GetMarker)(
        IWMHeaderInfo *This,
        WORD index,
        WCHAR *marker_name,
        WORD *marker_len,
        QWORD *marker_time);

    HRESULT (STDMETHODCALLTYPE *AddMarker)(
        IWMHeaderInfo *This,
        LPCWSTR_WMSDK_TYPE_SAFE marker_name,
        QWORD marker_time);

    HRESULT (STDMETHODCALLTYPE *RemoveMarker)(
        IWMHeaderInfo *This,
        WORD index);

    HRESULT (STDMETHODCALLTYPE *GetScriptCount)(
        IWMHeaderInfo *This,
        WORD *scripts);

    HRESULT (STDMETHODCALLTYPE *GetScript)(
        IWMHeaderInfo *This,
        WORD index,
        WCHAR *type,
        WORD *type_len,
        WCHAR *command,
        WORD *command_len,
        QWORD *script_time);

    HRESULT (STDMETHODCALLTYPE *AddScript)(
        IWMHeaderInfo *This,
        LPCWSTR_WMSDK_TYPE_SAFE type,
        LPCWSTR_WMSDK_TYPE_SAFE command,
        QWORD script_time);

    HRESULT (STDMETHODCALLTYPE *RemoveScript)(
        IWMHeaderInfo *This,
        WORD index);

    END_INTERFACE
} IWMHeaderInfoVtbl;

interface IWMHeaderInfo {
    CONST_VTBL IWMHeaderInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMHeaderInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMHeaderInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMHeaderInfo_Release(This) (This)->lpVtbl->Release(This)
/*** IWMHeaderInfo methods ***/
#define IWMHeaderInfo_GetAttributeCount(This,stream_num,attributes) (This)->lpVtbl->GetAttributeCount(This,stream_num,attributes)
#define IWMHeaderInfo_GetAttributeByIndex(This,index,stream_num,name,name_len,type,value,length) (This)->lpVtbl->GetAttributeByIndex(This,index,stream_num,name,name_len,type,value,length)
#define IWMHeaderInfo_GetAttributeByName(This,stream_num,name,type,value,length) (This)->lpVtbl->GetAttributeByName(This,stream_num,name,type,value,length)
#define IWMHeaderInfo_SetAttribute(This,stream_num,name,type,value,length) (This)->lpVtbl->SetAttribute(This,stream_num,name,type,value,length)
#define IWMHeaderInfo_GetMarkerCount(This,markers) (This)->lpVtbl->GetMarkerCount(This,markers)
#define IWMHeaderInfo_GetMarker(This,index,marker_name,marker_len,marker_time) (This)->lpVtbl->GetMarker(This,index,marker_name,marker_len,marker_time)
#define IWMHeaderInfo_AddMarker(This,marker_name,marker_time) (This)->lpVtbl->AddMarker(This,marker_name,marker_time)
#define IWMHeaderInfo_RemoveMarker(This,index) (This)->lpVtbl->RemoveMarker(This,index)
#define IWMHeaderInfo_GetScriptCount(This,scripts) (This)->lpVtbl->GetScriptCount(This,scripts)
#define IWMHeaderInfo_GetScript(This,index,type,type_len,command,command_len,script_time) (This)->lpVtbl->GetScript(This,index,type,type_len,command,command_len,script_time)
#define IWMHeaderInfo_AddScript(This,type,command,script_time) (This)->lpVtbl->AddScript(This,type,command,script_time)
#define IWMHeaderInfo_RemoveScript(This,index) (This)->lpVtbl->RemoveScript(This,index)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMHeaderInfo_QueryInterface(IWMHeaderInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMHeaderInfo_AddRef(IWMHeaderInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMHeaderInfo_Release(IWMHeaderInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMHeaderInfo methods ***/
static FORCEINLINE HRESULT IWMHeaderInfo_GetAttributeCount(IWMHeaderInfo* This,WORD stream_num,WORD *attributes) {
    return This->lpVtbl->GetAttributeCount(This,stream_num,attributes);
}
static FORCEINLINE HRESULT IWMHeaderInfo_GetAttributeByIndex(IWMHeaderInfo* This,WORD index,WORD *stream_num,WCHAR *name,WORD *name_len,WMT_ATTR_DATATYPE *type,BYTE *value,WORD *length) {
    return This->lpVtbl->GetAttributeByIndex(This,index,stream_num,name,name_len,type,value,length);
}
static FORCEINLINE HRESULT IWMHeaderInfo_GetAttributeByName(IWMHeaderInfo* This,WORD *stream_num,LPCWSTR name,WMT_ATTR_DATATYPE *type,BYTE *value,WORD *length) {
    return This->lpVtbl->GetAttributeByName(This,stream_num,name,type,value,length);
}
static FORCEINLINE HRESULT IWMHeaderInfo_SetAttribute(IWMHeaderInfo* This,WORD stream_num,LPCWSTR name,WMT_ATTR_DATATYPE type,const BYTE *value,WORD length) {
    return This->lpVtbl->SetAttribute(This,stream_num,name,type,value,length);
}
static FORCEINLINE HRESULT IWMHeaderInfo_GetMarkerCount(IWMHeaderInfo* This,WORD *markers) {
    return This->lpVtbl->GetMarkerCount(This,markers);
}
static FORCEINLINE HRESULT IWMHeaderInfo_GetMarker(IWMHeaderInfo* This,WORD index,WCHAR *marker_name,WORD *marker_len,QWORD *marker_time) {
    return This->lpVtbl->GetMarker(This,index,marker_name,marker_len,marker_time);
}
static FORCEINLINE HRESULT IWMHeaderInfo_AddMarker(IWMHeaderInfo* This,LPCWSTR_WMSDK_TYPE_SAFE marker_name,QWORD marker_time) {
    return This->lpVtbl->AddMarker(This,marker_name,marker_time);
}
static FORCEINLINE HRESULT IWMHeaderInfo_RemoveMarker(IWMHeaderInfo* This,WORD index) {
    return This->lpVtbl->RemoveMarker(This,index);
}
static FORCEINLINE HRESULT IWMHeaderInfo_GetScriptCount(IWMHeaderInfo* This,WORD *scripts) {
    return This->lpVtbl->GetScriptCount(This,scripts);
}
static FORCEINLINE HRESULT IWMHeaderInfo_GetScript(IWMHeaderInfo* This,WORD index,WCHAR *type,WORD *type_len,WCHAR *command,WORD *command_len,QWORD *script_time) {
    return This->lpVtbl->GetScript(This,index,type,type_len,command,command_len,script_time);
}
static FORCEINLINE HRESULT IWMHeaderInfo_AddScript(IWMHeaderInfo* This,LPCWSTR_WMSDK_TYPE_SAFE type,LPCWSTR_WMSDK_TYPE_SAFE command,QWORD script_time) {
    return This->lpVtbl->AddScript(This,type,command,script_time);
}
static FORCEINLINE HRESULT IWMHeaderInfo_RemoveScript(IWMHeaderInfo* This,WORD index) {
    return This->lpVtbl->RemoveScript(This,index);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMHeaderInfo_GetAttributeCount_Proxy(
    IWMHeaderInfo* This,
    WORD stream_num,
    WORD *attributes);
void __RPC_STUB IWMHeaderInfo_GetAttributeCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo_GetAttributeByIndex_Proxy(
    IWMHeaderInfo* This,
    WORD index,
    WORD *stream_num,
    WCHAR *name,
    WORD *name_len,
    WMT_ATTR_DATATYPE *type,
    BYTE *value,
    WORD *length);
void __RPC_STUB IWMHeaderInfo_GetAttributeByIndex_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo_GetAttributeByName_Proxy(
    IWMHeaderInfo* This,
    WORD *stream_num,
    LPCWSTR name,
    WMT_ATTR_DATATYPE *type,
    BYTE *value,
    WORD *length);
void __RPC_STUB IWMHeaderInfo_GetAttributeByName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo_SetAttribute_Proxy(
    IWMHeaderInfo* This,
    WORD stream_num,
    LPCWSTR name,
    WMT_ATTR_DATATYPE type,
    const BYTE *value,
    WORD length);
void __RPC_STUB IWMHeaderInfo_SetAttribute_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo_GetMarkerCount_Proxy(
    IWMHeaderInfo* This,
    WORD *markers);
void __RPC_STUB IWMHeaderInfo_GetMarkerCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo_GetMarker_Proxy(
    IWMHeaderInfo* This,
    WORD index,
    WCHAR *marker_name,
    WORD *marker_len,
    QWORD *marker_time);
void __RPC_STUB IWMHeaderInfo_GetMarker_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo_AddMarker_Proxy(
    IWMHeaderInfo* This,
    LPCWSTR_WMSDK_TYPE_SAFE marker_name,
    QWORD marker_time);
void __RPC_STUB IWMHeaderInfo_AddMarker_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo_RemoveMarker_Proxy(
    IWMHeaderInfo* This,
    WORD index);
void __RPC_STUB IWMHeaderInfo_RemoveMarker_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo_GetScriptCount_Proxy(
    IWMHeaderInfo* This,
    WORD *scripts);
void __RPC_STUB IWMHeaderInfo_GetScriptCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo_GetScript_Proxy(
    IWMHeaderInfo* This,
    WORD index,
    WCHAR *type,
    WORD *type_len,
    WCHAR *command,
    WORD *command_len,
    QWORD *script_time);
void __RPC_STUB IWMHeaderInfo_GetScript_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo_AddScript_Proxy(
    IWMHeaderInfo* This,
    LPCWSTR_WMSDK_TYPE_SAFE type,
    LPCWSTR_WMSDK_TYPE_SAFE command,
    QWORD script_time);
void __RPC_STUB IWMHeaderInfo_AddScript_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo_RemoveScript_Proxy(
    IWMHeaderInfo* This,
    WORD index);
void __RPC_STUB IWMHeaderInfo_RemoveScript_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMHeaderInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMHeaderInfo2 interface
 */
#ifndef __IWMHeaderInfo2_INTERFACE_DEFINED__
#define __IWMHeaderInfo2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMHeaderInfo2, 0x15cf9781, 0x454e, 0x482e, 0xb3,0x93, 0x85,0xfa,0xe4,0x87,0xa8,0x10);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("15cf9781-454e-482e-b393-85fae487a810")
IWMHeaderInfo2 : public IWMHeaderInfo
{
    virtual HRESULT STDMETHODCALLTYPE GetCodecInfoCount(
        DWORD *codec_infos) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCodecInfo(
        DWORD index,
        WORD *name_len,
        WCHAR *name,
        WORD *description_len,
        WCHAR *description,
        WMT_CODEC_INFO_TYPE *codec_type,
        WORD *codec_info_cnt,
        BYTE *codec_info) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMHeaderInfo2, 0x15cf9781, 0x454e, 0x482e, 0xb3,0x93, 0x85,0xfa,0xe4,0x87,0xa8,0x10)
#endif
#else
typedef struct IWMHeaderInfo2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMHeaderInfo2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMHeaderInfo2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMHeaderInfo2 *This);

    /*** IWMHeaderInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAttributeCount)(
        IWMHeaderInfo2 *This,
        WORD stream_num,
        WORD *attributes);

    HRESULT (STDMETHODCALLTYPE *GetAttributeByIndex)(
        IWMHeaderInfo2 *This,
        WORD index,
        WORD *stream_num,
        WCHAR *name,
        WORD *name_len,
        WMT_ATTR_DATATYPE *type,
        BYTE *value,
        WORD *length);

    HRESULT (STDMETHODCALLTYPE *GetAttributeByName)(
        IWMHeaderInfo2 *This,
        WORD *stream_num,
        LPCWSTR name,
        WMT_ATTR_DATATYPE *type,
        BYTE *value,
        WORD *length);

    HRESULT (STDMETHODCALLTYPE *SetAttribute)(
        IWMHeaderInfo2 *This,
        WORD stream_num,
        LPCWSTR name,
        WMT_ATTR_DATATYPE type,
        const BYTE *value,
        WORD length);

    HRESULT (STDMETHODCALLTYPE *GetMarkerCount)(
        IWMHeaderInfo2 *This,
        WORD *markers);

    HRESULT (STDMETHODCALLTYPE *GetMarker)(
        IWMHeaderInfo2 *This,
        WORD index,
        WCHAR *marker_name,
        WORD *marker_len,
        QWORD *marker_time);

    HRESULT (STDMETHODCALLTYPE *AddMarker)(
        IWMHeaderInfo2 *This,
        LPCWSTR_WMSDK_TYPE_SAFE marker_name,
        QWORD marker_time);

    HRESULT (STDMETHODCALLTYPE *RemoveMarker)(
        IWMHeaderInfo2 *This,
        WORD index);

    HRESULT (STDMETHODCALLTYPE *GetScriptCount)(
        IWMHeaderInfo2 *This,
        WORD *scripts);

    HRESULT (STDMETHODCALLTYPE *GetScript)(
        IWMHeaderInfo2 *This,
        WORD index,
        WCHAR *type,
        WORD *type_len,
        WCHAR *command,
        WORD *command_len,
        QWORD *script_time);

    HRESULT (STDMETHODCALLTYPE *AddScript)(
        IWMHeaderInfo2 *This,
        LPCWSTR_WMSDK_TYPE_SAFE type,
        LPCWSTR_WMSDK_TYPE_SAFE command,
        QWORD script_time);

    HRESULT (STDMETHODCALLTYPE *RemoveScript)(
        IWMHeaderInfo2 *This,
        WORD index);

    /*** IWMHeaderInfo2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCodecInfoCount)(
        IWMHeaderInfo2 *This,
        DWORD *codec_infos);

    HRESULT (STDMETHODCALLTYPE *GetCodecInfo)(
        IWMHeaderInfo2 *This,
        DWORD index,
        WORD *name_len,
        WCHAR *name,
        WORD *description_len,
        WCHAR *description,
        WMT_CODEC_INFO_TYPE *codec_type,
        WORD *codec_info_cnt,
        BYTE *codec_info);

    END_INTERFACE
} IWMHeaderInfo2Vtbl;

interface IWMHeaderInfo2 {
    CONST_VTBL IWMHeaderInfo2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMHeaderInfo2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMHeaderInfo2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMHeaderInfo2_Release(This) (This)->lpVtbl->Release(This)
/*** IWMHeaderInfo methods ***/
#define IWMHeaderInfo2_GetAttributeCount(This,stream_num,attributes) (This)->lpVtbl->GetAttributeCount(This,stream_num,attributes)
#define IWMHeaderInfo2_GetAttributeByIndex(This,index,stream_num,name,name_len,type,value,length) (This)->lpVtbl->GetAttributeByIndex(This,index,stream_num,name,name_len,type,value,length)
#define IWMHeaderInfo2_GetAttributeByName(This,stream_num,name,type,value,length) (This)->lpVtbl->GetAttributeByName(This,stream_num,name,type,value,length)
#define IWMHeaderInfo2_SetAttribute(This,stream_num,name,type,value,length) (This)->lpVtbl->SetAttribute(This,stream_num,name,type,value,length)
#define IWMHeaderInfo2_GetMarkerCount(This,markers) (This)->lpVtbl->GetMarkerCount(This,markers)
#define IWMHeaderInfo2_GetMarker(This,index,marker_name,marker_len,marker_time) (This)->lpVtbl->GetMarker(This,index,marker_name,marker_len,marker_time)
#define IWMHeaderInfo2_AddMarker(This,marker_name,marker_time) (This)->lpVtbl->AddMarker(This,marker_name,marker_time)
#define IWMHeaderInfo2_RemoveMarker(This,index) (This)->lpVtbl->RemoveMarker(This,index)
#define IWMHeaderInfo2_GetScriptCount(This,scripts) (This)->lpVtbl->GetScriptCount(This,scripts)
#define IWMHeaderInfo2_GetScript(This,index,type,type_len,command,command_len,script_time) (This)->lpVtbl->GetScript(This,index,type,type_len,command,command_len,script_time)
#define IWMHeaderInfo2_AddScript(This,type,command,script_time) (This)->lpVtbl->AddScript(This,type,command,script_time)
#define IWMHeaderInfo2_RemoveScript(This,index) (This)->lpVtbl->RemoveScript(This,index)
/*** IWMHeaderInfo2 methods ***/
#define IWMHeaderInfo2_GetCodecInfoCount(This,codec_infos) (This)->lpVtbl->GetCodecInfoCount(This,codec_infos)
#define IWMHeaderInfo2_GetCodecInfo(This,index,name_len,name,description_len,description,codec_type,codec_info_cnt,codec_info) (This)->lpVtbl->GetCodecInfo(This,index,name_len,name,description_len,description,codec_type,codec_info_cnt,codec_info)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMHeaderInfo2_QueryInterface(IWMHeaderInfo2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMHeaderInfo2_AddRef(IWMHeaderInfo2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMHeaderInfo2_Release(IWMHeaderInfo2* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMHeaderInfo methods ***/
static FORCEINLINE HRESULT IWMHeaderInfo2_GetAttributeCount(IWMHeaderInfo2* This,WORD stream_num,WORD *attributes) {
    return This->lpVtbl->GetAttributeCount(This,stream_num,attributes);
}
static FORCEINLINE HRESULT IWMHeaderInfo2_GetAttributeByIndex(IWMHeaderInfo2* This,WORD index,WORD *stream_num,WCHAR *name,WORD *name_len,WMT_ATTR_DATATYPE *type,BYTE *value,WORD *length) {
    return This->lpVtbl->GetAttributeByIndex(This,index,stream_num,name,name_len,type,value,length);
}
static FORCEINLINE HRESULT IWMHeaderInfo2_GetAttributeByName(IWMHeaderInfo2* This,WORD *stream_num,LPCWSTR name,WMT_ATTR_DATATYPE *type,BYTE *value,WORD *length) {
    return This->lpVtbl->GetAttributeByName(This,stream_num,name,type,value,length);
}
static FORCEINLINE HRESULT IWMHeaderInfo2_SetAttribute(IWMHeaderInfo2* This,WORD stream_num,LPCWSTR name,WMT_ATTR_DATATYPE type,const BYTE *value,WORD length) {
    return This->lpVtbl->SetAttribute(This,stream_num,name,type,value,length);
}
static FORCEINLINE HRESULT IWMHeaderInfo2_GetMarkerCount(IWMHeaderInfo2* This,WORD *markers) {
    return This->lpVtbl->GetMarkerCount(This,markers);
}
static FORCEINLINE HRESULT IWMHeaderInfo2_GetMarker(IWMHeaderInfo2* This,WORD index,WCHAR *marker_name,WORD *marker_len,QWORD *marker_time) {
    return This->lpVtbl->GetMarker(This,index,marker_name,marker_len,marker_time);
}
static FORCEINLINE HRESULT IWMHeaderInfo2_AddMarker(IWMHeaderInfo2* This,LPCWSTR_WMSDK_TYPE_SAFE marker_name,QWORD marker_time) {
    return This->lpVtbl->AddMarker(This,marker_name,marker_time);
}
static FORCEINLINE HRESULT IWMHeaderInfo2_RemoveMarker(IWMHeaderInfo2* This,WORD index) {
    return This->lpVtbl->RemoveMarker(This,index);
}
static FORCEINLINE HRESULT IWMHeaderInfo2_GetScriptCount(IWMHeaderInfo2* This,WORD *scripts) {
    return This->lpVtbl->GetScriptCount(This,scripts);
}
static FORCEINLINE HRESULT IWMHeaderInfo2_GetScript(IWMHeaderInfo2* This,WORD index,WCHAR *type,WORD *type_len,WCHAR *command,WORD *command_len,QWORD *script_time) {
    return This->lpVtbl->GetScript(This,index,type,type_len,command,command_len,script_time);
}
static FORCEINLINE HRESULT IWMHeaderInfo2_AddScript(IWMHeaderInfo2* This,LPCWSTR_WMSDK_TYPE_SAFE type,LPCWSTR_WMSDK_TYPE_SAFE command,QWORD script_time) {
    return This->lpVtbl->AddScript(This,type,command,script_time);
}
static FORCEINLINE HRESULT IWMHeaderInfo2_RemoveScript(IWMHeaderInfo2* This,WORD index) {
    return This->lpVtbl->RemoveScript(This,index);
}
/*** IWMHeaderInfo2 methods ***/
static FORCEINLINE HRESULT IWMHeaderInfo2_GetCodecInfoCount(IWMHeaderInfo2* This,DWORD *codec_infos) {
    return This->lpVtbl->GetCodecInfoCount(This,codec_infos);
}
static FORCEINLINE HRESULT IWMHeaderInfo2_GetCodecInfo(IWMHeaderInfo2* This,DWORD index,WORD *name_len,WCHAR *name,WORD *description_len,WCHAR *description,WMT_CODEC_INFO_TYPE *codec_type,WORD *codec_info_cnt,BYTE *codec_info) {
    return This->lpVtbl->GetCodecInfo(This,index,name_len,name,description_len,description,codec_type,codec_info_cnt,codec_info);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMHeaderInfo2_GetCodecInfoCount_Proxy(
    IWMHeaderInfo2* This,
    DWORD *codec_infos);
void __RPC_STUB IWMHeaderInfo2_GetCodecInfoCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo2_GetCodecInfo_Proxy(
    IWMHeaderInfo2* This,
    DWORD index,
    WORD *name_len,
    WCHAR *name,
    WORD *description_len,
    WCHAR *description,
    WMT_CODEC_INFO_TYPE *codec_type,
    WORD *codec_info_cnt,
    BYTE *codec_info);
void __RPC_STUB IWMHeaderInfo2_GetCodecInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMHeaderInfo2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWMHeaderInfo3 interface
 */
#ifndef __IWMHeaderInfo3_INTERFACE_DEFINED__
#define __IWMHeaderInfo3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWMHeaderInfo3, 0x15cc68e3, 0x27cc, 0x4ecd, 0xb2,0x22, 0x3f,0x5d,0x02,0xd8,0x0b,0xd5);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("15cc68e3-27cc-4ecd-b222-3f5d02d80bd5")
IWMHeaderInfo3 : public IWMHeaderInfo2
{
    virtual HRESULT STDMETHODCALLTYPE GetAttributeCountEx(
        WORD stream_num,
        WORD *attributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAttributeIndices(
        WORD stream_num,
        LPCWSTR name,
        WORD *lang_index,
        WORD *indices,
        WORD *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAttributeByIndexEx(
        WORD stream_num,
        WORD index,
        LPWSTR name,
        WORD *name_len,
        WMT_ATTR_DATATYPE *type,
        WORD *lang_index,
        BYTE *value,
        DWORD *data_len) = 0;

    virtual HRESULT STDMETHODCALLTYPE ModifyAttribute(
        WORD stream_num,
        WORD index,
        WMT_ATTR_DATATYPE type,
        WORD lang_index,
        const BYTE *value,
        DWORD length) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddAttribute(
        WORD stream_num,
        LPCWSTR name,
        WORD *index,
        WMT_ATTR_DATATYPE type,
        WORD lang_index,
        const BYTE *value,
        DWORD length) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteAttribute(
        WORD stream_num,
        WORD index) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddCodecInfo(
        LPCWSTR_WMSDK_TYPE_SAFE name,
        LPCWSTR_WMSDK_TYPE_SAFE description,
        WMT_CODEC_INFO_TYPE codec_type,
        WORD codec_info_cnt,
        BYTE *codec_info) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWMHeaderInfo3, 0x15cc68e3, 0x27cc, 0x4ecd, 0xb2,0x22, 0x3f,0x5d,0x02,0xd8,0x0b,0xd5)
#endif
#else
typedef struct IWMHeaderInfo3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IWMHeaderInfo3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IWMHeaderInfo3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IWMHeaderInfo3 *This);

    /*** IWMHeaderInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAttributeCount)(
        IWMHeaderInfo3 *This,
        WORD stream_num,
        WORD *attributes);

    HRESULT (STDMETHODCALLTYPE *GetAttributeByIndex)(
        IWMHeaderInfo3 *This,
        WORD index,
        WORD *stream_num,
        WCHAR *name,
        WORD *name_len,
        WMT_ATTR_DATATYPE *type,
        BYTE *value,
        WORD *length);

    HRESULT (STDMETHODCALLTYPE *GetAttributeByName)(
        IWMHeaderInfo3 *This,
        WORD *stream_num,
        LPCWSTR name,
        WMT_ATTR_DATATYPE *type,
        BYTE *value,
        WORD *length);

    HRESULT (STDMETHODCALLTYPE *SetAttribute)(
        IWMHeaderInfo3 *This,
        WORD stream_num,
        LPCWSTR name,
        WMT_ATTR_DATATYPE type,
        const BYTE *value,
        WORD length);

    HRESULT (STDMETHODCALLTYPE *GetMarkerCount)(
        IWMHeaderInfo3 *This,
        WORD *markers);

    HRESULT (STDMETHODCALLTYPE *GetMarker)(
        IWMHeaderInfo3 *This,
        WORD index,
        WCHAR *marker_name,
        WORD *marker_len,
        QWORD *marker_time);

    HRESULT (STDMETHODCALLTYPE *AddMarker)(
        IWMHeaderInfo3 *This,
        LPCWSTR_WMSDK_TYPE_SAFE marker_name,
        QWORD marker_time);

    HRESULT (STDMETHODCALLTYPE *RemoveMarker)(
        IWMHeaderInfo3 *This,
        WORD index);

    HRESULT (STDMETHODCALLTYPE *GetScriptCount)(
        IWMHeaderInfo3 *This,
        WORD *scripts);

    HRESULT (STDMETHODCALLTYPE *GetScript)(
        IWMHeaderInfo3 *This,
        WORD index,
        WCHAR *type,
        WORD *type_len,
        WCHAR *command,
        WORD *command_len,
        QWORD *script_time);

    HRESULT (STDMETHODCALLTYPE *AddScript)(
        IWMHeaderInfo3 *This,
        LPCWSTR_WMSDK_TYPE_SAFE type,
        LPCWSTR_WMSDK_TYPE_SAFE command,
        QWORD script_time);

    HRESULT (STDMETHODCALLTYPE *RemoveScript)(
        IWMHeaderInfo3 *This,
        WORD index);

    /*** IWMHeaderInfo2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCodecInfoCount)(
        IWMHeaderInfo3 *This,
        DWORD *codec_infos);

    HRESULT (STDMETHODCALLTYPE *GetCodecInfo)(
        IWMHeaderInfo3 *This,
        DWORD index,
        WORD *name_len,
        WCHAR *name,
        WORD *description_len,
        WCHAR *description,
        WMT_CODEC_INFO_TYPE *codec_type,
        WORD *codec_info_cnt,
        BYTE *codec_info);

    /*** IWMHeaderInfo3 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAttributeCountEx)(
        IWMHeaderInfo3 *This,
        WORD stream_num,
        WORD *attributes);

    HRESULT (STDMETHODCALLTYPE *GetAttributeIndices)(
        IWMHeaderInfo3 *This,
        WORD stream_num,
        LPCWSTR name,
        WORD *lang_index,
        WORD *indices,
        WORD *count);

    HRESULT (STDMETHODCALLTYPE *GetAttributeByIndexEx)(
        IWMHeaderInfo3 *This,
        WORD stream_num,
        WORD index,
        LPWSTR name,
        WORD *name_len,
        WMT_ATTR_DATATYPE *type,
        WORD *lang_index,
        BYTE *value,
        DWORD *data_len);

    HRESULT (STDMETHODCALLTYPE *ModifyAttribute)(
        IWMHeaderInfo3 *This,
        WORD stream_num,
        WORD index,
        WMT_ATTR_DATATYPE type,
        WORD lang_index,
        const BYTE *value,
        DWORD length);

    HRESULT (STDMETHODCALLTYPE *AddAttribute)(
        IWMHeaderInfo3 *This,
        WORD stream_num,
        LPCWSTR name,
        WORD *index,
        WMT_ATTR_DATATYPE type,
        WORD lang_index,
        const BYTE *value,
        DWORD length);

    HRESULT (STDMETHODCALLTYPE *DeleteAttribute)(
        IWMHeaderInfo3 *This,
        WORD stream_num,
        WORD index);

    HRESULT (STDMETHODCALLTYPE *AddCodecInfo)(
        IWMHeaderInfo3 *This,
        LPCWSTR_WMSDK_TYPE_SAFE name,
        LPCWSTR_WMSDK_TYPE_SAFE description,
        WMT_CODEC_INFO_TYPE codec_type,
        WORD codec_info_cnt,
        BYTE *codec_info);

    END_INTERFACE
} IWMHeaderInfo3Vtbl;

interface IWMHeaderInfo3 {
    CONST_VTBL IWMHeaderInfo3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWMHeaderInfo3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWMHeaderInfo3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWMHeaderInfo3_Release(This) (This)->lpVtbl->Release(This)
/*** IWMHeaderInfo methods ***/
#define IWMHeaderInfo3_GetAttributeCount(This,stream_num,attributes) (This)->lpVtbl->GetAttributeCount(This,stream_num,attributes)
#define IWMHeaderInfo3_GetAttributeByIndex(This,index,stream_num,name,name_len,type,value,length) (This)->lpVtbl->GetAttributeByIndex(This,index,stream_num,name,name_len,type,value,length)
#define IWMHeaderInfo3_GetAttributeByName(This,stream_num,name,type,value,length) (This)->lpVtbl->GetAttributeByName(This,stream_num,name,type,value,length)
#define IWMHeaderInfo3_SetAttribute(This,stream_num,name,type,value,length) (This)->lpVtbl->SetAttribute(This,stream_num,name,type,value,length)
#define IWMHeaderInfo3_GetMarkerCount(This,markers) (This)->lpVtbl->GetMarkerCount(This,markers)
#define IWMHeaderInfo3_GetMarker(This,index,marker_name,marker_len,marker_time) (This)->lpVtbl->GetMarker(This,index,marker_name,marker_len,marker_time)
#define IWMHeaderInfo3_AddMarker(This,marker_name,marker_time) (This)->lpVtbl->AddMarker(This,marker_name,marker_time)
#define IWMHeaderInfo3_RemoveMarker(This,index) (This)->lpVtbl->RemoveMarker(This,index)
#define IWMHeaderInfo3_GetScriptCount(This,scripts) (This)->lpVtbl->GetScriptCount(This,scripts)
#define IWMHeaderInfo3_GetScript(This,index,type,type_len,command,command_len,script_time) (This)->lpVtbl->GetScript(This,index,type,type_len,command,command_len,script_time)
#define IWMHeaderInfo3_AddScript(This,type,command,script_time) (This)->lpVtbl->AddScript(This,type,command,script_time)
#define IWMHeaderInfo3_RemoveScript(This,index) (This)->lpVtbl->RemoveScript(This,index)
/*** IWMHeaderInfo2 methods ***/
#define IWMHeaderInfo3_GetCodecInfoCount(This,codec_infos) (This)->lpVtbl->GetCodecInfoCount(This,codec_infos)
#define IWMHeaderInfo3_GetCodecInfo(This,index,name_len,name,description_len,description,codec_type,codec_info_cnt,codec_info) (This)->lpVtbl->GetCodecInfo(This,index,name_len,name,description_len,description,codec_type,codec_info_cnt,codec_info)
/*** IWMHeaderInfo3 methods ***/
#define IWMHeaderInfo3_GetAttributeCountEx(This,stream_num,attributes) (This)->lpVtbl->GetAttributeCountEx(This,stream_num,attributes)
#define IWMHeaderInfo3_GetAttributeIndices(This,stream_num,name,lang_index,indices,count) (This)->lpVtbl->GetAttributeIndices(This,stream_num,name,lang_index,indices,count)
#define IWMHeaderInfo3_GetAttributeByIndexEx(This,stream_num,index,name,name_len,type,lang_index,value,data_len) (This)->lpVtbl->GetAttributeByIndexEx(This,stream_num,index,name,name_len,type,lang_index,value,data_len)
#define IWMHeaderInfo3_ModifyAttribute(This,stream_num,index,type,lang_index,value,length) (This)->lpVtbl->ModifyAttribute(This,stream_num,index,type,lang_index,value,length)
#define IWMHeaderInfo3_AddAttribute(This,stream_num,name,index,type,lang_index,value,length) (This)->lpVtbl->AddAttribute(This,stream_num,name,index,type,lang_index,value,length)
#define IWMHeaderInfo3_DeleteAttribute(This,stream_num,index) (This)->lpVtbl->DeleteAttribute(This,stream_num,index)
#define IWMHeaderInfo3_AddCodecInfo(This,name,description,codec_type,codec_info_cnt,codec_info) (This)->lpVtbl->AddCodecInfo(This,name,description,codec_type,codec_info_cnt,codec_info)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWMHeaderInfo3_QueryInterface(IWMHeaderInfo3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWMHeaderInfo3_AddRef(IWMHeaderInfo3* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWMHeaderInfo3_Release(IWMHeaderInfo3* This) {
    return This->lpVtbl->Release(This);
}
/*** IWMHeaderInfo methods ***/
static FORCEINLINE HRESULT IWMHeaderInfo3_GetAttributeCount(IWMHeaderInfo3* This,WORD stream_num,WORD *attributes) {
    return This->lpVtbl->GetAttributeCount(This,stream_num,attributes);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_GetAttributeByIndex(IWMHeaderInfo3* This,WORD index,WORD *stream_num,WCHAR *name,WORD *name_len,WMT_ATTR_DATATYPE *type,BYTE *value,WORD *length) {
    return This->lpVtbl->GetAttributeByIndex(This,index,stream_num,name,name_len,type,value,length);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_GetAttributeByName(IWMHeaderInfo3* This,WORD *stream_num,LPCWSTR name,WMT_ATTR_DATATYPE *type,BYTE *value,WORD *length) {
    return This->lpVtbl->GetAttributeByName(This,stream_num,name,type,value,length);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_SetAttribute(IWMHeaderInfo3* This,WORD stream_num,LPCWSTR name,WMT_ATTR_DATATYPE type,const BYTE *value,WORD length) {
    return This->lpVtbl->SetAttribute(This,stream_num,name,type,value,length);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_GetMarkerCount(IWMHeaderInfo3* This,WORD *markers) {
    return This->lpVtbl->GetMarkerCount(This,markers);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_GetMarker(IWMHeaderInfo3* This,WORD index,WCHAR *marker_name,WORD *marker_len,QWORD *marker_time) {
    return This->lpVtbl->GetMarker(This,index,marker_name,marker_len,marker_time);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_AddMarker(IWMHeaderInfo3* This,LPCWSTR_WMSDK_TYPE_SAFE marker_name,QWORD marker_time) {
    return This->lpVtbl->AddMarker(This,marker_name,marker_time);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_RemoveMarker(IWMHeaderInfo3* This,WORD index) {
    return This->lpVtbl->RemoveMarker(This,index);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_GetScriptCount(IWMHeaderInfo3* This,WORD *scripts) {
    return This->lpVtbl->GetScriptCount(This,scripts);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_GetScript(IWMHeaderInfo3* This,WORD index,WCHAR *type,WORD *type_len,WCHAR *command,WORD *command_len,QWORD *script_time) {
    return This->lpVtbl->GetScript(This,index,type,type_len,command,command_len,script_time);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_AddScript(IWMHeaderInfo3* This,LPCWSTR_WMSDK_TYPE_SAFE type,LPCWSTR_WMSDK_TYPE_SAFE command,QWORD script_time) {
    return This->lpVtbl->AddScript(This,type,command,script_time);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_RemoveScript(IWMHeaderInfo3* This,WORD index) {
    return This->lpVtbl->RemoveScript(This,index);
}
/*** IWMHeaderInfo2 methods ***/
static FORCEINLINE HRESULT IWMHeaderInfo3_GetCodecInfoCount(IWMHeaderInfo3* This,DWORD *codec_infos) {
    return This->lpVtbl->GetCodecInfoCount(This,codec_infos);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_GetCodecInfo(IWMHeaderInfo3* This,DWORD index,WORD *name_len,WCHAR *name,WORD *description_len,WCHAR *description,WMT_CODEC_INFO_TYPE *codec_type,WORD *codec_info_cnt,BYTE *codec_info) {
    return This->lpVtbl->GetCodecInfo(This,index,name_len,name,description_len,description,codec_type,codec_info_cnt,codec_info);
}
/*** IWMHeaderInfo3 methods ***/
static FORCEINLINE HRESULT IWMHeaderInfo3_GetAttributeCountEx(IWMHeaderInfo3* This,WORD stream_num,WORD *attributes) {
    return This->lpVtbl->GetAttributeCountEx(This,stream_num,attributes);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_GetAttributeIndices(IWMHeaderInfo3* This,WORD stream_num,LPCWSTR name,WORD *lang_index,WORD *indices,WORD *count) {
    return This->lpVtbl->GetAttributeIndices(This,stream_num,name,lang_index,indices,count);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_GetAttributeByIndexEx(IWMHeaderInfo3* This,WORD stream_num,WORD index,LPWSTR name,WORD *name_len,WMT_ATTR_DATATYPE *type,WORD *lang_index,BYTE *value,DWORD *data_len) {
    return This->lpVtbl->GetAttributeByIndexEx(This,stream_num,index,name,name_len,type,lang_index,value,data_len);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_ModifyAttribute(IWMHeaderInfo3* This,WORD stream_num,WORD index,WMT_ATTR_DATATYPE type,WORD lang_index,const BYTE *value,DWORD length) {
    return This->lpVtbl->ModifyAttribute(This,stream_num,index,type,lang_index,value,length);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_AddAttribute(IWMHeaderInfo3* This,WORD stream_num,LPCWSTR name,WORD *index,WMT_ATTR_DATATYPE type,WORD lang_index,const BYTE *value,DWORD length) {
    return This->lpVtbl->AddAttribute(This,stream_num,name,index,type,lang_index,value,length);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_DeleteAttribute(IWMHeaderInfo3* This,WORD stream_num,WORD index) {
    return This->lpVtbl->DeleteAttribute(This,stream_num,index);
}
static FORCEINLINE HRESULT IWMHeaderInfo3_AddCodecInfo(IWMHeaderInfo3* This,LPCWSTR_WMSDK_TYPE_SAFE name,LPCWSTR_WMSDK_TYPE_SAFE description,WMT_CODEC_INFO_TYPE codec_type,WORD codec_info_cnt,BYTE *codec_info) {
    return This->lpVtbl->AddCodecInfo(This,name,description,codec_type,codec_info_cnt,codec_info);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWMHeaderInfo3_GetAttributeCountEx_Proxy(
    IWMHeaderInfo3* This,
    WORD stream_num,
    WORD *attributes);
void __RPC_STUB IWMHeaderInfo3_GetAttributeCountEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo3_GetAttributeIndices_Proxy(
    IWMHeaderInfo3* This,
    WORD stream_num,
    LPCWSTR name,
    WORD *lang_index,
    WORD *indices,
    WORD *count);
void __RPC_STUB IWMHeaderInfo3_GetAttributeIndices_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo3_GetAttributeByIndexEx_Proxy(
    IWMHeaderInfo3* This,
    WORD stream_num,
    WORD index,
    LPWSTR name,
    WORD *name_len,
    WMT_ATTR_DATATYPE *type,
    WORD *lang_index,
    BYTE *value,
    DWORD *data_len);
void __RPC_STUB IWMHeaderInfo3_GetAttributeByIndexEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo3_ModifyAttribute_Proxy(
    IWMHeaderInfo3* This,
    WORD stream_num,
    WORD index,
    WMT_ATTR_DATATYPE type,
    WORD lang_index,
    const BYTE *value,
    DWORD length);
void __RPC_STUB IWMHeaderInfo3_ModifyAttribute_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo3_AddAttribute_Proxy(
    IWMHeaderInfo3* This,
    WORD stream_num,
    LPCWSTR name,
    WORD *index,
    WMT_ATTR_DATATYPE type,
    WORD lang_index,
    const BYTE *value,
    DWORD length);
void __RPC_STUB IWMHeaderInfo3_AddAttribute_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo3_DeleteAttribute_Proxy(
    IWMHeaderInfo3* This,
    WORD stream_num,
    WORD index);
void __RPC_STUB IWMHeaderInfo3_DeleteAttribute_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWMHeaderInfo3_AddCodecInfo_Proxy(
    IWMHeaderInfo3* This,
    LPCWSTR_WMSDK_TYPE_SAFE name,
    LPCWSTR_WMSDK_TYPE_SAFE description,
    WMT_CODEC_INFO_TYPE codec_type,
    WORD codec_info_cnt,
    BYTE *codec_info);
void __RPC_STUB IWMHeaderInfo3_AddCodecInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWMHeaderInfo3_INTERFACE_DEFINED__ */

HRESULT WINAPI WMCreateWriter(IUnknown*,IWMWriter**);
HRESULT WINAPI WMCreateReader(IUnknown*,DWORD,IWMReader**);
EXTERN_GUID(WMMEDIASUBTYPE_Base,   0x00000000,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIATYPE_Video,     0x73646976,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_RGB1,   0xe436eb78,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);
EXTERN_GUID(WMMEDIASUBTYPE_RGB4,   0xe436eb79,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);
EXTERN_GUID(WMMEDIASUBTYPE_RGB8,   0xe436eb7a,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);
EXTERN_GUID(WMMEDIASUBTYPE_RGB565, 0xe436eb7b,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);
EXTERN_GUID(WMMEDIASUBTYPE_RGB555, 0xe436eb7c,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);
EXTERN_GUID(WMMEDIASUBTYPE_RGB24,  0xe436eb7d,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);
EXTERN_GUID(WMMEDIASUBTYPE_RGB32,  0xe436eb7e,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);
EXTERN_GUID(WMMEDIASUBTYPE_I420,   0x30323449,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_IYUV,   0x56555949,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_YV12,   0x32315659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_YUY2,   0x32595559,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_P422,   0x32323450,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_UYVY,   0x59565955,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_YVYU,   0x55595659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_YVU9,   0x39555659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_VIDEOIMAGE, 0x1d4a45f2,0xe5f6,0x4b44,0x83,0x88,0xf0,0xae,0x5c,0x0e,0x0c,0x37);
EXTERN_GUID(WMMEDIASUBTYPE_MP43,   0x3334504d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_MP4S,   0x5334504d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_M4S2,   0x3253344d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_WMV1,   0x31564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_WMV2,   0x32564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_MSS1,   0x3153534d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_MPEG2_VIDEO, 0xe06d8026,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea);
EXTERN_GUID(WMMEDIATYPE_Audio,     0x73647561,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_PCM,    0x00000001,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_DRM,    0x00000009,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_WMAudioV9,        0x00000162,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_WMAudio_Lossless, 0x00000163,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_MSS2,   0x3253534d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_WMSP1,  0x0000000a,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_WMSP2,  0x0000000b,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_WMV3,   0x33564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_WMVP,   0x50564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_WVP2,   0x32505657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_WMVA,   0x41564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
EXTERN_GUID(WMMEDIASUBTYPE_WVC1,   0x31435657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __wmsdkidl_h__ */
