/*** Autogenerated by WIDL 1.7.0 from wincodecsdk.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 __wincodecsdk_h__
#define __wincodecsdk_h__

/* Forward declarations */

#ifndef __IWICMetadataHandlerInfo_FWD_DEFINED__
#define __IWICMetadataHandlerInfo_FWD_DEFINED__
typedef interface IWICMetadataHandlerInfo IWICMetadataHandlerInfo;
#endif

#ifndef __IWICMetadataReader_FWD_DEFINED__
#define __IWICMetadataReader_FWD_DEFINED__
typedef interface IWICMetadataReader IWICMetadataReader;
#endif

#ifndef __IWICMetadataReaderInfo_FWD_DEFINED__
#define __IWICMetadataReaderInfo_FWD_DEFINED__
typedef interface IWICMetadataReaderInfo IWICMetadataReaderInfo;
#endif

#ifndef __IWICMetadataWriter_FWD_DEFINED__
#define __IWICMetadataWriter_FWD_DEFINED__
typedef interface IWICMetadataWriter IWICMetadataWriter;
#endif

#ifndef __IWICMetadataWriterInfo_FWD_DEFINED__
#define __IWICMetadataWriterInfo_FWD_DEFINED__
typedef interface IWICMetadataWriterInfo IWICMetadataWriterInfo;
#endif

#ifndef __IWICMetadataBlockReader_FWD_DEFINED__
#define __IWICMetadataBlockReader_FWD_DEFINED__
typedef interface IWICMetadataBlockReader IWICMetadataBlockReader;
#endif

#ifndef __IWICMetadataBlockWriter_FWD_DEFINED__
#define __IWICMetadataBlockWriter_FWD_DEFINED__
typedef interface IWICMetadataBlockWriter IWICMetadataBlockWriter;
#endif

#ifndef __IWICPersistStream_FWD_DEFINED__
#define __IWICPersistStream_FWD_DEFINED__
typedef interface IWICPersistStream IWICPersistStream;
#endif

#ifndef __IWICComponentFactory_FWD_DEFINED__
#define __IWICComponentFactory_FWD_DEFINED__
typedef interface IWICComponentFactory IWICComponentFactory;
#endif

/* Headers for imported files */

#include <wtypes.h>
#include <wincodec.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef enum WICPersistOptions {
    WICPersistOptionsDefault = 0x0,
    WICPersistOptionsLittleEndian = 0x0,
    WICPersistOptionsBigEndian = 0x1,
    WICPersistOptionsStrictFormat = 0x2,
    WICPersistOptionsNoCacheStream = 0x4,
    WICPersistOptionPreferUTF8 = 0x8,
    WICPersistOptionsMask = 0xffff
} WICPersistOptions;
typedef enum WICMetadataCreationOptions {
    WICMetadataCreationDefault = 0x0,
    WICMetadataCreationAllowUnknown = WICMetadataCreationDefault,
    WICMetadataCreationFailUnknown = 0x10000,
    WICMetadataCreationMask = 0xffff0000
} WICMetadataCreationOptions;
DEFINE_GUID(GUID_MetadataFormatUnknown, 0xa45e592f,0x9078,0x4a7c,0xad,0xb5,0x4e,0xdc,0x4f,0xd6,0x1b,0x1f);
DEFINE_GUID(GUID_MetadataFormatChunktEXt, 0x568d8936,0xc0a9,0x4923,0x90,0x5d,0xdf,0x2b,0x38,0x23,0x8f,0xbc);
DEFINE_GUID(GUID_MetadataFormatChunktIME, 0x6b00ae2d,0xe24b,0x460a,0x98,0xb6,0x87,0x8b,0xd0,0x30,0x72,0xfd);
DEFINE_GUID(GUID_MetadataFormatIfd, 0x537396c6,0x2d8a,0x4bb6,0x9b,0xf8,0x2f,0x0a,0x8e,0x2a,0x3a,0xdf);
DEFINE_GUID(GUID_MetadataFormatExif, 0x1c3c4f9d,0xb84a,0x467d,0x94,0x93,0x36,0xcf,0xbd,0x59,0xea,0x57);
DEFINE_GUID(GUID_MetadataFormatXMP, 0xbb5acc38,0xf216,0x4cec,0xa6,0xc5,0x5f,0x6e,0x73,0x97,0x63,0xa9);
DEFINE_GUID(GUID_MetadataFormatXMPStruct, 0x22383cf1,0xed17,0x4e2e,0xaf,0x17,0xd8,0x5b,0x8f,0x6b,0x30,0xd0);
DEFINE_GUID(GUID_MetadataFormatIMD, 0xbd2bb086,0x4d52,0x48dd,0x96,0x77,0xdb,0x48,0x3e,0x85,0xae,0x8f);
DEFINE_GUID(GUID_MetadataFormatLSD, 0xe256031e,0x6299,0x4929,0xb9,0x8d,0x5a,0xc8,0x84,0xaf,0xba,0x92);
DEFINE_GUID(GUID_MetadataFormatGCE, 0x2a25cad8,0xdeeb,0x4c69,0xa7,0x88,0x0e,0xc2,0x26,0x6d,0xca,0xfd);
DEFINE_GUID(GUID_MetadataFormatAPE, 0x2e043dc2,0xc967,0x4e05,0x87,0x5e,0x61,0x8b,0xf6,0x7e,0x85,0xc3);
DEFINE_GUID(GUID_MetadataFormatGifComment, 0xc4b6e0e0,0xcfb4,0x4ad3,0xab,0x33,0x9a,0xad,0x23,0x55,0xa3,0x4a);
DEFINE_GUID(CLSID_WICUnknownMetadataReader, 0x699745c2,0x5066,0x4b82,0xa8,0xe3,0xd4,0x04,0x78,0xdb,0xec,0x8c);
DEFINE_GUID(CLSID_WICUnknownMetadataWriter, 0xa09cca86,0x27ba,0x4f39,0x90,0x53,0x12,0x1f,0xa4,0xdc,0x08,0xfc);
DEFINE_GUID(CLSID_WICPngTextMetadataReader, 0x4b59afcc,0xb8c3,0x408a,0xb6,0x70,0x89,0xe5,0xfa,0xb6,0xfd,0xa7);
DEFINE_GUID(CLSID_WICPngTextMetadataWriter, 0xb5ebafb9,0x253e,0x4a72,0xa7,0x44,0x07,0x62,0xd2,0x68,0x56,0x83);
DEFINE_GUID(CLSID_WICIfdMetadataReader, 0x8f914656,0x9d0a,0x4eb2,0x90,0x19,0x0b,0xf9,0x6d,0x8a,0x9e,0xe6);
DEFINE_GUID(CLSID_WICIfdMetadataWriter, 0xb1ebfc28,0xc9bd,0x47a2,0x8d,0x33,0xb9,0x48,0x76,0x97,0x77,0xa7);
DEFINE_GUID(CLSID_WICExifMetadataReader, 0xd9403860,0x297f,0x4a49,0xbf,0x9b,0x77,0x89,0x81,0x50,0xa4,0x42);
DEFINE_GUID(CLSID_WICExifMetadataWriter, 0xc9a14cda,0xc339,0x460b,0x90,0x78,0xd4,0xde,0xbc,0xfa,0xbe,0x91);
DEFINE_GUID(CLSID_WICXMPStructMetadataReader, 0x01b90d9a,0x8209,0x47f7,0x9c,0x52,0xe1,0x24,0x4b,0xf5,0x0c,0xed);
DEFINE_GUID(CLSID_WICXMPStructMetadataWriter, 0x22c21f93,0x7ddb,0x411c,0x9b,0x17,0xc5,0xb7,0xbd,0x06,0x4a,0xbc);
DEFINE_GUID(CLSID_WICLSDMetadataReader, 0x41070793,0x59e4,0x479a,0xa1,0xf7,0x95,0x4a,0xdc,0x2e,0xf5,0xfc);
DEFINE_GUID(CLSID_WICLSDMetadataWriter, 0x73c037e7,0xe5d9,0x4954,0x87,0x6a,0x6d,0xa8,0x1d,0x6e,0x57,0x68);
DEFINE_GUID(CLSID_WICIMDMetadataReader, 0x7447a267,0x0015,0x42c8,0xa8,0xf1,0xfb,0x3b,0x94,0xc6,0x83,0x61);
DEFINE_GUID(CLSID_WICIMDMetadataWriter, 0x8c89071f,0x452e,0x4e95,0x96,0x82,0x9d,0x10,0x24,0x62,0x71,0x72);
DEFINE_GUID(CLSID_WICGCEMetadataReader, 0xb92e345d,0xf52d,0x41f3,0xb5,0x62,0x08,0x1b,0xc7,0x72,0xe3,0xb9);
DEFINE_GUID(CLSID_WICGCEMetadataWriter, 0xaf95dc76,0x16b2,0x47f4,0xb3,0xea,0x3c,0x31,0x79,0x66,0x93,0xe7);
DEFINE_GUID(CLSID_WICAPEMetadataReader, 0x1767b93a,0xb021,0x44ea,0x92,0x0f,0x86,0x3c,0x11,0xf4,0xf7,0x68);
DEFINE_GUID(CLSID_WICAPEMetadataWriter, 0xbd6edfca,0x2890,0x482f,0xb2,0x33,0x8d,0x73,0x39,0xa1,0xcf,0x8d);
DEFINE_GUID(CLSID_WICGifCommentMetadataReader, 0x32557d3b,0x69dc,0x4f95,0x83,0x6e,0xf5,0x97,0x2b,0x2f,0x61,0x59);
DEFINE_GUID(CLSID_WICGifCommentMetadataWriter, 0xa02797fc,0xc4ae,0x418c,0xaf,0x95,0xe6,0x37,0xc7,0xea,0xd2,0xa1);
typedef struct WICMetadataPattern {
    ULARGE_INTEGER Position;
    ULONG Length;
    BYTE *Pattern;
    BYTE *Mask;
    ULARGE_INTEGER DataOffset;
} WICMetadataPattern;
typedef struct WICMetadataHeader {
    ULARGE_INTEGER Position;
    ULONG Length;
    BYTE *Header;
    ULARGE_INTEGER DataOffset;
} WICMetadataHeader;
/*****************************************************************************
 * IWICMetadataHandlerInfo interface
 */
#ifndef __IWICMetadataHandlerInfo_INTERFACE_DEFINED__
#define __IWICMetadataHandlerInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWICMetadataHandlerInfo, 0xaba958bf, 0xc672, 0x44d1, 0x8d,0x61, 0xce,0x6d,0xf2,0xe6,0x82,0xc2);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("aba958bf-c672-44d1-8d61-ce6df2e682c2")
IWICMetadataHandlerInfo : public IWICComponentInfo
{
    virtual HRESULT STDMETHODCALLTYPE GetMetadataFormat(
        GUID *pguidMetadataFormat) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetContainerFormats(
        UINT cContainerFormats,
        GUID *pguidContainerFormats,
        UINT *pcchActual) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDeviceManufacturer(
        UINT cchDeviceManufacturer,
        WCHAR *wzDeviceManufacturer,
        UINT *pcchActual) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDeviceModels(
        UINT cchDeviceModels,
        WCHAR *wzDeviceModels,
        UINT *pcchActual) = 0;

    virtual HRESULT STDMETHODCALLTYPE DoesRequireFullStream(
        BOOL *pfRequiresFullStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE DoesSupportPadding(
        BOOL *pfSupportsPadding) = 0;

    virtual HRESULT STDMETHODCALLTYPE DoesRequireFixedSize(
        BOOL *pfFixedSize) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWICMetadataHandlerInfo, 0xaba958bf, 0xc672, 0x44d1, 0x8d,0x61, 0xce,0x6d,0xf2,0xe6,0x82,0xc2)
#endif
#else
typedef struct IWICMetadataHandlerInfoVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IWICComponentInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetComponentType)(
        IWICMetadataHandlerInfo* This,
        WICComponentType *pType);

    HRESULT (STDMETHODCALLTYPE *GetCLSID)(
        IWICMetadataHandlerInfo* This,
        CLSID *pclsid);

    HRESULT (STDMETHODCALLTYPE *GetSigningStatus)(
        IWICMetadataHandlerInfo* This,
        DWORD *pStatus);

    HRESULT (STDMETHODCALLTYPE *GetAuthor)(
        IWICMetadataHandlerInfo* This,
        UINT cchAuthor,
        WCHAR *wzAuthor,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetVendorGUID)(
        IWICMetadataHandlerInfo* This,
        GUID *pguidVendor);

    HRESULT (STDMETHODCALLTYPE *GetVersion)(
        IWICMetadataHandlerInfo* This,
        UINT cchVersion,
        WCHAR *wzVersion,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetSpecVersion)(
        IWICMetadataHandlerInfo* This,
        UINT cchSpecVersion,
        WCHAR *wzSpecVersion,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetFriendlyName)(
        IWICMetadataHandlerInfo* This,
        UINT cchFriendlyName,
        WCHAR *wzFriendlyName,
        UINT *pcchActual);

    /*** IWICMetadataHandlerInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMetadataFormat)(
        IWICMetadataHandlerInfo* This,
        GUID *pguidMetadataFormat);

    HRESULT (STDMETHODCALLTYPE *GetContainerFormats)(
        IWICMetadataHandlerInfo* This,
        UINT cContainerFormats,
        GUID *pguidContainerFormats,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetDeviceManufacturer)(
        IWICMetadataHandlerInfo* This,
        UINT cchDeviceManufacturer,
        WCHAR *wzDeviceManufacturer,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetDeviceModels)(
        IWICMetadataHandlerInfo* This,
        UINT cchDeviceModels,
        WCHAR *wzDeviceModels,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *DoesRequireFullStream)(
        IWICMetadataHandlerInfo* This,
        BOOL *pfRequiresFullStream);

    HRESULT (STDMETHODCALLTYPE *DoesSupportPadding)(
        IWICMetadataHandlerInfo* This,
        BOOL *pfSupportsPadding);

    HRESULT (STDMETHODCALLTYPE *DoesRequireFixedSize)(
        IWICMetadataHandlerInfo* This,
        BOOL *pfFixedSize);

    END_INTERFACE
} IWICMetadataHandlerInfoVtbl;
interface IWICMetadataHandlerInfo {
    CONST_VTBL IWICMetadataHandlerInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWICMetadataHandlerInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWICMetadataHandlerInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWICMetadataHandlerInfo_Release(This) (This)->lpVtbl->Release(This)
/*** IWICComponentInfo methods ***/
#define IWICMetadataHandlerInfo_GetComponentType(This,pType) (This)->lpVtbl->GetComponentType(This,pType)
#define IWICMetadataHandlerInfo_GetCLSID(This,pclsid) (This)->lpVtbl->GetCLSID(This,pclsid)
#define IWICMetadataHandlerInfo_GetSigningStatus(This,pStatus) (This)->lpVtbl->GetSigningStatus(This,pStatus)
#define IWICMetadataHandlerInfo_GetAuthor(This,cchAuthor,wzAuthor,pcchActual) (This)->lpVtbl->GetAuthor(This,cchAuthor,wzAuthor,pcchActual)
#define IWICMetadataHandlerInfo_GetVendorGUID(This,pguidVendor) (This)->lpVtbl->GetVendorGUID(This,pguidVendor)
#define IWICMetadataHandlerInfo_GetVersion(This,cchVersion,wzVersion,pcchActual) (This)->lpVtbl->GetVersion(This,cchVersion,wzVersion,pcchActual)
#define IWICMetadataHandlerInfo_GetSpecVersion(This,cchSpecVersion,wzSpecVersion,pcchActual) (This)->lpVtbl->GetSpecVersion(This,cchSpecVersion,wzSpecVersion,pcchActual)
#define IWICMetadataHandlerInfo_GetFriendlyName(This,cchFriendlyName,wzFriendlyName,pcchActual) (This)->lpVtbl->GetFriendlyName(This,cchFriendlyName,wzFriendlyName,pcchActual)
/*** IWICMetadataHandlerInfo methods ***/
#define IWICMetadataHandlerInfo_GetMetadataFormat(This,pguidMetadataFormat) (This)->lpVtbl->GetMetadataFormat(This,pguidMetadataFormat)
#define IWICMetadataHandlerInfo_GetContainerFormats(This,cContainerFormats,pguidContainerFormats,pcchActual) (This)->lpVtbl->GetContainerFormats(This,cContainerFormats,pguidContainerFormats,pcchActual)
#define IWICMetadataHandlerInfo_GetDeviceManufacturer(This,cchDeviceManufacturer,wzDeviceManufacturer,pcchActual) (This)->lpVtbl->GetDeviceManufacturer(This,cchDeviceManufacturer,wzDeviceManufacturer,pcchActual)
#define IWICMetadataHandlerInfo_GetDeviceModels(This,cchDeviceModels,wzDeviceModels,pcchActual) (This)->lpVtbl->GetDeviceModels(This,cchDeviceModels,wzDeviceModels,pcchActual)
#define IWICMetadataHandlerInfo_DoesRequireFullStream(This,pfRequiresFullStream) (This)->lpVtbl->DoesRequireFullStream(This,pfRequiresFullStream)
#define IWICMetadataHandlerInfo_DoesSupportPadding(This,pfSupportsPadding) (This)->lpVtbl->DoesSupportPadding(This,pfSupportsPadding)
#define IWICMetadataHandlerInfo_DoesRequireFixedSize(This,pfFixedSize) (This)->lpVtbl->DoesRequireFixedSize(This,pfFixedSize)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_QueryInterface(IWICMetadataHandlerInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWICMetadataHandlerInfo_AddRef(IWICMetadataHandlerInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWICMetadataHandlerInfo_Release(IWICMetadataHandlerInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** IWICComponentInfo methods ***/
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_GetComponentType(IWICMetadataHandlerInfo* This,WICComponentType *pType) {
    return This->lpVtbl->GetComponentType(This,pType);
}
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_GetCLSID(IWICMetadataHandlerInfo* This,CLSID *pclsid) {
    return This->lpVtbl->GetCLSID(This,pclsid);
}
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_GetSigningStatus(IWICMetadataHandlerInfo* This,DWORD *pStatus) {
    return This->lpVtbl->GetSigningStatus(This,pStatus);
}
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_GetAuthor(IWICMetadataHandlerInfo* This,UINT cchAuthor,WCHAR *wzAuthor,UINT *pcchActual) {
    return This->lpVtbl->GetAuthor(This,cchAuthor,wzAuthor,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_GetVendorGUID(IWICMetadataHandlerInfo* This,GUID *pguidVendor) {
    return This->lpVtbl->GetVendorGUID(This,pguidVendor);
}
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_GetVersion(IWICMetadataHandlerInfo* This,UINT cchVersion,WCHAR *wzVersion,UINT *pcchActual) {
    return This->lpVtbl->GetVersion(This,cchVersion,wzVersion,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_GetSpecVersion(IWICMetadataHandlerInfo* This,UINT cchSpecVersion,WCHAR *wzSpecVersion,UINT *pcchActual) {
    return This->lpVtbl->GetSpecVersion(This,cchSpecVersion,wzSpecVersion,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_GetFriendlyName(IWICMetadataHandlerInfo* This,UINT cchFriendlyName,WCHAR *wzFriendlyName,UINT *pcchActual) {
    return This->lpVtbl->GetFriendlyName(This,cchFriendlyName,wzFriendlyName,pcchActual);
}
/*** IWICMetadataHandlerInfo methods ***/
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_GetMetadataFormat(IWICMetadataHandlerInfo* This,GUID *pguidMetadataFormat) {
    return This->lpVtbl->GetMetadataFormat(This,pguidMetadataFormat);
}
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_GetContainerFormats(IWICMetadataHandlerInfo* This,UINT cContainerFormats,GUID *pguidContainerFormats,UINT *pcchActual) {
    return This->lpVtbl->GetContainerFormats(This,cContainerFormats,pguidContainerFormats,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_GetDeviceManufacturer(IWICMetadataHandlerInfo* This,UINT cchDeviceManufacturer,WCHAR *wzDeviceManufacturer,UINT *pcchActual) {
    return This->lpVtbl->GetDeviceManufacturer(This,cchDeviceManufacturer,wzDeviceManufacturer,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_GetDeviceModels(IWICMetadataHandlerInfo* This,UINT cchDeviceModels,WCHAR *wzDeviceModels,UINT *pcchActual) {
    return This->lpVtbl->GetDeviceModels(This,cchDeviceModels,wzDeviceModels,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_DoesRequireFullStream(IWICMetadataHandlerInfo* This,BOOL *pfRequiresFullStream) {
    return This->lpVtbl->DoesRequireFullStream(This,pfRequiresFullStream);
}
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_DoesSupportPadding(IWICMetadataHandlerInfo* This,BOOL *pfSupportsPadding) {
    return This->lpVtbl->DoesSupportPadding(This,pfSupportsPadding);
}
static FORCEINLINE HRESULT IWICMetadataHandlerInfo_DoesRequireFixedSize(IWICMetadataHandlerInfo* This,BOOL *pfFixedSize) {
    return This->lpVtbl->DoesRequireFixedSize(This,pfFixedSize);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWICMetadataHandlerInfo_GetMetadataFormat_Proxy(
    IWICMetadataHandlerInfo* This,
    GUID *pguidMetadataFormat);
void __RPC_STUB IWICMetadataHandlerInfo_GetMetadataFormat_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataHandlerInfo_GetContainerFormats_Proxy(
    IWICMetadataHandlerInfo* This,
    UINT cContainerFormats,
    GUID *pguidContainerFormats,
    UINT *pcchActual);
void __RPC_STUB IWICMetadataHandlerInfo_GetContainerFormats_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataHandlerInfo_GetDeviceManufacturer_Proxy(
    IWICMetadataHandlerInfo* This,
    UINT cchDeviceManufacturer,
    WCHAR *wzDeviceManufacturer,
    UINT *pcchActual);
void __RPC_STUB IWICMetadataHandlerInfo_GetDeviceManufacturer_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataHandlerInfo_GetDeviceModels_Proxy(
    IWICMetadataHandlerInfo* This,
    UINT cchDeviceModels,
    WCHAR *wzDeviceModels,
    UINT *pcchActual);
void __RPC_STUB IWICMetadataHandlerInfo_GetDeviceModels_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataHandlerInfo_DoesRequireFullStream_Proxy(
    IWICMetadataHandlerInfo* This,
    BOOL *pfRequiresFullStream);
void __RPC_STUB IWICMetadataHandlerInfo_DoesRequireFullStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataHandlerInfo_DoesSupportPadding_Proxy(
    IWICMetadataHandlerInfo* This,
    BOOL *pfSupportsPadding);
void __RPC_STUB IWICMetadataHandlerInfo_DoesSupportPadding_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataHandlerInfo_DoesRequireFixedSize_Proxy(
    IWICMetadataHandlerInfo* This,
    BOOL *pfFixedSize);
void __RPC_STUB IWICMetadataHandlerInfo_DoesRequireFixedSize_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWICMetadataHandlerInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWICMetadataReader interface
 */
#ifndef __IWICMetadataReader_INTERFACE_DEFINED__
#define __IWICMetadataReader_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWICMetadataReader, 0x9204fe99, 0xd8fc, 0x4fd5, 0xa0,0x01, 0x95,0x36,0xb0,0x67,0xa8,0x99);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9204fe99-d8fc-4fd5-a001-9536b067a899")
IWICMetadataReader : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetMetadataFormat(
        GUID *pguidMetadataFormat) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMetadataHandlerInfo(
        IWICMetadataHandlerInfo **ppIHandler) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCount(
        UINT *pcCount) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetValueByIndex(
        UINT nIndex,
        PROPVARIANT *pvarSchema,
        PROPVARIANT *pvarId,
        PROPVARIANT *pvarValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetValue(
        const PROPVARIANT *pvarSchema,
        const PROPVARIANT *pvarId,
        PROPVARIANT *pvarValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEnumerator(
        IWICEnumMetadataItem **ppIEnumMetadata) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWICMetadataReader, 0x9204fe99, 0xd8fc, 0x4fd5, 0xa0,0x01, 0x95,0x36,0xb0,0x67,0xa8,0x99)
#endif
#else
typedef struct IWICMetadataReaderVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IWICMetadataReader methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMetadataFormat)(
        IWICMetadataReader* This,
        GUID *pguidMetadataFormat);

    HRESULT (STDMETHODCALLTYPE *GetMetadataHandlerInfo)(
        IWICMetadataReader* This,
        IWICMetadataHandlerInfo **ppIHandler);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        IWICMetadataReader* This,
        UINT *pcCount);

    HRESULT (STDMETHODCALLTYPE *GetValueByIndex)(
        IWICMetadataReader* This,
        UINT nIndex,
        PROPVARIANT *pvarSchema,
        PROPVARIANT *pvarId,
        PROPVARIANT *pvarValue);

    HRESULT (STDMETHODCALLTYPE *GetValue)(
        IWICMetadataReader* This,
        const PROPVARIANT *pvarSchema,
        const PROPVARIANT *pvarId,
        PROPVARIANT *pvarValue);

    HRESULT (STDMETHODCALLTYPE *GetEnumerator)(
        IWICMetadataReader* This,
        IWICEnumMetadataItem **ppIEnumMetadata);

    END_INTERFACE
} IWICMetadataReaderVtbl;
interface IWICMetadataReader {
    CONST_VTBL IWICMetadataReaderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWICMetadataReader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWICMetadataReader_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWICMetadataReader_Release(This) (This)->lpVtbl->Release(This)
/*** IWICMetadataReader methods ***/
#define IWICMetadataReader_GetMetadataFormat(This,pguidMetadataFormat) (This)->lpVtbl->GetMetadataFormat(This,pguidMetadataFormat)
#define IWICMetadataReader_GetMetadataHandlerInfo(This,ppIHandler) (This)->lpVtbl->GetMetadataHandlerInfo(This,ppIHandler)
#define IWICMetadataReader_GetCount(This,pcCount) (This)->lpVtbl->GetCount(This,pcCount)
#define IWICMetadataReader_GetValueByIndex(This,nIndex,pvarSchema,pvarId,pvarValue) (This)->lpVtbl->GetValueByIndex(This,nIndex,pvarSchema,pvarId,pvarValue)
#define IWICMetadataReader_GetValue(This,pvarSchema,pvarId,pvarValue) (This)->lpVtbl->GetValue(This,pvarSchema,pvarId,pvarValue)
#define IWICMetadataReader_GetEnumerator(This,ppIEnumMetadata) (This)->lpVtbl->GetEnumerator(This,ppIEnumMetadata)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWICMetadataReader_QueryInterface(IWICMetadataReader* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWICMetadataReader_AddRef(IWICMetadataReader* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWICMetadataReader_Release(IWICMetadataReader* This) {
    return This->lpVtbl->Release(This);
}
/*** IWICMetadataReader methods ***/
static FORCEINLINE HRESULT IWICMetadataReader_GetMetadataFormat(IWICMetadataReader* This,GUID *pguidMetadataFormat) {
    return This->lpVtbl->GetMetadataFormat(This,pguidMetadataFormat);
}
static FORCEINLINE HRESULT IWICMetadataReader_GetMetadataHandlerInfo(IWICMetadataReader* This,IWICMetadataHandlerInfo **ppIHandler) {
    return This->lpVtbl->GetMetadataHandlerInfo(This,ppIHandler);
}
static FORCEINLINE HRESULT IWICMetadataReader_GetCount(IWICMetadataReader* This,UINT *pcCount) {
    return This->lpVtbl->GetCount(This,pcCount);
}
static FORCEINLINE HRESULT IWICMetadataReader_GetValueByIndex(IWICMetadataReader* This,UINT nIndex,PROPVARIANT *pvarSchema,PROPVARIANT *pvarId,PROPVARIANT *pvarValue) {
    return This->lpVtbl->GetValueByIndex(This,nIndex,pvarSchema,pvarId,pvarValue);
}
static FORCEINLINE HRESULT IWICMetadataReader_GetValue(IWICMetadataReader* This,const PROPVARIANT *pvarSchema,const PROPVARIANT *pvarId,PROPVARIANT *pvarValue) {
    return This->lpVtbl->GetValue(This,pvarSchema,pvarId,pvarValue);
}
static FORCEINLINE HRESULT IWICMetadataReader_GetEnumerator(IWICMetadataReader* This,IWICEnumMetadataItem **ppIEnumMetadata) {
    return This->lpVtbl->GetEnumerator(This,ppIEnumMetadata);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWICMetadataReader_GetMetadataFormat_Proxy(
    IWICMetadataReader* This,
    GUID *pguidMetadataFormat);
void __RPC_STUB IWICMetadataReader_GetMetadataFormat_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataReader_GetMetadataHandlerInfo_Proxy(
    IWICMetadataReader* This,
    IWICMetadataHandlerInfo **ppIHandler);
void __RPC_STUB IWICMetadataReader_GetMetadataHandlerInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataReader_GetCount_Proxy(
    IWICMetadataReader* This,
    UINT *pcCount);
void __RPC_STUB IWICMetadataReader_GetCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataReader_GetValueByIndex_Proxy(
    IWICMetadataReader* This,
    UINT nIndex,
    PROPVARIANT *pvarSchema,
    PROPVARIANT *pvarId,
    PROPVARIANT *pvarValue);
void __RPC_STUB IWICMetadataReader_GetValueByIndex_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataReader_GetValue_Proxy(
    IWICMetadataReader* This,
    const PROPVARIANT *pvarSchema,
    const PROPVARIANT *pvarId,
    PROPVARIANT *pvarValue);
void __RPC_STUB IWICMetadataReader_GetValue_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataReader_GetEnumerator_Proxy(
    IWICMetadataReader* This,
    IWICEnumMetadataItem **ppIEnumMetadata);
void __RPC_STUB IWICMetadataReader_GetEnumerator_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWICMetadataReader_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWICMetadataReaderInfo interface
 */
#ifndef __IWICMetadataReaderInfo_INTERFACE_DEFINED__
#define __IWICMetadataReaderInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWICMetadataReaderInfo, 0xeebf1f5b, 0x07c1, 0x4447, 0xa3,0xab, 0x22,0xac,0xaf,0x78,0xa8,0x04);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("eebf1f5b-07c1-4447-a3ab-22acaf78a804")
IWICMetadataReaderInfo : public IWICMetadataHandlerInfo
{
    virtual HRESULT STDMETHODCALLTYPE GetPatterns(
        REFGUID guidContainerFormat,
        UINT cbSize,
        WICMetadataPattern *pPattern,
        UINT *pcCount,
        UINT *pcbActual) = 0;

    virtual HRESULT STDMETHODCALLTYPE MatchesPattern(
        REFGUID guidContainerFormat,
        IStream *pIStream,
        BOOL *pfMatches) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateInstance(
        IWICMetadataReader **ppIReader) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWICMetadataReaderInfo, 0xeebf1f5b, 0x07c1, 0x4447, 0xa3,0xab, 0x22,0xac,0xaf,0x78,0xa8,0x04)
#endif
#else
typedef struct IWICMetadataReaderInfoVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IWICComponentInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetComponentType)(
        IWICMetadataReaderInfo* This,
        WICComponentType *pType);

    HRESULT (STDMETHODCALLTYPE *GetCLSID)(
        IWICMetadataReaderInfo* This,
        CLSID *pclsid);

    HRESULT (STDMETHODCALLTYPE *GetSigningStatus)(
        IWICMetadataReaderInfo* This,
        DWORD *pStatus);

    HRESULT (STDMETHODCALLTYPE *GetAuthor)(
        IWICMetadataReaderInfo* This,
        UINT cchAuthor,
        WCHAR *wzAuthor,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetVendorGUID)(
        IWICMetadataReaderInfo* This,
        GUID *pguidVendor);

    HRESULT (STDMETHODCALLTYPE *GetVersion)(
        IWICMetadataReaderInfo* This,
        UINT cchVersion,
        WCHAR *wzVersion,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetSpecVersion)(
        IWICMetadataReaderInfo* This,
        UINT cchSpecVersion,
        WCHAR *wzSpecVersion,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetFriendlyName)(
        IWICMetadataReaderInfo* This,
        UINT cchFriendlyName,
        WCHAR *wzFriendlyName,
        UINT *pcchActual);

    /*** IWICMetadataHandlerInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMetadataFormat)(
        IWICMetadataReaderInfo* This,
        GUID *pguidMetadataFormat);

    HRESULT (STDMETHODCALLTYPE *GetContainerFormats)(
        IWICMetadataReaderInfo* This,
        UINT cContainerFormats,
        GUID *pguidContainerFormats,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetDeviceManufacturer)(
        IWICMetadataReaderInfo* This,
        UINT cchDeviceManufacturer,
        WCHAR *wzDeviceManufacturer,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetDeviceModels)(
        IWICMetadataReaderInfo* This,
        UINT cchDeviceModels,
        WCHAR *wzDeviceModels,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *DoesRequireFullStream)(
        IWICMetadataReaderInfo* This,
        BOOL *pfRequiresFullStream);

    HRESULT (STDMETHODCALLTYPE *DoesSupportPadding)(
        IWICMetadataReaderInfo* This,
        BOOL *pfSupportsPadding);

    HRESULT (STDMETHODCALLTYPE *DoesRequireFixedSize)(
        IWICMetadataReaderInfo* This,
        BOOL *pfFixedSize);

    /*** IWICMetadataReaderInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPatterns)(
        IWICMetadataReaderInfo* This,
        REFGUID guidContainerFormat,
        UINT cbSize,
        WICMetadataPattern *pPattern,
        UINT *pcCount,
        UINT *pcbActual);

    HRESULT (STDMETHODCALLTYPE *MatchesPattern)(
        IWICMetadataReaderInfo* This,
        REFGUID guidContainerFormat,
        IStream *pIStream,
        BOOL *pfMatches);

    HRESULT (STDMETHODCALLTYPE *CreateInstance)(
        IWICMetadataReaderInfo* This,
        IWICMetadataReader **ppIReader);

    END_INTERFACE
} IWICMetadataReaderInfoVtbl;
interface IWICMetadataReaderInfo {
    CONST_VTBL IWICMetadataReaderInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWICMetadataReaderInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWICMetadataReaderInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWICMetadataReaderInfo_Release(This) (This)->lpVtbl->Release(This)
/*** IWICComponentInfo methods ***/
#define IWICMetadataReaderInfo_GetComponentType(This,pType) (This)->lpVtbl->GetComponentType(This,pType)
#define IWICMetadataReaderInfo_GetCLSID(This,pclsid) (This)->lpVtbl->GetCLSID(This,pclsid)
#define IWICMetadataReaderInfo_GetSigningStatus(This,pStatus) (This)->lpVtbl->GetSigningStatus(This,pStatus)
#define IWICMetadataReaderInfo_GetAuthor(This,cchAuthor,wzAuthor,pcchActual) (This)->lpVtbl->GetAuthor(This,cchAuthor,wzAuthor,pcchActual)
#define IWICMetadataReaderInfo_GetVendorGUID(This,pguidVendor) (This)->lpVtbl->GetVendorGUID(This,pguidVendor)
#define IWICMetadataReaderInfo_GetVersion(This,cchVersion,wzVersion,pcchActual) (This)->lpVtbl->GetVersion(This,cchVersion,wzVersion,pcchActual)
#define IWICMetadataReaderInfo_GetSpecVersion(This,cchSpecVersion,wzSpecVersion,pcchActual) (This)->lpVtbl->GetSpecVersion(This,cchSpecVersion,wzSpecVersion,pcchActual)
#define IWICMetadataReaderInfo_GetFriendlyName(This,cchFriendlyName,wzFriendlyName,pcchActual) (This)->lpVtbl->GetFriendlyName(This,cchFriendlyName,wzFriendlyName,pcchActual)
/*** IWICMetadataHandlerInfo methods ***/
#define IWICMetadataReaderInfo_GetMetadataFormat(This,pguidMetadataFormat) (This)->lpVtbl->GetMetadataFormat(This,pguidMetadataFormat)
#define IWICMetadataReaderInfo_GetContainerFormats(This,cContainerFormats,pguidContainerFormats,pcchActual) (This)->lpVtbl->GetContainerFormats(This,cContainerFormats,pguidContainerFormats,pcchActual)
#define IWICMetadataReaderInfo_GetDeviceManufacturer(This,cchDeviceManufacturer,wzDeviceManufacturer,pcchActual) (This)->lpVtbl->GetDeviceManufacturer(This,cchDeviceManufacturer,wzDeviceManufacturer,pcchActual)
#define IWICMetadataReaderInfo_GetDeviceModels(This,cchDeviceModels,wzDeviceModels,pcchActual) (This)->lpVtbl->GetDeviceModels(This,cchDeviceModels,wzDeviceModels,pcchActual)
#define IWICMetadataReaderInfo_DoesRequireFullStream(This,pfRequiresFullStream) (This)->lpVtbl->DoesRequireFullStream(This,pfRequiresFullStream)
#define IWICMetadataReaderInfo_DoesSupportPadding(This,pfSupportsPadding) (This)->lpVtbl->DoesSupportPadding(This,pfSupportsPadding)
#define IWICMetadataReaderInfo_DoesRequireFixedSize(This,pfFixedSize) (This)->lpVtbl->DoesRequireFixedSize(This,pfFixedSize)
/*** IWICMetadataReaderInfo methods ***/
#define IWICMetadataReaderInfo_GetPatterns(This,guidContainerFormat,cbSize,pPattern,pcCount,pcbActual) (This)->lpVtbl->GetPatterns(This,guidContainerFormat,cbSize,pPattern,pcCount,pcbActual)
#define IWICMetadataReaderInfo_MatchesPattern(This,guidContainerFormat,pIStream,pfMatches) (This)->lpVtbl->MatchesPattern(This,guidContainerFormat,pIStream,pfMatches)
#define IWICMetadataReaderInfo_CreateInstance(This,ppIReader) (This)->lpVtbl->CreateInstance(This,ppIReader)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWICMetadataReaderInfo_QueryInterface(IWICMetadataReaderInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWICMetadataReaderInfo_AddRef(IWICMetadataReaderInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWICMetadataReaderInfo_Release(IWICMetadataReaderInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** IWICComponentInfo methods ***/
static FORCEINLINE HRESULT IWICMetadataReaderInfo_GetComponentType(IWICMetadataReaderInfo* This,WICComponentType *pType) {
    return This->lpVtbl->GetComponentType(This,pType);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_GetCLSID(IWICMetadataReaderInfo* This,CLSID *pclsid) {
    return This->lpVtbl->GetCLSID(This,pclsid);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_GetSigningStatus(IWICMetadataReaderInfo* This,DWORD *pStatus) {
    return This->lpVtbl->GetSigningStatus(This,pStatus);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_GetAuthor(IWICMetadataReaderInfo* This,UINT cchAuthor,WCHAR *wzAuthor,UINT *pcchActual) {
    return This->lpVtbl->GetAuthor(This,cchAuthor,wzAuthor,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_GetVendorGUID(IWICMetadataReaderInfo* This,GUID *pguidVendor) {
    return This->lpVtbl->GetVendorGUID(This,pguidVendor);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_GetVersion(IWICMetadataReaderInfo* This,UINT cchVersion,WCHAR *wzVersion,UINT *pcchActual) {
    return This->lpVtbl->GetVersion(This,cchVersion,wzVersion,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_GetSpecVersion(IWICMetadataReaderInfo* This,UINT cchSpecVersion,WCHAR *wzSpecVersion,UINT *pcchActual) {
    return This->lpVtbl->GetSpecVersion(This,cchSpecVersion,wzSpecVersion,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_GetFriendlyName(IWICMetadataReaderInfo* This,UINT cchFriendlyName,WCHAR *wzFriendlyName,UINT *pcchActual) {
    return This->lpVtbl->GetFriendlyName(This,cchFriendlyName,wzFriendlyName,pcchActual);
}
/*** IWICMetadataHandlerInfo methods ***/
static FORCEINLINE HRESULT IWICMetadataReaderInfo_GetMetadataFormat(IWICMetadataReaderInfo* This,GUID *pguidMetadataFormat) {
    return This->lpVtbl->GetMetadataFormat(This,pguidMetadataFormat);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_GetContainerFormats(IWICMetadataReaderInfo* This,UINT cContainerFormats,GUID *pguidContainerFormats,UINT *pcchActual) {
    return This->lpVtbl->GetContainerFormats(This,cContainerFormats,pguidContainerFormats,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_GetDeviceManufacturer(IWICMetadataReaderInfo* This,UINT cchDeviceManufacturer,WCHAR *wzDeviceManufacturer,UINT *pcchActual) {
    return This->lpVtbl->GetDeviceManufacturer(This,cchDeviceManufacturer,wzDeviceManufacturer,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_GetDeviceModels(IWICMetadataReaderInfo* This,UINT cchDeviceModels,WCHAR *wzDeviceModels,UINT *pcchActual) {
    return This->lpVtbl->GetDeviceModels(This,cchDeviceModels,wzDeviceModels,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_DoesRequireFullStream(IWICMetadataReaderInfo* This,BOOL *pfRequiresFullStream) {
    return This->lpVtbl->DoesRequireFullStream(This,pfRequiresFullStream);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_DoesSupportPadding(IWICMetadataReaderInfo* This,BOOL *pfSupportsPadding) {
    return This->lpVtbl->DoesSupportPadding(This,pfSupportsPadding);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_DoesRequireFixedSize(IWICMetadataReaderInfo* This,BOOL *pfFixedSize) {
    return This->lpVtbl->DoesRequireFixedSize(This,pfFixedSize);
}
/*** IWICMetadataReaderInfo methods ***/
static FORCEINLINE HRESULT IWICMetadataReaderInfo_GetPatterns(IWICMetadataReaderInfo* This,REFGUID guidContainerFormat,UINT cbSize,WICMetadataPattern *pPattern,UINT *pcCount,UINT *pcbActual) {
    return This->lpVtbl->GetPatterns(This,guidContainerFormat,cbSize,pPattern,pcCount,pcbActual);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_MatchesPattern(IWICMetadataReaderInfo* This,REFGUID guidContainerFormat,IStream *pIStream,BOOL *pfMatches) {
    return This->lpVtbl->MatchesPattern(This,guidContainerFormat,pIStream,pfMatches);
}
static FORCEINLINE HRESULT IWICMetadataReaderInfo_CreateInstance(IWICMetadataReaderInfo* This,IWICMetadataReader **ppIReader) {
    return This->lpVtbl->CreateInstance(This,ppIReader);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWICMetadataReaderInfo_MatchesPattern_Proxy(
    IWICMetadataReaderInfo* This,
    REFGUID guidContainerFormat,
    IStream *pIStream,
    BOOL *pfMatches);
void __RPC_STUB IWICMetadataReaderInfo_MatchesPattern_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataReaderInfo_CreateInstance_Proxy(
    IWICMetadataReaderInfo* This,
    IWICMetadataReader **ppIReader);
void __RPC_STUB IWICMetadataReaderInfo_CreateInstance_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWICMetadataReaderInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWICMetadataWriter interface
 */
#ifndef __IWICMetadataWriter_INTERFACE_DEFINED__
#define __IWICMetadataWriter_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWICMetadataWriter, 0xf7836e16, 0x3be0, 0x470b, 0x86,0xbb, 0x16,0x0d,0x0a,0xec,0xd7,0xde);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("f7836e16-3be0-470b-86bb-160d0aecd7de")
IWICMetadataWriter : public IWICMetadataReader
{
    virtual HRESULT STDMETHODCALLTYPE SetValue(
        const PROPVARIANT *pvarSchema,
        const PROPVARIANT *pvarId,
        const PROPVARIANT *pvarValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetValueByIndex(
        UINT nIndex,
        const PROPVARIANT *pvarSchema,
        const PROPVARIANT *pvarId,
        const PROPVARIANT *pvarValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveValue(
        const PROPVARIANT *pvarSchema,
        const PROPVARIANT *pvarId) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveValueByIndex(
        UINT nIndex) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWICMetadataWriter, 0xf7836e16, 0x3be0, 0x470b, 0x86,0xbb, 0x16,0x0d,0x0a,0xec,0xd7,0xde)
#endif
#else
typedef struct IWICMetadataWriterVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IWICMetadataReader methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMetadataFormat)(
        IWICMetadataWriter* This,
        GUID *pguidMetadataFormat);

    HRESULT (STDMETHODCALLTYPE *GetMetadataHandlerInfo)(
        IWICMetadataWriter* This,
        IWICMetadataHandlerInfo **ppIHandler);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        IWICMetadataWriter* This,
        UINT *pcCount);

    HRESULT (STDMETHODCALLTYPE *GetValueByIndex)(
        IWICMetadataWriter* This,
        UINT nIndex,
        PROPVARIANT *pvarSchema,
        PROPVARIANT *pvarId,
        PROPVARIANT *pvarValue);

    HRESULT (STDMETHODCALLTYPE *GetValue)(
        IWICMetadataWriter* This,
        const PROPVARIANT *pvarSchema,
        const PROPVARIANT *pvarId,
        PROPVARIANT *pvarValue);

    HRESULT (STDMETHODCALLTYPE *GetEnumerator)(
        IWICMetadataWriter* This,
        IWICEnumMetadataItem **ppIEnumMetadata);

    /*** IWICMetadataWriter methods ***/
    HRESULT (STDMETHODCALLTYPE *SetValue)(
        IWICMetadataWriter* This,
        const PROPVARIANT *pvarSchema,
        const PROPVARIANT *pvarId,
        const PROPVARIANT *pvarValue);

    HRESULT (STDMETHODCALLTYPE *SetValueByIndex)(
        IWICMetadataWriter* This,
        UINT nIndex,
        const PROPVARIANT *pvarSchema,
        const PROPVARIANT *pvarId,
        const PROPVARIANT *pvarValue);

    HRESULT (STDMETHODCALLTYPE *RemoveValue)(
        IWICMetadataWriter* This,
        const PROPVARIANT *pvarSchema,
        const PROPVARIANT *pvarId);

    HRESULT (STDMETHODCALLTYPE *RemoveValueByIndex)(
        IWICMetadataWriter* This,
        UINT nIndex);

    END_INTERFACE
} IWICMetadataWriterVtbl;
interface IWICMetadataWriter {
    CONST_VTBL IWICMetadataWriterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWICMetadataWriter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWICMetadataWriter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWICMetadataWriter_Release(This) (This)->lpVtbl->Release(This)
/*** IWICMetadataReader methods ***/
#define IWICMetadataWriter_GetMetadataFormat(This,pguidMetadataFormat) (This)->lpVtbl->GetMetadataFormat(This,pguidMetadataFormat)
#define IWICMetadataWriter_GetMetadataHandlerInfo(This,ppIHandler) (This)->lpVtbl->GetMetadataHandlerInfo(This,ppIHandler)
#define IWICMetadataWriter_GetCount(This,pcCount) (This)->lpVtbl->GetCount(This,pcCount)
#define IWICMetadataWriter_GetValueByIndex(This,nIndex,pvarSchema,pvarId,pvarValue) (This)->lpVtbl->GetValueByIndex(This,nIndex,pvarSchema,pvarId,pvarValue)
#define IWICMetadataWriter_GetValue(This,pvarSchema,pvarId,pvarValue) (This)->lpVtbl->GetValue(This,pvarSchema,pvarId,pvarValue)
#define IWICMetadataWriter_GetEnumerator(This,ppIEnumMetadata) (This)->lpVtbl->GetEnumerator(This,ppIEnumMetadata)
/*** IWICMetadataWriter methods ***/
#define IWICMetadataWriter_SetValue(This,pvarSchema,pvarId,pvarValue) (This)->lpVtbl->SetValue(This,pvarSchema,pvarId,pvarValue)
#define IWICMetadataWriter_SetValueByIndex(This,nIndex,pvarSchema,pvarId,pvarValue) (This)->lpVtbl->SetValueByIndex(This,nIndex,pvarSchema,pvarId,pvarValue)
#define IWICMetadataWriter_RemoveValue(This,pvarSchema,pvarId) (This)->lpVtbl->RemoveValue(This,pvarSchema,pvarId)
#define IWICMetadataWriter_RemoveValueByIndex(This,nIndex) (This)->lpVtbl->RemoveValueByIndex(This,nIndex)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWICMetadataWriter_QueryInterface(IWICMetadataWriter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWICMetadataWriter_AddRef(IWICMetadataWriter* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWICMetadataWriter_Release(IWICMetadataWriter* This) {
    return This->lpVtbl->Release(This);
}
/*** IWICMetadataReader methods ***/
static FORCEINLINE HRESULT IWICMetadataWriter_GetMetadataFormat(IWICMetadataWriter* This,GUID *pguidMetadataFormat) {
    return This->lpVtbl->GetMetadataFormat(This,pguidMetadataFormat);
}
static FORCEINLINE HRESULT IWICMetadataWriter_GetMetadataHandlerInfo(IWICMetadataWriter* This,IWICMetadataHandlerInfo **ppIHandler) {
    return This->lpVtbl->GetMetadataHandlerInfo(This,ppIHandler);
}
static FORCEINLINE HRESULT IWICMetadataWriter_GetCount(IWICMetadataWriter* This,UINT *pcCount) {
    return This->lpVtbl->GetCount(This,pcCount);
}
static FORCEINLINE HRESULT IWICMetadataWriter_GetValueByIndex(IWICMetadataWriter* This,UINT nIndex,PROPVARIANT *pvarSchema,PROPVARIANT *pvarId,PROPVARIANT *pvarValue) {
    return This->lpVtbl->GetValueByIndex(This,nIndex,pvarSchema,pvarId,pvarValue);
}
static FORCEINLINE HRESULT IWICMetadataWriter_GetValue(IWICMetadataWriter* This,const PROPVARIANT *pvarSchema,const PROPVARIANT *pvarId,PROPVARIANT *pvarValue) {
    return This->lpVtbl->GetValue(This,pvarSchema,pvarId,pvarValue);
}
static FORCEINLINE HRESULT IWICMetadataWriter_GetEnumerator(IWICMetadataWriter* This,IWICEnumMetadataItem **ppIEnumMetadata) {
    return This->lpVtbl->GetEnumerator(This,ppIEnumMetadata);
}
/*** IWICMetadataWriter methods ***/
static FORCEINLINE HRESULT IWICMetadataWriter_SetValue(IWICMetadataWriter* This,const PROPVARIANT *pvarSchema,const PROPVARIANT *pvarId,const PROPVARIANT *pvarValue) {
    return This->lpVtbl->SetValue(This,pvarSchema,pvarId,pvarValue);
}
static FORCEINLINE HRESULT IWICMetadataWriter_SetValueByIndex(IWICMetadataWriter* This,UINT nIndex,const PROPVARIANT *pvarSchema,const PROPVARIANT *pvarId,const PROPVARIANT *pvarValue) {
    return This->lpVtbl->SetValueByIndex(This,nIndex,pvarSchema,pvarId,pvarValue);
}
static FORCEINLINE HRESULT IWICMetadataWriter_RemoveValue(IWICMetadataWriter* This,const PROPVARIANT *pvarSchema,const PROPVARIANT *pvarId) {
    return This->lpVtbl->RemoveValue(This,pvarSchema,pvarId);
}
static FORCEINLINE HRESULT IWICMetadataWriter_RemoveValueByIndex(IWICMetadataWriter* This,UINT nIndex) {
    return This->lpVtbl->RemoveValueByIndex(This,nIndex);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWICMetadataWriter_SetValue_Proxy(
    IWICMetadataWriter* This,
    const PROPVARIANT *pvarSchema,
    const PROPVARIANT *pvarId,
    const PROPVARIANT *pvarValue);
void __RPC_STUB IWICMetadataWriter_SetValue_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataWriter_SetValueByIndex_Proxy(
    IWICMetadataWriter* This,
    UINT nIndex,
    const PROPVARIANT *pvarSchema,
    const PROPVARIANT *pvarId,
    const PROPVARIANT *pvarValue);
void __RPC_STUB IWICMetadataWriter_SetValueByIndex_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataWriter_RemoveValue_Proxy(
    IWICMetadataWriter* This,
    const PROPVARIANT *pvarSchema,
    const PROPVARIANT *pvarId);
void __RPC_STUB IWICMetadataWriter_RemoveValue_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataWriter_RemoveValueByIndex_Proxy(
    IWICMetadataWriter* This,
    UINT nIndex);
void __RPC_STUB IWICMetadataWriter_RemoveValueByIndex_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWICMetadataWriter_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWICMetadataWriterInfo interface
 */
#ifndef __IWICMetadataWriterInfo_INTERFACE_DEFINED__
#define __IWICMetadataWriterInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWICMetadataWriterInfo, 0xb22e3fba, 0x3925, 0x4323, 0xb5,0xc1, 0x9e,0xbf,0xc4,0x30,0xf2,0x36);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b22e3fba-3925-4323-b5c1-9ebfc430f236")
IWICMetadataWriterInfo : public IWICMetadataHandlerInfo
{
    virtual HRESULT STDMETHODCALLTYPE GetHeader(
        REFGUID guidContainerFormat,
        UINT cbSize,
        WICMetadataHeader *pHeader,
        UINT *pcbActual) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateInstance(
        IWICMetadataWriter **ppIWriter) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWICMetadataWriterInfo, 0xb22e3fba, 0x3925, 0x4323, 0xb5,0xc1, 0x9e,0xbf,0xc4,0x30,0xf2,0x36)
#endif
#else
typedef struct IWICMetadataWriterInfoVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IWICComponentInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetComponentType)(
        IWICMetadataWriterInfo* This,
        WICComponentType *pType);

    HRESULT (STDMETHODCALLTYPE *GetCLSID)(
        IWICMetadataWriterInfo* This,
        CLSID *pclsid);

    HRESULT (STDMETHODCALLTYPE *GetSigningStatus)(
        IWICMetadataWriterInfo* This,
        DWORD *pStatus);

    HRESULT (STDMETHODCALLTYPE *GetAuthor)(
        IWICMetadataWriterInfo* This,
        UINT cchAuthor,
        WCHAR *wzAuthor,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetVendorGUID)(
        IWICMetadataWriterInfo* This,
        GUID *pguidVendor);

    HRESULT (STDMETHODCALLTYPE *GetVersion)(
        IWICMetadataWriterInfo* This,
        UINT cchVersion,
        WCHAR *wzVersion,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetSpecVersion)(
        IWICMetadataWriterInfo* This,
        UINT cchSpecVersion,
        WCHAR *wzSpecVersion,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetFriendlyName)(
        IWICMetadataWriterInfo* This,
        UINT cchFriendlyName,
        WCHAR *wzFriendlyName,
        UINT *pcchActual);

    /*** IWICMetadataHandlerInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMetadataFormat)(
        IWICMetadataWriterInfo* This,
        GUID *pguidMetadataFormat);

    HRESULT (STDMETHODCALLTYPE *GetContainerFormats)(
        IWICMetadataWriterInfo* This,
        UINT cContainerFormats,
        GUID *pguidContainerFormats,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetDeviceManufacturer)(
        IWICMetadataWriterInfo* This,
        UINT cchDeviceManufacturer,
        WCHAR *wzDeviceManufacturer,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *GetDeviceModels)(
        IWICMetadataWriterInfo* This,
        UINT cchDeviceModels,
        WCHAR *wzDeviceModels,
        UINT *pcchActual);

    HRESULT (STDMETHODCALLTYPE *DoesRequireFullStream)(
        IWICMetadataWriterInfo* This,
        BOOL *pfRequiresFullStream);

    HRESULT (STDMETHODCALLTYPE *DoesSupportPadding)(
        IWICMetadataWriterInfo* This,
        BOOL *pfSupportsPadding);

    HRESULT (STDMETHODCALLTYPE *DoesRequireFixedSize)(
        IWICMetadataWriterInfo* This,
        BOOL *pfFixedSize);

    /*** IWICMetadataWriterInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *GetHeader)(
        IWICMetadataWriterInfo* This,
        REFGUID guidContainerFormat,
        UINT cbSize,
        WICMetadataHeader *pHeader,
        UINT *pcbActual);

    HRESULT (STDMETHODCALLTYPE *CreateInstance)(
        IWICMetadataWriterInfo* This,
        IWICMetadataWriter **ppIWriter);

    END_INTERFACE
} IWICMetadataWriterInfoVtbl;
interface IWICMetadataWriterInfo {
    CONST_VTBL IWICMetadataWriterInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWICMetadataWriterInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWICMetadataWriterInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWICMetadataWriterInfo_Release(This) (This)->lpVtbl->Release(This)
/*** IWICComponentInfo methods ***/
#define IWICMetadataWriterInfo_GetComponentType(This,pType) (This)->lpVtbl->GetComponentType(This,pType)
#define IWICMetadataWriterInfo_GetCLSID(This,pclsid) (This)->lpVtbl->GetCLSID(This,pclsid)
#define IWICMetadataWriterInfo_GetSigningStatus(This,pStatus) (This)->lpVtbl->GetSigningStatus(This,pStatus)
#define IWICMetadataWriterInfo_GetAuthor(This,cchAuthor,wzAuthor,pcchActual) (This)->lpVtbl->GetAuthor(This,cchAuthor,wzAuthor,pcchActual)
#define IWICMetadataWriterInfo_GetVendorGUID(This,pguidVendor) (This)->lpVtbl->GetVendorGUID(This,pguidVendor)
#define IWICMetadataWriterInfo_GetVersion(This,cchVersion,wzVersion,pcchActual) (This)->lpVtbl->GetVersion(This,cchVersion,wzVersion,pcchActual)
#define IWICMetadataWriterInfo_GetSpecVersion(This,cchSpecVersion,wzSpecVersion,pcchActual) (This)->lpVtbl->GetSpecVersion(This,cchSpecVersion,wzSpecVersion,pcchActual)
#define IWICMetadataWriterInfo_GetFriendlyName(This,cchFriendlyName,wzFriendlyName,pcchActual) (This)->lpVtbl->GetFriendlyName(This,cchFriendlyName,wzFriendlyName,pcchActual)
/*** IWICMetadataHandlerInfo methods ***/
#define IWICMetadataWriterInfo_GetMetadataFormat(This,pguidMetadataFormat) (This)->lpVtbl->GetMetadataFormat(This,pguidMetadataFormat)
#define IWICMetadataWriterInfo_GetContainerFormats(This,cContainerFormats,pguidContainerFormats,pcchActual) (This)->lpVtbl->GetContainerFormats(This,cContainerFormats,pguidContainerFormats,pcchActual)
#define IWICMetadataWriterInfo_GetDeviceManufacturer(This,cchDeviceManufacturer,wzDeviceManufacturer,pcchActual) (This)->lpVtbl->GetDeviceManufacturer(This,cchDeviceManufacturer,wzDeviceManufacturer,pcchActual)
#define IWICMetadataWriterInfo_GetDeviceModels(This,cchDeviceModels,wzDeviceModels,pcchActual) (This)->lpVtbl->GetDeviceModels(This,cchDeviceModels,wzDeviceModels,pcchActual)
#define IWICMetadataWriterInfo_DoesRequireFullStream(This,pfRequiresFullStream) (This)->lpVtbl->DoesRequireFullStream(This,pfRequiresFullStream)
#define IWICMetadataWriterInfo_DoesSupportPadding(This,pfSupportsPadding) (This)->lpVtbl->DoesSupportPadding(This,pfSupportsPadding)
#define IWICMetadataWriterInfo_DoesRequireFixedSize(This,pfFixedSize) (This)->lpVtbl->DoesRequireFixedSize(This,pfFixedSize)
/*** IWICMetadataWriterInfo methods ***/
#define IWICMetadataWriterInfo_GetHeader(This,guidContainerFormat,cbSize,pHeader,pcbActual) (This)->lpVtbl->GetHeader(This,guidContainerFormat,cbSize,pHeader,pcbActual)
#define IWICMetadataWriterInfo_CreateInstance(This,ppIWriter) (This)->lpVtbl->CreateInstance(This,ppIWriter)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWICMetadataWriterInfo_QueryInterface(IWICMetadataWriterInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWICMetadataWriterInfo_AddRef(IWICMetadataWriterInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWICMetadataWriterInfo_Release(IWICMetadataWriterInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** IWICComponentInfo methods ***/
static FORCEINLINE HRESULT IWICMetadataWriterInfo_GetComponentType(IWICMetadataWriterInfo* This,WICComponentType *pType) {
    return This->lpVtbl->GetComponentType(This,pType);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_GetCLSID(IWICMetadataWriterInfo* This,CLSID *pclsid) {
    return This->lpVtbl->GetCLSID(This,pclsid);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_GetSigningStatus(IWICMetadataWriterInfo* This,DWORD *pStatus) {
    return This->lpVtbl->GetSigningStatus(This,pStatus);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_GetAuthor(IWICMetadataWriterInfo* This,UINT cchAuthor,WCHAR *wzAuthor,UINT *pcchActual) {
    return This->lpVtbl->GetAuthor(This,cchAuthor,wzAuthor,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_GetVendorGUID(IWICMetadataWriterInfo* This,GUID *pguidVendor) {
    return This->lpVtbl->GetVendorGUID(This,pguidVendor);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_GetVersion(IWICMetadataWriterInfo* This,UINT cchVersion,WCHAR *wzVersion,UINT *pcchActual) {
    return This->lpVtbl->GetVersion(This,cchVersion,wzVersion,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_GetSpecVersion(IWICMetadataWriterInfo* This,UINT cchSpecVersion,WCHAR *wzSpecVersion,UINT *pcchActual) {
    return This->lpVtbl->GetSpecVersion(This,cchSpecVersion,wzSpecVersion,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_GetFriendlyName(IWICMetadataWriterInfo* This,UINT cchFriendlyName,WCHAR *wzFriendlyName,UINT *pcchActual) {
    return This->lpVtbl->GetFriendlyName(This,cchFriendlyName,wzFriendlyName,pcchActual);
}
/*** IWICMetadataHandlerInfo methods ***/
static FORCEINLINE HRESULT IWICMetadataWriterInfo_GetMetadataFormat(IWICMetadataWriterInfo* This,GUID *pguidMetadataFormat) {
    return This->lpVtbl->GetMetadataFormat(This,pguidMetadataFormat);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_GetContainerFormats(IWICMetadataWriterInfo* This,UINT cContainerFormats,GUID *pguidContainerFormats,UINT *pcchActual) {
    return This->lpVtbl->GetContainerFormats(This,cContainerFormats,pguidContainerFormats,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_GetDeviceManufacturer(IWICMetadataWriterInfo* This,UINT cchDeviceManufacturer,WCHAR *wzDeviceManufacturer,UINT *pcchActual) {
    return This->lpVtbl->GetDeviceManufacturer(This,cchDeviceManufacturer,wzDeviceManufacturer,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_GetDeviceModels(IWICMetadataWriterInfo* This,UINT cchDeviceModels,WCHAR *wzDeviceModels,UINT *pcchActual) {
    return This->lpVtbl->GetDeviceModels(This,cchDeviceModels,wzDeviceModels,pcchActual);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_DoesRequireFullStream(IWICMetadataWriterInfo* This,BOOL *pfRequiresFullStream) {
    return This->lpVtbl->DoesRequireFullStream(This,pfRequiresFullStream);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_DoesSupportPadding(IWICMetadataWriterInfo* This,BOOL *pfSupportsPadding) {
    return This->lpVtbl->DoesSupportPadding(This,pfSupportsPadding);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_DoesRequireFixedSize(IWICMetadataWriterInfo* This,BOOL *pfFixedSize) {
    return This->lpVtbl->DoesRequireFixedSize(This,pfFixedSize);
}
/*** IWICMetadataWriterInfo methods ***/
static FORCEINLINE HRESULT IWICMetadataWriterInfo_GetHeader(IWICMetadataWriterInfo* This,REFGUID guidContainerFormat,UINT cbSize,WICMetadataHeader *pHeader,UINT *pcbActual) {
    return This->lpVtbl->GetHeader(This,guidContainerFormat,cbSize,pHeader,pcbActual);
}
static FORCEINLINE HRESULT IWICMetadataWriterInfo_CreateInstance(IWICMetadataWriterInfo* This,IWICMetadataWriter **ppIWriter) {
    return This->lpVtbl->CreateInstance(This,ppIWriter);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWICMetadataWriterInfo_CreateInstance_Proxy(
    IWICMetadataWriterInfo* This,
    IWICMetadataWriter **ppIWriter);
void __RPC_STUB IWICMetadataWriterInfo_CreateInstance_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWICMetadataWriterInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWICMetadataBlockReader interface
 */
#ifndef __IWICMetadataBlockReader_INTERFACE_DEFINED__
#define __IWICMetadataBlockReader_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWICMetadataBlockReader, 0xfeaa2a8d, 0xb3f3, 0x43e4, 0xb2,0x5c, 0xd1,0xde,0x99,0x0a,0x1a,0xe1);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("feaa2a8d-b3f3-43e4-b25c-d1de990a1ae1")
IWICMetadataBlockReader : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetContainerFormat(
        GUID *pguidContainerFormat) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCount(
        UINT *pcCount) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetReaderByIndex(
        UINT nIndex,
        IWICMetadataReader **ppIMetadataReader) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEnumerator(
        IEnumUnknown **ppIEnumMetadata) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWICMetadataBlockReader, 0xfeaa2a8d, 0xb3f3, 0x43e4, 0xb2,0x5c, 0xd1,0xde,0x99,0x0a,0x1a,0xe1)
#endif
#else
typedef struct IWICMetadataBlockReaderVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IWICMetadataBlockReader methods ***/
    HRESULT (STDMETHODCALLTYPE *GetContainerFormat)(
        IWICMetadataBlockReader* This,
        GUID *pguidContainerFormat);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        IWICMetadataBlockReader* This,
        UINT *pcCount);

    HRESULT (STDMETHODCALLTYPE *GetReaderByIndex)(
        IWICMetadataBlockReader* This,
        UINT nIndex,
        IWICMetadataReader **ppIMetadataReader);

    HRESULT (STDMETHODCALLTYPE *GetEnumerator)(
        IWICMetadataBlockReader* This,
        IEnumUnknown **ppIEnumMetadata);

    END_INTERFACE
} IWICMetadataBlockReaderVtbl;
interface IWICMetadataBlockReader {
    CONST_VTBL IWICMetadataBlockReaderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWICMetadataBlockReader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWICMetadataBlockReader_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWICMetadataBlockReader_Release(This) (This)->lpVtbl->Release(This)
/*** IWICMetadataBlockReader methods ***/
#define IWICMetadataBlockReader_GetContainerFormat(This,pguidContainerFormat) (This)->lpVtbl->GetContainerFormat(This,pguidContainerFormat)
#define IWICMetadataBlockReader_GetCount(This,pcCount) (This)->lpVtbl->GetCount(This,pcCount)
#define IWICMetadataBlockReader_GetReaderByIndex(This,nIndex,ppIMetadataReader) (This)->lpVtbl->GetReaderByIndex(This,nIndex,ppIMetadataReader)
#define IWICMetadataBlockReader_GetEnumerator(This,ppIEnumMetadata) (This)->lpVtbl->GetEnumerator(This,ppIEnumMetadata)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWICMetadataBlockReader_QueryInterface(IWICMetadataBlockReader* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWICMetadataBlockReader_AddRef(IWICMetadataBlockReader* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWICMetadataBlockReader_Release(IWICMetadataBlockReader* This) {
    return This->lpVtbl->Release(This);
}
/*** IWICMetadataBlockReader methods ***/
static FORCEINLINE HRESULT IWICMetadataBlockReader_GetContainerFormat(IWICMetadataBlockReader* This,GUID *pguidContainerFormat) {
    return This->lpVtbl->GetContainerFormat(This,pguidContainerFormat);
}
static FORCEINLINE HRESULT IWICMetadataBlockReader_GetCount(IWICMetadataBlockReader* This,UINT *pcCount) {
    return This->lpVtbl->GetCount(This,pcCount);
}
static FORCEINLINE HRESULT IWICMetadataBlockReader_GetReaderByIndex(IWICMetadataBlockReader* This,UINT nIndex,IWICMetadataReader **ppIMetadataReader) {
    return This->lpVtbl->GetReaderByIndex(This,nIndex,ppIMetadataReader);
}
static FORCEINLINE HRESULT IWICMetadataBlockReader_GetEnumerator(IWICMetadataBlockReader* This,IEnumUnknown **ppIEnumMetadata) {
    return This->lpVtbl->GetEnumerator(This,ppIEnumMetadata);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWICMetadataBlockReader_GetContainerFormat_Proxy(
    IWICMetadataBlockReader* This,
    GUID *pguidContainerFormat);
void __RPC_STUB IWICMetadataBlockReader_GetContainerFormat_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataBlockReader_GetCount_Proxy(
    IWICMetadataBlockReader* This,
    UINT *pcCount);
void __RPC_STUB IWICMetadataBlockReader_GetCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataBlockReader_GetReaderByIndex_Proxy(
    IWICMetadataBlockReader* This,
    UINT nIndex,
    IWICMetadataReader **ppIMetadataReader);
void __RPC_STUB IWICMetadataBlockReader_GetReaderByIndex_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataBlockReader_GetEnumerator_Proxy(
    IWICMetadataBlockReader* This,
    IEnumUnknown **ppIEnumMetadata);
void __RPC_STUB IWICMetadataBlockReader_GetEnumerator_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWICMetadataBlockReader_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWICMetadataBlockWriter interface
 */
#ifndef __IWICMetadataBlockWriter_INTERFACE_DEFINED__
#define __IWICMetadataBlockWriter_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWICMetadataBlockWriter, 0x08fb9676, 0xb444, 0x41e8, 0x8d,0xbe, 0x6a,0x53,0xa5,0x42,0xbf,0xf1);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("08fb9676-b444-41e8-8dbe-6a53a542bff1")
IWICMetadataBlockWriter : public IWICMetadataBlockReader
{
    virtual HRESULT STDMETHODCALLTYPE InitializeFromBlockReader(
        IWICMetadataBlockReader *pIMDBlockReader) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetWriterByIndex(
        UINT nIndex,
        IWICMetadataWriter **ppIMetadataWriter) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddWriter(
        IWICMetadataWriter *pIMetadataWriter) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetWriterByIndex(
        UINT nIndex,
        IWICMetadataWriter *pIMetadataWriter) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveWriterByIndex(
        UINT nIndex) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWICMetadataBlockWriter, 0x08fb9676, 0xb444, 0x41e8, 0x8d,0xbe, 0x6a,0x53,0xa5,0x42,0xbf,0xf1)
#endif
#else
typedef struct IWICMetadataBlockWriterVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IWICMetadataBlockReader methods ***/
    HRESULT (STDMETHODCALLTYPE *GetContainerFormat)(
        IWICMetadataBlockWriter* This,
        GUID *pguidContainerFormat);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        IWICMetadataBlockWriter* This,
        UINT *pcCount);

    HRESULT (STDMETHODCALLTYPE *GetReaderByIndex)(
        IWICMetadataBlockWriter* This,
        UINT nIndex,
        IWICMetadataReader **ppIMetadataReader);

    HRESULT (STDMETHODCALLTYPE *GetEnumerator)(
        IWICMetadataBlockWriter* This,
        IEnumUnknown **ppIEnumMetadata);

    /*** IWICMetadataBlockWriter methods ***/
    HRESULT (STDMETHODCALLTYPE *InitializeFromBlockReader)(
        IWICMetadataBlockWriter* This,
        IWICMetadataBlockReader *pIMDBlockReader);

    HRESULT (STDMETHODCALLTYPE *GetWriterByIndex)(
        IWICMetadataBlockWriter* This,
        UINT nIndex,
        IWICMetadataWriter **ppIMetadataWriter);

    HRESULT (STDMETHODCALLTYPE *AddWriter)(
        IWICMetadataBlockWriter* This,
        IWICMetadataWriter *pIMetadataWriter);

    HRESULT (STDMETHODCALLTYPE *SetWriterByIndex)(
        IWICMetadataBlockWriter* This,
        UINT nIndex,
        IWICMetadataWriter *pIMetadataWriter);

    HRESULT (STDMETHODCALLTYPE *RemoveWriterByIndex)(
        IWICMetadataBlockWriter* This,
        UINT nIndex);

    END_INTERFACE
} IWICMetadataBlockWriterVtbl;
interface IWICMetadataBlockWriter {
    CONST_VTBL IWICMetadataBlockWriterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWICMetadataBlockWriter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWICMetadataBlockWriter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWICMetadataBlockWriter_Release(This) (This)->lpVtbl->Release(This)
/*** IWICMetadataBlockReader methods ***/
#define IWICMetadataBlockWriter_GetContainerFormat(This,pguidContainerFormat) (This)->lpVtbl->GetContainerFormat(This,pguidContainerFormat)
#define IWICMetadataBlockWriter_GetCount(This,pcCount) (This)->lpVtbl->GetCount(This,pcCount)
#define IWICMetadataBlockWriter_GetReaderByIndex(This,nIndex,ppIMetadataReader) (This)->lpVtbl->GetReaderByIndex(This,nIndex,ppIMetadataReader)
#define IWICMetadataBlockWriter_GetEnumerator(This,ppIEnumMetadata) (This)->lpVtbl->GetEnumerator(This,ppIEnumMetadata)
/*** IWICMetadataBlockWriter methods ***/
#define IWICMetadataBlockWriter_InitializeFromBlockReader(This,pIMDBlockReader) (This)->lpVtbl->InitializeFromBlockReader(This,pIMDBlockReader)
#define IWICMetadataBlockWriter_GetWriterByIndex(This,nIndex,ppIMetadataWriter) (This)->lpVtbl->GetWriterByIndex(This,nIndex,ppIMetadataWriter)
#define IWICMetadataBlockWriter_AddWriter(This,pIMetadataWriter) (This)->lpVtbl->AddWriter(This,pIMetadataWriter)
#define IWICMetadataBlockWriter_SetWriterByIndex(This,nIndex,pIMetadataWriter) (This)->lpVtbl->SetWriterByIndex(This,nIndex,pIMetadataWriter)
#define IWICMetadataBlockWriter_RemoveWriterByIndex(This,nIndex) (This)->lpVtbl->RemoveWriterByIndex(This,nIndex)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWICMetadataBlockWriter_QueryInterface(IWICMetadataBlockWriter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWICMetadataBlockWriter_AddRef(IWICMetadataBlockWriter* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWICMetadataBlockWriter_Release(IWICMetadataBlockWriter* This) {
    return This->lpVtbl->Release(This);
}
/*** IWICMetadataBlockReader methods ***/
static FORCEINLINE HRESULT IWICMetadataBlockWriter_GetContainerFormat(IWICMetadataBlockWriter* This,GUID *pguidContainerFormat) {
    return This->lpVtbl->GetContainerFormat(This,pguidContainerFormat);
}
static FORCEINLINE HRESULT IWICMetadataBlockWriter_GetCount(IWICMetadataBlockWriter* This,UINT *pcCount) {
    return This->lpVtbl->GetCount(This,pcCount);
}
static FORCEINLINE HRESULT IWICMetadataBlockWriter_GetReaderByIndex(IWICMetadataBlockWriter* This,UINT nIndex,IWICMetadataReader **ppIMetadataReader) {
    return This->lpVtbl->GetReaderByIndex(This,nIndex,ppIMetadataReader);
}
static FORCEINLINE HRESULT IWICMetadataBlockWriter_GetEnumerator(IWICMetadataBlockWriter* This,IEnumUnknown **ppIEnumMetadata) {
    return This->lpVtbl->GetEnumerator(This,ppIEnumMetadata);
}
/*** IWICMetadataBlockWriter methods ***/
static FORCEINLINE HRESULT IWICMetadataBlockWriter_InitializeFromBlockReader(IWICMetadataBlockWriter* This,IWICMetadataBlockReader *pIMDBlockReader) {
    return This->lpVtbl->InitializeFromBlockReader(This,pIMDBlockReader);
}
static FORCEINLINE HRESULT IWICMetadataBlockWriter_GetWriterByIndex(IWICMetadataBlockWriter* This,UINT nIndex,IWICMetadataWriter **ppIMetadataWriter) {
    return This->lpVtbl->GetWriterByIndex(This,nIndex,ppIMetadataWriter);
}
static FORCEINLINE HRESULT IWICMetadataBlockWriter_AddWriter(IWICMetadataBlockWriter* This,IWICMetadataWriter *pIMetadataWriter) {
    return This->lpVtbl->AddWriter(This,pIMetadataWriter);
}
static FORCEINLINE HRESULT IWICMetadataBlockWriter_SetWriterByIndex(IWICMetadataBlockWriter* This,UINT nIndex,IWICMetadataWriter *pIMetadataWriter) {
    return This->lpVtbl->SetWriterByIndex(This,nIndex,pIMetadataWriter);
}
static FORCEINLINE HRESULT IWICMetadataBlockWriter_RemoveWriterByIndex(IWICMetadataBlockWriter* This,UINT nIndex) {
    return This->lpVtbl->RemoveWriterByIndex(This,nIndex);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWICMetadataBlockWriter_InitializeFromBlockReader_Proxy(
    IWICMetadataBlockWriter* This,
    IWICMetadataBlockReader *pIMDBlockReader);
void __RPC_STUB IWICMetadataBlockWriter_InitializeFromBlockReader_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataBlockWriter_GetWriterByIndex_Proxy(
    IWICMetadataBlockWriter* This,
    UINT nIndex,
    IWICMetadataWriter **ppIMetadataWriter);
void __RPC_STUB IWICMetadataBlockWriter_GetWriterByIndex_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataBlockWriter_AddWriter_Proxy(
    IWICMetadataBlockWriter* This,
    IWICMetadataWriter *pIMetadataWriter);
void __RPC_STUB IWICMetadataBlockWriter_AddWriter_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataBlockWriter_SetWriterByIndex_Proxy(
    IWICMetadataBlockWriter* This,
    UINT nIndex,
    IWICMetadataWriter *pIMetadataWriter);
void __RPC_STUB IWICMetadataBlockWriter_SetWriterByIndex_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICMetadataBlockWriter_RemoveWriterByIndex_Proxy(
    IWICMetadataBlockWriter* This,
    UINT nIndex);
void __RPC_STUB IWICMetadataBlockWriter_RemoveWriterByIndex_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWICMetadataBlockWriter_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWICPersistStream interface
 */
#ifndef __IWICPersistStream_INTERFACE_DEFINED__
#define __IWICPersistStream_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWICPersistStream, 0x00675040, 0x6908, 0x45f8, 0x86,0xa3, 0x49,0xc7,0xdf,0xd6,0xd9,0xad);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00675040-6908-45f8-86a3-49c7dfd6d9ad")
IWICPersistStream : public IPersistStream
{
    virtual HRESULT STDMETHODCALLTYPE LoadEx(
        IStream *pIStream,
        const GUID *pguidPreferredVendor,
        DWORD dwPersistOptions) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveEx(
        IStream *pIStream,
        DWORD dwPersistOptions,
        BOOL fClearDirty) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWICPersistStream, 0x00675040, 0x6908, 0x45f8, 0x86,0xa3, 0x49,0xc7,0xdf,0xd6,0xd9,0xad)
#endif
#else
typedef struct IWICPersistStreamVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IWICPersistStream* This,
        CLSID *pClassID);

    /*** IPersistStream methods ***/
    HRESULT (STDMETHODCALLTYPE *IsDirty)(
        IWICPersistStream* This);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IWICPersistStream* This,
        IStream *pStm);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IWICPersistStream* This,
        IStream *pStm,
        BOOL fClearDirty);

    HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
        IWICPersistStream* This,
        ULARGE_INTEGER *pcbSize);

    /*** IWICPersistStream methods ***/
    HRESULT (STDMETHODCALLTYPE *LoadEx)(
        IWICPersistStream* This,
        IStream *pIStream,
        const GUID *pguidPreferredVendor,
        DWORD dwPersistOptions);

    HRESULT (STDMETHODCALLTYPE *SaveEx)(
        IWICPersistStream* This,
        IStream *pIStream,
        DWORD dwPersistOptions,
        BOOL fClearDirty);

    END_INTERFACE
} IWICPersistStreamVtbl;
interface IWICPersistStream {
    CONST_VTBL IWICPersistStreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWICPersistStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWICPersistStream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWICPersistStream_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IWICPersistStream_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IPersistStream methods ***/
#define IWICPersistStream_IsDirty(This) (This)->lpVtbl->IsDirty(This)
#define IWICPersistStream_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
#define IWICPersistStream_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
#define IWICPersistStream_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
/*** IWICPersistStream methods ***/
#define IWICPersistStream_LoadEx(This,pIStream,pguidPreferredVendor,dwPersistOptions) (This)->lpVtbl->LoadEx(This,pIStream,pguidPreferredVendor,dwPersistOptions)
#define IWICPersistStream_SaveEx(This,pIStream,dwPersistOptions,fClearDirty) (This)->lpVtbl->SaveEx(This,pIStream,dwPersistOptions,fClearDirty)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWICPersistStream_QueryInterface(IWICPersistStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWICPersistStream_AddRef(IWICPersistStream* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWICPersistStream_Release(IWICPersistStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IPersist methods ***/
static FORCEINLINE HRESULT IWICPersistStream_GetClassID(IWICPersistStream* This,CLSID *pClassID) {
    return This->lpVtbl->GetClassID(This,pClassID);
}
/*** IPersistStream methods ***/
static FORCEINLINE HRESULT IWICPersistStream_IsDirty(IWICPersistStream* This) {
    return This->lpVtbl->IsDirty(This);
}
static FORCEINLINE HRESULT IWICPersistStream_Load(IWICPersistStream* This,IStream *pStm) {
    return This->lpVtbl->Load(This,pStm);
}
static FORCEINLINE HRESULT IWICPersistStream_Save(IWICPersistStream* This,IStream *pStm,BOOL fClearDirty) {
    return This->lpVtbl->Save(This,pStm,fClearDirty);
}
static FORCEINLINE HRESULT IWICPersistStream_GetSizeMax(IWICPersistStream* This,ULARGE_INTEGER *pcbSize) {
    return This->lpVtbl->GetSizeMax(This,pcbSize);
}
/*** IWICPersistStream methods ***/
static FORCEINLINE HRESULT IWICPersistStream_LoadEx(IWICPersistStream* This,IStream *pIStream,const GUID *pguidPreferredVendor,DWORD dwPersistOptions) {
    return This->lpVtbl->LoadEx(This,pIStream,pguidPreferredVendor,dwPersistOptions);
}
static FORCEINLINE HRESULT IWICPersistStream_SaveEx(IWICPersistStream* This,IStream *pIStream,DWORD dwPersistOptions,BOOL fClearDirty) {
    return This->lpVtbl->SaveEx(This,pIStream,dwPersistOptions,fClearDirty);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWICPersistStream_LoadEx_Proxy(
    IWICPersistStream* This,
    IStream *pIStream,
    const GUID *pguidPreferredVendor,
    DWORD dwPersistOptions);
void __RPC_STUB IWICPersistStream_LoadEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICPersistStream_SaveEx_Proxy(
    IWICPersistStream* This,
    IStream *pIStream,
    DWORD dwPersistOptions,
    BOOL fClearDirty);
void __RPC_STUB IWICPersistStream_SaveEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWICPersistStream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IWICComponentFactory interface
 */
#ifndef __IWICComponentFactory_INTERFACE_DEFINED__
#define __IWICComponentFactory_INTERFACE_DEFINED__

DEFINE_GUID(IID_IWICComponentFactory, 0x412d0c3a, 0x9650, 0x44fa, 0xaf,0x5b, 0xdd,0x2a,0x06,0xc8,0xe8,0xfb);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("412d0c3a-9650-44fa-af5b-dd2a06c8e8fb")
IWICComponentFactory : public IWICImagingFactory
{
    virtual HRESULT STDMETHODCALLTYPE CreateMetadataReader(
        REFGUID guidMetadataFormat,
        const GUID *pguidVendor,
        DWORD dwOptions,
        IStream *pIStream,
        IWICMetadataReader **ppIReader) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateMetadataReaderFromContainer(
        REFGUID guidMetadataFormat,
        const GUID *pguidVendor,
        DWORD dwOptions,
        IStream *pIStream,
        IWICMetadataReader **ppIReader) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateMetadataWriter(
        REFGUID guidMetadataFormat,
        const GUID *pguidVendor,
        DWORD dwMetadataOptions,
        IWICMetadataWriter **ppIWriter) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateMetadataWriterFromReader(
        IWICMetadataReader *pIReader,
        const GUID *pguidVendor,
        IWICMetadataWriter **ppIWriter) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateQueryReaderFromBlockReader(
        IWICMetadataBlockReader *pIBlockReader,
        IWICMetadataQueryReader **ppIQueryReader) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateQueryWriterFromBlockWriter(
        IWICMetadataBlockWriter *pIBlockWriter,
        IWICMetadataQueryWriter **ppIQueryWriter) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateEncoderPropertyBag(
        PROPBAG2 *ppropOptions,
        UINT cCount,
        IPropertyBag2 **ppIPropertyBag) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IWICComponentFactory, 0x412d0c3a, 0x9650, 0x44fa, 0xaf,0x5b, 0xdd,0x2a,0x06,0xc8,0xe8,0xfb)
#endif
#else
typedef struct IWICComponentFactoryVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IWICImagingFactory methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDecoderFromFilename)(
        IWICComponentFactory* This,
        LPCWSTR wzFilename,
        const GUID *pguidVendor,
        DWORD dwDesiredAccess,
        WICDecodeOptions metadataOptions,
        IWICBitmapDecoder **ppIDecoder);

    HRESULT (STDMETHODCALLTYPE *CreateDecoderFromStream)(
        IWICComponentFactory* This,
        IStream *pIStream,
        const GUID *pguidVendor,
        WICDecodeOptions metadataOptions,
        IWICBitmapDecoder **ppIDecoder);

    HRESULT (STDMETHODCALLTYPE *CreateDecoderFromFileHandle)(
        IWICComponentFactory* This,
        ULONG_PTR hFile,
        const GUID *pguidVendor,
        WICDecodeOptions metadataOptions,
        IWICBitmapDecoder **ppIDecoder);

    HRESULT (STDMETHODCALLTYPE *CreateComponentInfo)(
        IWICComponentFactory* This,
        REFCLSID clsidComponent,
        IWICComponentInfo **ppIInfo);

    HRESULT (STDMETHODCALLTYPE *CreateDecoder)(
        IWICComponentFactory* This,
        REFGUID guidContainerFormat,
        const GUID *pguidVendor,
        IWICBitmapDecoder **ppIDecoder);

    HRESULT (STDMETHODCALLTYPE *CreateEncoder)(
        IWICComponentFactory* This,
        REFGUID guidContainerFormat,
        const GUID *pguidVendor,
        IWICBitmapEncoder **ppIEncoder);

    HRESULT (STDMETHODCALLTYPE *CreatePalette)(
        IWICComponentFactory* This,
        IWICPalette **ppIPalette);

    HRESULT (STDMETHODCALLTYPE *CreateFormatConverter)(
        IWICComponentFactory* This,
        IWICFormatConverter **ppIFormatConverter);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapScaler)(
        IWICComponentFactory* This,
        IWICBitmapScaler **ppIBitmapScaler);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapClipper)(
        IWICComponentFactory* This,
        IWICBitmapClipper **ppIBitmapClipper);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFlipRotator)(
        IWICComponentFactory* This,
        IWICBitmapFlipRotator **ppIBitmapFlipRotator);

    HRESULT (STDMETHODCALLTYPE *CreateStream)(
        IWICComponentFactory* This,
        IWICStream **ppIWICStream);

    HRESULT (STDMETHODCALLTYPE *CreateColorContext)(
        IWICComponentFactory* This,
        IWICColorContext **ppIWICColorContext);

    HRESULT (STDMETHODCALLTYPE *CreateColorTransformer)(
        IWICComponentFactory* This,
        IWICColorTransform **ppIWICColorTransform);

    HRESULT (STDMETHODCALLTYPE *CreateBitmap)(
        IWICComponentFactory* This,
        UINT uiWidth,
        UINT uiHeight,
        REFWICPixelFormatGUID pixelFormat,
        WICBitmapCreateCacheOption option,
        IWICBitmap **ppIBitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromSource)(
        IWICComponentFactory* This,
        IWICBitmapSource *piBitmapSource,
        WICBitmapCreateCacheOption option,
        IWICBitmap **ppIBitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromSourceRect)(
        IWICComponentFactory* This,
        IWICBitmapSource *piBitmapSource,
        UINT x,
        UINT y,
        UINT width,
        UINT height,
        IWICBitmap **ppIBitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromMemory)(
        IWICComponentFactory* This,
        UINT uiWidth,
        UINT uiHeight,
        REFWICPixelFormatGUID pixelFormat,
        UINT cbStride,
        UINT cbBufferSize,
        BYTE *pbBuffer,
        IWICBitmap **ppIBitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromHBITMAP)(
        IWICComponentFactory* This,
        HBITMAP hBitmap,
        HPALETTE hPalette,
        WICBitmapAlphaChannelOption options,
        IWICBitmap **ppIBitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromHICON)(
        IWICComponentFactory* This,
        HICON hIcon,
        IWICBitmap **ppIBitmap);

    HRESULT (STDMETHODCALLTYPE *CreateComponentEnumerator)(
        IWICComponentFactory* This,
        DWORD componentTypes,
        DWORD options,
        IEnumUnknown **ppIEnumUnknown);

    HRESULT (STDMETHODCALLTYPE *CreateFastMetadataEncoderFromDecoder)(
        IWICComponentFactory* This,
        IWICBitmapDecoder *pIDecoder,
        IWICFastMetadataEncoder **ppIFastEncoder);

    HRESULT (STDMETHODCALLTYPE *CreateFastMetadataEncoderFromFrameDecode)(
        IWICComponentFactory* This,
        IWICBitmapFrameDecode *pIFrameDecoder,
        IWICFastMetadataEncoder **ppIFastEncoder);

    HRESULT (STDMETHODCALLTYPE *CreateQueryWriter)(
        IWICComponentFactory* This,
        REFGUID guidMetadataFormat,
        const GUID *pguidVendor,
        IWICMetadataQueryWriter **ppIQueryWriter);

    HRESULT (STDMETHODCALLTYPE *CreateQueryWriterFromReader)(
        IWICComponentFactory* This,
        IWICMetadataQueryReader *pIQueryReader,
        const GUID *pguidVendor,
        IWICMetadataQueryWriter **ppIQueryWriter);

    /*** IWICComponentFactory methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateMetadataReader)(
        IWICComponentFactory* This,
        REFGUID guidMetadataFormat,
        const GUID *pguidVendor,
        DWORD dwOptions,
        IStream *pIStream,
        IWICMetadataReader **ppIReader);

    HRESULT (STDMETHODCALLTYPE *CreateMetadataReaderFromContainer)(
        IWICComponentFactory* This,
        REFGUID guidMetadataFormat,
        const GUID *pguidVendor,
        DWORD dwOptions,
        IStream *pIStream,
        IWICMetadataReader **ppIReader);

    HRESULT (STDMETHODCALLTYPE *CreateMetadataWriter)(
        IWICComponentFactory* This,
        REFGUID guidMetadataFormat,
        const GUID *pguidVendor,
        DWORD dwMetadataOptions,
        IWICMetadataWriter **ppIWriter);

    HRESULT (STDMETHODCALLTYPE *CreateMetadataWriterFromReader)(
        IWICComponentFactory* This,
        IWICMetadataReader *pIReader,
        const GUID *pguidVendor,
        IWICMetadataWriter **ppIWriter);

    HRESULT (STDMETHODCALLTYPE *CreateQueryReaderFromBlockReader)(
        IWICComponentFactory* This,
        IWICMetadataBlockReader *pIBlockReader,
        IWICMetadataQueryReader **ppIQueryReader);

    HRESULT (STDMETHODCALLTYPE *CreateQueryWriterFromBlockWriter)(
        IWICComponentFactory* This,
        IWICMetadataBlockWriter *pIBlockWriter,
        IWICMetadataQueryWriter **ppIQueryWriter);

    HRESULT (STDMETHODCALLTYPE *CreateEncoderPropertyBag)(
        IWICComponentFactory* This,
        PROPBAG2 *ppropOptions,
        UINT cCount,
        IPropertyBag2 **ppIPropertyBag);

    END_INTERFACE
} IWICComponentFactoryVtbl;
interface IWICComponentFactory {
    CONST_VTBL IWICComponentFactoryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IWICComponentFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWICComponentFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWICComponentFactory_Release(This) (This)->lpVtbl->Release(This)
/*** IWICImagingFactory methods ***/
#define IWICComponentFactory_CreateDecoderFromFilename(This,wzFilename,pguidVendor,dwDesiredAccess,metadataOptions,ppIDecoder) (This)->lpVtbl->CreateDecoderFromFilename(This,wzFilename,pguidVendor,dwDesiredAccess,metadataOptions,ppIDecoder)
#define IWICComponentFactory_CreateDecoderFromStream(This,pIStream,pguidVendor,metadataOptions,ppIDecoder) (This)->lpVtbl->CreateDecoderFromStream(This,pIStream,pguidVendor,metadataOptions,ppIDecoder)
#define IWICComponentFactory_CreateDecoderFromFileHandle(This,hFile,pguidVendor,metadataOptions,ppIDecoder) (This)->lpVtbl->CreateDecoderFromFileHandle(This,hFile,pguidVendor,metadataOptions,ppIDecoder)
#define IWICComponentFactory_CreateComponentInfo(This,clsidComponent,ppIInfo) (This)->lpVtbl->CreateComponentInfo(This,clsidComponent,ppIInfo)
#define IWICComponentFactory_CreateDecoder(This,guidContainerFormat,pguidVendor,ppIDecoder) (This)->lpVtbl->CreateDecoder(This,guidContainerFormat,pguidVendor,ppIDecoder)
#define IWICComponentFactory_CreateEncoder(This,guidContainerFormat,pguidVendor,ppIEncoder) (This)->lpVtbl->CreateEncoder(This,guidContainerFormat,pguidVendor,ppIEncoder)
#define IWICComponentFactory_CreatePalette(This,ppIPalette) (This)->lpVtbl->CreatePalette(This,ppIPalette)
#define IWICComponentFactory_CreateFormatConverter(This,ppIFormatConverter) (This)->lpVtbl->CreateFormatConverter(This,ppIFormatConverter)
#define IWICComponentFactory_CreateBitmapScaler(This,ppIBitmapScaler) (This)->lpVtbl->CreateBitmapScaler(This,ppIBitmapScaler)
#define IWICComponentFactory_CreateBitmapClipper(This,ppIBitmapClipper) (This)->lpVtbl->CreateBitmapClipper(This,ppIBitmapClipper)
#define IWICComponentFactory_CreateBitmapFlipRotator(This,ppIBitmapFlipRotator) (This)->lpVtbl->CreateBitmapFlipRotator(This,ppIBitmapFlipRotator)
#define IWICComponentFactory_CreateStream(This,ppIWICStream) (This)->lpVtbl->CreateStream(This,ppIWICStream)
#define IWICComponentFactory_CreateColorContext(This,ppIWICColorContext) (This)->lpVtbl->CreateColorContext(This,ppIWICColorContext)
#define IWICComponentFactory_CreateColorTransformer(This,ppIWICColorTransform) (This)->lpVtbl->CreateColorTransformer(This,ppIWICColorTransform)
#define IWICComponentFactory_CreateBitmap(This,uiWidth,uiHeight,pixelFormat,option,ppIBitmap) (This)->lpVtbl->CreateBitmap(This,uiWidth,uiHeight,pixelFormat,option,ppIBitmap)
#define IWICComponentFactory_CreateBitmapFromSource(This,piBitmapSource,option,ppIBitmap) (This)->lpVtbl->CreateBitmapFromSource(This,piBitmapSource,option,ppIBitmap)
#define IWICComponentFactory_CreateBitmapFromSourceRect(This,piBitmapSource,x,y,width,height,ppIBitmap) (This)->lpVtbl->CreateBitmapFromSourceRect(This,piBitmapSource,x,y,width,height,ppIBitmap)
#define IWICComponentFactory_CreateBitmapFromMemory(This,uiWidth,uiHeight,pixelFormat,cbStride,cbBufferSize,pbBuffer,ppIBitmap) (This)->lpVtbl->CreateBitmapFromMemory(This,uiWidth,uiHeight,pixelFormat,cbStride,cbBufferSize,pbBuffer,ppIBitmap)
#define IWICComponentFactory_CreateBitmapFromHBITMAP(This,hBitmap,hPalette,options,ppIBitmap) (This)->lpVtbl->CreateBitmapFromHBITMAP(This,hBitmap,hPalette,options,ppIBitmap)
#define IWICComponentFactory_CreateBitmapFromHICON(This,hIcon,ppIBitmap) (This)->lpVtbl->CreateBitmapFromHICON(This,hIcon,ppIBitmap)
#define IWICComponentFactory_CreateComponentEnumerator(This,componentTypes,options,ppIEnumUnknown) (This)->lpVtbl->CreateComponentEnumerator(This,componentTypes,options,ppIEnumUnknown)
#define IWICComponentFactory_CreateFastMetadataEncoderFromDecoder(This,pIDecoder,ppIFastEncoder) (This)->lpVtbl->CreateFastMetadataEncoderFromDecoder(This,pIDecoder,ppIFastEncoder)
#define IWICComponentFactory_CreateFastMetadataEncoderFromFrameDecode(This,pIFrameDecoder,ppIFastEncoder) (This)->lpVtbl->CreateFastMetadataEncoderFromFrameDecode(This,pIFrameDecoder,ppIFastEncoder)
#define IWICComponentFactory_CreateQueryWriter(This,guidMetadataFormat,pguidVendor,ppIQueryWriter) (This)->lpVtbl->CreateQueryWriter(This,guidMetadataFormat,pguidVendor,ppIQueryWriter)
#define IWICComponentFactory_CreateQueryWriterFromReader(This,pIQueryReader,pguidVendor,ppIQueryWriter) (This)->lpVtbl->CreateQueryWriterFromReader(This,pIQueryReader,pguidVendor,ppIQueryWriter)
/*** IWICComponentFactory methods ***/
#define IWICComponentFactory_CreateMetadataReader(This,guidMetadataFormat,pguidVendor,dwOptions,pIStream,ppIReader) (This)->lpVtbl->CreateMetadataReader(This,guidMetadataFormat,pguidVendor,dwOptions,pIStream,ppIReader)
#define IWICComponentFactory_CreateMetadataReaderFromContainer(This,guidMetadataFormat,pguidVendor,dwOptions,pIStream,ppIReader) (This)->lpVtbl->CreateMetadataReaderFromContainer(This,guidMetadataFormat,pguidVendor,dwOptions,pIStream,ppIReader)
#define IWICComponentFactory_CreateMetadataWriter(This,guidMetadataFormat,pguidVendor,dwMetadataOptions,ppIWriter) (This)->lpVtbl->CreateMetadataWriter(This,guidMetadataFormat,pguidVendor,dwMetadataOptions,ppIWriter)
#define IWICComponentFactory_CreateMetadataWriterFromReader(This,pIReader,pguidVendor,ppIWriter) (This)->lpVtbl->CreateMetadataWriterFromReader(This,pIReader,pguidVendor,ppIWriter)
#define IWICComponentFactory_CreateQueryReaderFromBlockReader(This,pIBlockReader,ppIQueryReader) (This)->lpVtbl->CreateQueryReaderFromBlockReader(This,pIBlockReader,ppIQueryReader)
#define IWICComponentFactory_CreateQueryWriterFromBlockWriter(This,pIBlockWriter,ppIQueryWriter) (This)->lpVtbl->CreateQueryWriterFromBlockWriter(This,pIBlockWriter,ppIQueryWriter)
#define IWICComponentFactory_CreateEncoderPropertyBag(This,ppropOptions,cCount,ppIPropertyBag) (This)->lpVtbl->CreateEncoderPropertyBag(This,ppropOptions,cCount,ppIPropertyBag)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IWICComponentFactory_QueryInterface(IWICComponentFactory* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IWICComponentFactory_AddRef(IWICComponentFactory* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IWICComponentFactory_Release(IWICComponentFactory* This) {
    return This->lpVtbl->Release(This);
}
/*** IWICImagingFactory methods ***/
static FORCEINLINE HRESULT IWICComponentFactory_CreateDecoderFromFilename(IWICComponentFactory* This,LPCWSTR wzFilename,const GUID *pguidVendor,DWORD dwDesiredAccess,WICDecodeOptions metadataOptions,IWICBitmapDecoder **ppIDecoder) {
    return This->lpVtbl->CreateDecoderFromFilename(This,wzFilename,pguidVendor,dwDesiredAccess,metadataOptions,ppIDecoder);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateDecoderFromStream(IWICComponentFactory* This,IStream *pIStream,const GUID *pguidVendor,WICDecodeOptions metadataOptions,IWICBitmapDecoder **ppIDecoder) {
    return This->lpVtbl->CreateDecoderFromStream(This,pIStream,pguidVendor,metadataOptions,ppIDecoder);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateDecoderFromFileHandle(IWICComponentFactory* This,ULONG_PTR hFile,const GUID *pguidVendor,WICDecodeOptions metadataOptions,IWICBitmapDecoder **ppIDecoder) {
    return This->lpVtbl->CreateDecoderFromFileHandle(This,hFile,pguidVendor,metadataOptions,ppIDecoder);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateComponentInfo(IWICComponentFactory* This,REFCLSID clsidComponent,IWICComponentInfo **ppIInfo) {
    return This->lpVtbl->CreateComponentInfo(This,clsidComponent,ppIInfo);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateDecoder(IWICComponentFactory* This,REFGUID guidContainerFormat,const GUID *pguidVendor,IWICBitmapDecoder **ppIDecoder) {
    return This->lpVtbl->CreateDecoder(This,guidContainerFormat,pguidVendor,ppIDecoder);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateEncoder(IWICComponentFactory* This,REFGUID guidContainerFormat,const GUID *pguidVendor,IWICBitmapEncoder **ppIEncoder) {
    return This->lpVtbl->CreateEncoder(This,guidContainerFormat,pguidVendor,ppIEncoder);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreatePalette(IWICComponentFactory* This,IWICPalette **ppIPalette) {
    return This->lpVtbl->CreatePalette(This,ppIPalette);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateFormatConverter(IWICComponentFactory* This,IWICFormatConverter **ppIFormatConverter) {
    return This->lpVtbl->CreateFormatConverter(This,ppIFormatConverter);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateBitmapScaler(IWICComponentFactory* This,IWICBitmapScaler **ppIBitmapScaler) {
    return This->lpVtbl->CreateBitmapScaler(This,ppIBitmapScaler);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateBitmapClipper(IWICComponentFactory* This,IWICBitmapClipper **ppIBitmapClipper) {
    return This->lpVtbl->CreateBitmapClipper(This,ppIBitmapClipper);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateBitmapFlipRotator(IWICComponentFactory* This,IWICBitmapFlipRotator **ppIBitmapFlipRotator) {
    return This->lpVtbl->CreateBitmapFlipRotator(This,ppIBitmapFlipRotator);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateStream(IWICComponentFactory* This,IWICStream **ppIWICStream) {
    return This->lpVtbl->CreateStream(This,ppIWICStream);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateColorContext(IWICComponentFactory* This,IWICColorContext **ppIWICColorContext) {
    return This->lpVtbl->CreateColorContext(This,ppIWICColorContext);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateColorTransformer(IWICComponentFactory* This,IWICColorTransform **ppIWICColorTransform) {
    return This->lpVtbl->CreateColorTransformer(This,ppIWICColorTransform);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateBitmap(IWICComponentFactory* This,UINT uiWidth,UINT uiHeight,REFWICPixelFormatGUID pixelFormat,WICBitmapCreateCacheOption option,IWICBitmap **ppIBitmap) {
    return This->lpVtbl->CreateBitmap(This,uiWidth,uiHeight,pixelFormat,option,ppIBitmap);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateBitmapFromSource(IWICComponentFactory* This,IWICBitmapSource *piBitmapSource,WICBitmapCreateCacheOption option,IWICBitmap **ppIBitmap) {
    return This->lpVtbl->CreateBitmapFromSource(This,piBitmapSource,option,ppIBitmap);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateBitmapFromSourceRect(IWICComponentFactory* This,IWICBitmapSource *piBitmapSource,UINT x,UINT y,UINT width,UINT height,IWICBitmap **ppIBitmap) {
    return This->lpVtbl->CreateBitmapFromSourceRect(This,piBitmapSource,x,y,width,height,ppIBitmap);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateBitmapFromMemory(IWICComponentFactory* This,UINT uiWidth,UINT uiHeight,REFWICPixelFormatGUID pixelFormat,UINT cbStride,UINT cbBufferSize,BYTE *pbBuffer,IWICBitmap **ppIBitmap) {
    return This->lpVtbl->CreateBitmapFromMemory(This,uiWidth,uiHeight,pixelFormat,cbStride,cbBufferSize,pbBuffer,ppIBitmap);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateBitmapFromHBITMAP(IWICComponentFactory* This,HBITMAP hBitmap,HPALETTE hPalette,WICBitmapAlphaChannelOption options,IWICBitmap **ppIBitmap) {
    return This->lpVtbl->CreateBitmapFromHBITMAP(This,hBitmap,hPalette,options,ppIBitmap);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateBitmapFromHICON(IWICComponentFactory* This,HICON hIcon,IWICBitmap **ppIBitmap) {
    return This->lpVtbl->CreateBitmapFromHICON(This,hIcon,ppIBitmap);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateComponentEnumerator(IWICComponentFactory* This,DWORD componentTypes,DWORD options,IEnumUnknown **ppIEnumUnknown) {
    return This->lpVtbl->CreateComponentEnumerator(This,componentTypes,options,ppIEnumUnknown);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateFastMetadataEncoderFromDecoder(IWICComponentFactory* This,IWICBitmapDecoder *pIDecoder,IWICFastMetadataEncoder **ppIFastEncoder) {
    return This->lpVtbl->CreateFastMetadataEncoderFromDecoder(This,pIDecoder,ppIFastEncoder);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateFastMetadataEncoderFromFrameDecode(IWICComponentFactory* This,IWICBitmapFrameDecode *pIFrameDecoder,IWICFastMetadataEncoder **ppIFastEncoder) {
    return This->lpVtbl->CreateFastMetadataEncoderFromFrameDecode(This,pIFrameDecoder,ppIFastEncoder);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateQueryWriter(IWICComponentFactory* This,REFGUID guidMetadataFormat,const GUID *pguidVendor,IWICMetadataQueryWriter **ppIQueryWriter) {
    return This->lpVtbl->CreateQueryWriter(This,guidMetadataFormat,pguidVendor,ppIQueryWriter);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateQueryWriterFromReader(IWICComponentFactory* This,IWICMetadataQueryReader *pIQueryReader,const GUID *pguidVendor,IWICMetadataQueryWriter **ppIQueryWriter) {
    return This->lpVtbl->CreateQueryWriterFromReader(This,pIQueryReader,pguidVendor,ppIQueryWriter);
}
/*** IWICComponentFactory methods ***/
static FORCEINLINE HRESULT IWICComponentFactory_CreateMetadataReader(IWICComponentFactory* This,REFGUID guidMetadataFormat,const GUID *pguidVendor,DWORD dwOptions,IStream *pIStream,IWICMetadataReader **ppIReader) {
    return This->lpVtbl->CreateMetadataReader(This,guidMetadataFormat,pguidVendor,dwOptions,pIStream,ppIReader);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateMetadataReaderFromContainer(IWICComponentFactory* This,REFGUID guidMetadataFormat,const GUID *pguidVendor,DWORD dwOptions,IStream *pIStream,IWICMetadataReader **ppIReader) {
    return This->lpVtbl->CreateMetadataReaderFromContainer(This,guidMetadataFormat,pguidVendor,dwOptions,pIStream,ppIReader);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateMetadataWriter(IWICComponentFactory* This,REFGUID guidMetadataFormat,const GUID *pguidVendor,DWORD dwMetadataOptions,IWICMetadataWriter **ppIWriter) {
    return This->lpVtbl->CreateMetadataWriter(This,guidMetadataFormat,pguidVendor,dwMetadataOptions,ppIWriter);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateMetadataWriterFromReader(IWICComponentFactory* This,IWICMetadataReader *pIReader,const GUID *pguidVendor,IWICMetadataWriter **ppIWriter) {
    return This->lpVtbl->CreateMetadataWriterFromReader(This,pIReader,pguidVendor,ppIWriter);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateQueryReaderFromBlockReader(IWICComponentFactory* This,IWICMetadataBlockReader *pIBlockReader,IWICMetadataQueryReader **ppIQueryReader) {
    return This->lpVtbl->CreateQueryReaderFromBlockReader(This,pIBlockReader,ppIQueryReader);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateQueryWriterFromBlockWriter(IWICComponentFactory* This,IWICMetadataBlockWriter *pIBlockWriter,IWICMetadataQueryWriter **ppIQueryWriter) {
    return This->lpVtbl->CreateQueryWriterFromBlockWriter(This,pIBlockWriter,ppIQueryWriter);
}
static FORCEINLINE HRESULT IWICComponentFactory_CreateEncoderPropertyBag(IWICComponentFactory* This,PROPBAG2 *ppropOptions,UINT cCount,IPropertyBag2 **ppIPropertyBag) {
    return This->lpVtbl->CreateEncoderPropertyBag(This,ppropOptions,cCount,ppIPropertyBag);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IWICComponentFactory_CreateMetadataReader_Proxy(
    IWICComponentFactory* This,
    REFGUID guidMetadataFormat,
    const GUID *pguidVendor,
    DWORD dwOptions,
    IStream *pIStream,
    IWICMetadataReader **ppIReader);
void __RPC_STUB IWICComponentFactory_CreateMetadataReader_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICComponentFactory_CreateMetadataReaderFromContainer_Proxy(
    IWICComponentFactory* This,
    REFGUID guidMetadataFormat,
    const GUID *pguidVendor,
    DWORD dwOptions,
    IStream *pIStream,
    IWICMetadataReader **ppIReader);
void __RPC_STUB IWICComponentFactory_CreateMetadataReaderFromContainer_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICComponentFactory_CreateMetadataWriter_Proxy(
    IWICComponentFactory* This,
    REFGUID guidMetadataFormat,
    const GUID *pguidVendor,
    DWORD dwMetadataOptions,
    IWICMetadataWriter **ppIWriter);
void __RPC_STUB IWICComponentFactory_CreateMetadataWriter_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICComponentFactory_CreateMetadataWriterFromReader_Proxy(
    IWICComponentFactory* This,
    IWICMetadataReader *pIReader,
    const GUID *pguidVendor,
    IWICMetadataWriter **ppIWriter);
void __RPC_STUB IWICComponentFactory_CreateMetadataWriterFromReader_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICComponentFactory_CreateQueryReaderFromBlockReader_Proxy(
    IWICComponentFactory* This,
    IWICMetadataBlockReader *pIBlockReader,
    IWICMetadataQueryReader **ppIQueryReader);
void __RPC_STUB IWICComponentFactory_CreateQueryReaderFromBlockReader_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICComponentFactory_CreateQueryWriterFromBlockWriter_Proxy(
    IWICComponentFactory* This,
    IWICMetadataBlockWriter *pIBlockWriter,
    IWICMetadataQueryWriter **ppIQueryWriter);
void __RPC_STUB IWICComponentFactory_CreateQueryWriterFromBlockWriter_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IWICComponentFactory_CreateEncoderPropertyBag_Proxy(
    IWICComponentFactory* This,
    PROPBAG2 *ppropOptions,
    UINT cCount,
    IPropertyBag2 **ppIPropertyBag);
void __RPC_STUB IWICComponentFactory_CreateEncoderPropertyBag_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IWICComponentFactory_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
ULONG           __RPC_USER LPSAFEARRAY_UserSize     (ULONG *, ULONG, LPSAFEARRAY *);
unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal  (ULONG *, unsigned char *, LPSAFEARRAY *);
unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal(ULONG *, unsigned char *, LPSAFEARRAY *);
void            __RPC_USER LPSAFEARRAY_UserFree     (ULONG *, LPSAFEARRAY *);
ULONG           __RPC_USER CLIPFORMAT_UserSize     (ULONG *, ULONG, CLIPFORMAT *);
unsigned char * __RPC_USER CLIPFORMAT_UserMarshal  (ULONG *, unsigned char *, CLIPFORMAT *);
unsigned char * __RPC_USER CLIPFORMAT_UserUnmarshal(ULONG *, unsigned char *, CLIPFORMAT *);
void            __RPC_USER CLIPFORMAT_UserFree     (ULONG *, CLIPFORMAT *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __wincodecsdk_h__ */
