/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

#ifndef DO_NO_IMPORTS
import "unknwn.idl";
import "wtypes.idl";
#endif

interface IMoniker;
interface IEnumMoniker;
interface IRunningObjectTable;
interface IEnumString;
interface IStream;
interface IAdviseSink;

cpp_quote("#ifndef __IMarshal_FWD_DEFINED__")
cpp_quote("#define __IMarshal_FWD_DEFINED__")
cpp_quote("typedef struct IMarshal IMarshal;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IMarshal2_FWD_DEFINED__")
cpp_quote("#define __IMarshal2_FWD_DEFINED__")
cpp_quote("typedef struct IMarshal2 IMarshal2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IMalloc_FWD_DEFINED__")
cpp_quote("#define __IMalloc_FWD_DEFINED__")
cpp_quote("typedef struct IMalloc IMalloc;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IMallocSpy_FWD_DEFINED__")
cpp_quote("#define __IMallocSpy_FWD_DEFINED__")
cpp_quote("typedef struct IMallocSpy IMallocSpy;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IStdMarshalInfo_FWD_DEFINED__")
cpp_quote("#define __IStdMarshalInfo_FWD_DEFINED__")
cpp_quote("typedef struct IStdMarshalInfo IStdMarshalInfo;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IExternalConnection_FWD_DEFINED__")
cpp_quote("#define __IExternalConnection_FWD_DEFINED__")
cpp_quote("typedef struct IExternalConnection IExternalConnection;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IMultiQI_FWD_DEFINED__")
cpp_quote("#define __IMultiQI_FWD_DEFINED__")
cpp_quote("typedef struct IMultiQI IMultiQI;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __AsyncIMultiQI_FWD_DEFINED__")
cpp_quote("#define __AsyncIMultiQI_FWD_DEFINED__")
cpp_quote("typedef struct AsyncIMultiQI AsyncIMultiQI;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternalUnknown_FWD_DEFINED__")
cpp_quote("#define __IInternalUnknown_FWD_DEFINED__")
cpp_quote("typedef struct IInternalUnknown IInternalUnknown;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRunnableObject_FWD_DEFINED__")
cpp_quote("#define __IRunnableObject_FWD_DEFINED__")
cpp_quote("typedef struct IRunnableObject IRunnableObject;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IROTData_FWD_DEFINED__")
cpp_quote("#define __IROTData_FWD_DEFINED__")
cpp_quote("typedef struct IROTData IROTData;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPersistFile_FWD_DEFINED__")
cpp_quote("#define __IPersistFile_FWD_DEFINED__")
cpp_quote("typedef struct IPersistFile IPersistFile;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPersistStorage_FWD_DEFINED__")
cpp_quote("#define __IPersistStorage_FWD_DEFINED__")
cpp_quote("typedef struct IPersistStorage IPersistStorage;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ILockBytes_FWD_DEFINED__")
cpp_quote("#define __ILockBytes_FWD_DEFINED__")
cpp_quote("typedef struct ILockBytes ILockBytes;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRootStorage_FWD_DEFINED__")
cpp_quote("#define __IRootStorage_FWD_DEFINED__")
cpp_quote("typedef struct IRootStorage IRootStorage;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __AsyncIAdviseSink_FWD_DEFINED__")
cpp_quote("#define __AsyncIAdviseSink_FWD_DEFINED__")
cpp_quote("typedef struct AsyncIAdviseSink AsyncIAdviseSink;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IAdviseSink2_FWD_DEFINED__")
cpp_quote("#define __IAdviseSink2_FWD_DEFINED__")
cpp_quote("typedef struct IAdviseSink2 IAdviseSink2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __AsyncIAdviseSink2_FWD_DEFINED__")
cpp_quote("#define __AsyncIAdviseSink2_FWD_DEFINED__")
cpp_quote("typedef struct AsyncIAdviseSink2 AsyncIAdviseSink2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IDataAdviseHolder_FWD_DEFINED__")
cpp_quote("#define __IDataAdviseHolder_FWD_DEFINED__")
cpp_quote("typedef struct IDataAdviseHolder IDataAdviseHolder;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IMessageFilter_FWD_DEFINED__")
cpp_quote("#define __IMessageFilter_FWD_DEFINED__")
cpp_quote("typedef struct IMessageFilter IMessageFilter;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcChannelBuffer_FWD_DEFINED__")
cpp_quote("#define __IRpcChannelBuffer_FWD_DEFINED__")
cpp_quote("typedef struct IRpcChannelBuffer IRpcChannelBuffer;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcChannelBuffer2_FWD_DEFINED__")
cpp_quote("#define __IRpcChannelBuffer2_FWD_DEFINED__")
cpp_quote("typedef struct IRpcChannelBuffer2 IRpcChannelBuffer2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IAsyncRpcChannelBuffer_FWD_DEFINED__")
cpp_quote("#define __IAsyncRpcChannelBuffer_FWD_DEFINED__")
cpp_quote("typedef struct IAsyncRpcChannelBuffer IAsyncRpcChannelBuffer;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcChannelBuffer3_FWD_DEFINED__")
cpp_quote("#define __IRpcChannelBuffer3_FWD_DEFINED__")
cpp_quote("typedef struct IRpcChannelBuffer3 IRpcChannelBuffer3;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcSyntaxNegotiate_FWD_DEFINED__")
cpp_quote("#define __IRpcSyntaxNegotiate_FWD_DEFINED__")
cpp_quote("typedef struct IRpcSyntaxNegotiate IRpcSyntaxNegotiate;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcProxyBuffer_FWD_DEFINED__")
cpp_quote("#define __IRpcProxyBuffer_FWD_DEFINED__")
cpp_quote("typedef struct IRpcProxyBuffer IRpcProxyBuffer;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcStubBuffer_FWD_DEFINED__")
cpp_quote("#define __IRpcStubBuffer_FWD_DEFINED__")
cpp_quote("typedef struct IRpcStubBuffer IRpcStubBuffer;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPSFactoryBuffer_FWD_DEFINED__")
cpp_quote("#define __IPSFactoryBuffer_FWD_DEFINED__")
cpp_quote("typedef struct IPSFactoryBuffer IPSFactoryBuffer;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IChannelHook_FWD_DEFINED__")
cpp_quote("#define __IChannelHook_FWD_DEFINED__")
cpp_quote("typedef struct IChannelHook IChannelHook;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IClientSecurity_FWD_DEFINED__")
cpp_quote("#define __IClientSecurity_FWD_DEFINED__")
cpp_quote("typedef struct IClientSecurity IClientSecurity;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IServerSecurity_FWD_DEFINED__")
cpp_quote("#define __IServerSecurity_FWD_DEFINED__")
cpp_quote("typedef struct IServerSecurity IServerSecurity;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IClassActivator_FWD_DEFINED__")
cpp_quote("#define __IClassActivator_FWD_DEFINED__")
cpp_quote("typedef struct IClassActivator IClassActivator;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcOptions_FWD_DEFINED__")
cpp_quote("#define __IRpcOptions_FWD_DEFINED__")
cpp_quote("typedef struct IRpcOptions IRpcOptions;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IFillLockBytes_FWD_DEFINED__")
cpp_quote("#define __IFillLockBytes_FWD_DEFINED__")
cpp_quote("typedef struct IFillLockBytes IFillLockBytes;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IProgressNotify_FWD_DEFINED__")
cpp_quote("#define __IProgressNotify_FWD_DEFINED__")
cpp_quote("typedef struct IProgressNotify IProgressNotify;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ILayoutStorage_FWD_DEFINED__")
cpp_quote("#define __ILayoutStorage_FWD_DEFINED__")
cpp_quote("typedef struct ILayoutStorage ILayoutStorage;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IBlockingLock_FWD_DEFINED__")
cpp_quote("#define __IBlockingLock_FWD_DEFINED__")
cpp_quote("typedef struct IBlockingLock IBlockingLock;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ITimeAndNoticeControl_FWD_DEFINED__")
cpp_quote("#define __ITimeAndNoticeControl_FWD_DEFINED__")
cpp_quote("typedef struct ITimeAndNoticeControl ITimeAndNoticeControl;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOplockStorage_FWD_DEFINED__")
cpp_quote("#define __IOplockStorage_FWD_DEFINED__")
cpp_quote("typedef struct IOplockStorage IOplockStorage;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISurrogate_FWD_DEFINED__")
cpp_quote("#define __ISurrogate_FWD_DEFINED__")
cpp_quote("typedef struct ISurrogate ISurrogate;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IGlobalInterfaceTable_FWD_DEFINED__")
cpp_quote("#define __IGlobalInterfaceTable_FWD_DEFINED__")
cpp_quote("typedef struct IGlobalInterfaceTable IGlobalInterfaceTable;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IDirectWriterLock_FWD_DEFINED__")
cpp_quote("#define __IDirectWriterLock_FWD_DEFINED__")
cpp_quote("typedef struct IDirectWriterLock IDirectWriterLock;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISynchronize_FWD_DEFINED__")
cpp_quote("#define __ISynchronize_FWD_DEFINED__")
cpp_quote("typedef struct ISynchronize ISynchronize;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISynchronizeHandle_FWD_DEFINED__")
cpp_quote("#define __ISynchronizeHandle_FWD_DEFINED__")
cpp_quote("typedef struct ISynchronizeHandle ISynchronizeHandle;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISynchronizeEvent_FWD_DEFINED__")
cpp_quote("#define __ISynchronizeEvent_FWD_DEFINED__")
cpp_quote("typedef struct ISynchronizeEvent ISynchronizeEvent;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISynchronizeContainer_FWD_DEFINED__")
cpp_quote("#define __ISynchronizeContainer_FWD_DEFINED__")
cpp_quote("typedef struct ISynchronizeContainer ISynchronizeContainer;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISynchronizeMutex_FWD_DEFINED__")
cpp_quote("#define __ISynchronizeMutex_FWD_DEFINED__")
cpp_quote("typedef struct ISynchronizeMutex ISynchronizeMutex;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICancelMethodCalls_FWD_DEFINED__")
cpp_quote("#define __ICancelMethodCalls_FWD_DEFINED__")
cpp_quote("typedef struct ICancelMethodCalls ICancelMethodCalls;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IAsyncManager_FWD_DEFINED__")
cpp_quote("#define __IAsyncManager_FWD_DEFINED__")
cpp_quote("typedef struct IAsyncManager IAsyncManager;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICallFactory_FWD_DEFINED__")
cpp_quote("#define __ICallFactory_FWD_DEFINED__")
cpp_quote("typedef struct ICallFactory ICallFactory;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcHelper_FWD_DEFINED__")
cpp_quote("#define __IRpcHelper_FWD_DEFINED__")
cpp_quote("typedef struct IRpcHelper IRpcHelper;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IReleaseMarshalBuffers_FWD_DEFINED__")
cpp_quote("#define __IReleaseMarshalBuffers_FWD_DEFINED__")
cpp_quote("typedef struct IReleaseMarshalBuffers IReleaseMarshalBuffers;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IWaitMultiple_FWD_DEFINED__")
cpp_quote("#define __IWaitMultiple_FWD_DEFINED__")
cpp_quote("typedef struct IWaitMultiple IWaitMultiple;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IUrlMon_FWD_DEFINED__")
cpp_quote("#define __IUrlMon_FWD_DEFINED__")
cpp_quote("typedef struct IUrlMon IUrlMon;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IForegroundTransfer_FWD_DEFINED__")
cpp_quote("#define __IForegroundTransfer_FWD_DEFINED__")
cpp_quote("typedef struct IForegroundTransfer IForegroundTransfer;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IAddrTrackingControl_FWD_DEFINED__")
cpp_quote("#define __IAddrTrackingControl_FWD_DEFINED__")
cpp_quote("typedef struct IAddrTrackingControl IAddrTrackingControl;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IAddrExclusionControl_FWD_DEFINED__")
cpp_quote("#define __IAddrExclusionControl_FWD_DEFINED__")
cpp_quote("typedef struct IAddrExclusionControl IAddrExclusionControl;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPipeByte_FWD_DEFINED__")
cpp_quote("#define __IPipeByte_FWD_DEFINED__")
cpp_quote("typedef struct IPipeByte IPipeByte;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __AsyncIPipeByte_FWD_DEFINED__")
cpp_quote("#define __AsyncIPipeByte_FWD_DEFINED__")
cpp_quote("typedef struct AsyncIPipeByte AsyncIPipeByte;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPipeLong_FWD_DEFINED__")
cpp_quote("#define __IPipeLong_FWD_DEFINED__")
cpp_quote("typedef struct IPipeLong IPipeLong;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __AsyncIPipeLong_FWD_DEFINED__")
cpp_quote("#define __AsyncIPipeLong_FWD_DEFINED__")
cpp_quote("typedef struct AsyncIPipeLong AsyncIPipeLong;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPipeDouble_FWD_DEFINED__")
cpp_quote("#define __IPipeDouble_FWD_DEFINED__")
cpp_quote("typedef struct IPipeDouble IPipeDouble;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __AsyncIPipeDouble_FWD_DEFINED__")
cpp_quote("#define __AsyncIPipeDouble_FWD_DEFINED__")
cpp_quote("typedef struct AsyncIPipeDouble AsyncIPipeDouble;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IThumbnailExtractor_FWD_DEFINED__")
cpp_quote("#define __IThumbnailExtractor_FWD_DEFINED__")
cpp_quote("typedef struct IThumbnailExtractor IThumbnailExtractor;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IDummyHICONIncluder_FWD_DEFINED__")
cpp_quote("#define __IDummyHICONIncluder_FWD_DEFINED__")
cpp_quote("typedef struct IDummyHICONIncluder IDummyHICONIncluder;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IEnumContextProps_FWD_DEFINED__")
cpp_quote("#define __IEnumContextProps_FWD_DEFINED__")
cpp_quote("typedef struct IEnumContextProps IEnumContextProps;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IContext_FWD_DEFINED__")
cpp_quote("#define __IContext_FWD_DEFINED__")
cpp_quote("typedef struct IContext IContext;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IObjContext_FWD_DEFINED__")
cpp_quote("#define __IObjContext_FWD_DEFINED__")
cpp_quote("typedef struct IObjContext IObjContext;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IProcessLock_FWD_DEFINED__")
cpp_quote("#define __IProcessLock_FWD_DEFINED__")
cpp_quote("typedef struct IProcessLock IProcessLock;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISurrogateService_FWD_DEFINED__")
cpp_quote("#define __ISurrogateService_FWD_DEFINED__")
cpp_quote("typedef struct ISurrogateService ISurrogateService;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IComThreadingInfo_FWD_DEFINED__")
cpp_quote("#define __IComThreadingInfo_FWD_DEFINED__")
cpp_quote("typedef struct IComThreadingInfo IComThreadingInfo;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IProcessInitControl_FWD_DEFINED__")
cpp_quote("#define __IProcessInitControl_FWD_DEFINED__")
cpp_quote("typedef struct IProcessInitControl IProcessInitControl;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInitializeSpy_FWD_DEFINED__")
cpp_quote("#define __IInitializeSpy_FWD_DEFINED__")
cpp_quote("typedef struct IInitializeSpy IInitializeSpy;")
cpp_quote("#endif")

typedef struct _COSERVERINFO {
    DWORD dwReserved1;
    LPWSTR pwszName;
    COAUTHINFO *pAuthInfo;
    DWORD dwReserved2;
} COSERVERINFO;

cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("#ifndef __IMarshal_INTERFACE_DEFINED__")
cpp_quote("#define __IMarshal_INTERFACE_DEFINED__")
cpp_quote("  typedef IMarshal *LPMARSHAL;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IMarshal;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IMarshal : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetUnmarshalClass(REFIID riid,void *pv,DWORD dwDestContext,void *pvDestContext,DWORD mshlflags,CLSID *pCid) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetMarshalSizeMax(REFIID riid,void *pv,DWORD dwDestContext,void *pvDestContext,DWORD mshlflags,DWORD *pSize) = 0;")
cpp_quote("    virtual HRESULT WINAPI MarshalInterface(IStream *pStm,REFIID riid,void *pv,DWORD dwDestContext,void *pvDestContext,DWORD mshlflags) = 0;")
cpp_quote("    virtual HRESULT WINAPI UnmarshalInterface(IStream *pStm,REFIID riid,void **ppv) = 0;")
cpp_quote("    virtual HRESULT WINAPI ReleaseMarshalData(IStream *pStm) = 0;")
cpp_quote("    virtual HRESULT WINAPI DisconnectObject(DWORD dwReserved) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IMarshalVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IMarshal *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IMarshal *This);")
cpp_quote("      ULONG (WINAPI *Release)(IMarshal *This);")
cpp_quote("      HRESULT (WINAPI *GetUnmarshalClass)(IMarshal *This,REFIID riid,void *pv,DWORD dwDestContext,void *pvDestContext,DWORD mshlflags,CLSID *pCid);")
cpp_quote("      HRESULT (WINAPI *GetMarshalSizeMax)(IMarshal *This,REFIID riid,void *pv,DWORD dwDestContext,void *pvDestContext,DWORD mshlflags,DWORD *pSize);")
cpp_quote("      HRESULT (WINAPI *MarshalInterface)(IMarshal *This,IStream *pStm,REFIID riid,void *pv,DWORD dwDestContext,void *pvDestContext,DWORD mshlflags);")
cpp_quote("      HRESULT (WINAPI *UnmarshalInterface)(IMarshal *This,IStream *pStm,REFIID riid,void **ppv);")
cpp_quote("      HRESULT (WINAPI *ReleaseMarshalData)(IMarshal *This,IStream *pStm);")
cpp_quote("      HRESULT (WINAPI *DisconnectObject)(IMarshal *This,DWORD dwReserved);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IMarshalVtbl;")
cpp_quote("  struct IMarshal {")
cpp_quote("    CONST_VTBL struct IMarshalVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IMarshal_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IMarshal_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IMarshal_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IMarshal_GetUnmarshalClass(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pCid) (This)->lpVtbl->GetUnmarshalClass(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pCid)")
cpp_quote("#define IMarshal_GetMarshalSizeMax(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pSize) (This)->lpVtbl->GetMarshalSizeMax(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pSize)")
cpp_quote("#define IMarshal_MarshalInterface(This,pStm,riid,pv,dwDestContext,pvDestContext,mshlflags) (This)->lpVtbl->MarshalInterface(This,pStm,riid,pv,dwDestContext,pvDestContext,mshlflags)")
cpp_quote("#define IMarshal_UnmarshalInterface(This,pStm,riid,ppv) (This)->lpVtbl->UnmarshalInterface(This,pStm,riid,ppv)")
cpp_quote("#define IMarshal_ReleaseMarshalData(This,pStm) (This)->lpVtbl->ReleaseMarshalData(This,pStm)")
cpp_quote("#define IMarshal_DisconnectObject(This,dwReserved) (This)->lpVtbl->DisconnectObject(This,dwReserved)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IMarshal_GetUnmarshalClass_Proxy(IMarshal *This,REFIID riid,void *pv,DWORD dwDestContext,void *pvDestContext,DWORD mshlflags,CLSID *pCid);")
cpp_quote("  void __RPC_STUB IMarshal_GetUnmarshalClass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IMarshal_GetMarshalSizeMax_Proxy(IMarshal *This,REFIID riid,void *pv,DWORD dwDestContext,void *pvDestContext,DWORD mshlflags,DWORD *pSize);")
cpp_quote("  void __RPC_STUB IMarshal_GetMarshalSizeMax_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IMarshal_MarshalInterface_Proxy(IMarshal *This,IStream *pStm,REFIID riid,void *pv,DWORD dwDestContext,void *pvDestContext,DWORD mshlflags);")
cpp_quote("  void __RPC_STUB IMarshal_MarshalInterface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IMarshal_UnmarshalInterface_Proxy(IMarshal *This,IStream *pStm,REFIID riid,void **ppv);")
cpp_quote("  void __RPC_STUB IMarshal_UnmarshalInterface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IMarshal_ReleaseMarshalData_Proxy(IMarshal *This,IStream *pStm);")
cpp_quote("  void __RPC_STUB IMarshal_ReleaseMarshalData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IMarshal_DisconnectObject_Proxy(IMarshal *This,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IMarshal_DisconnectObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IMarshal2_INTERFACE_DEFINED__")
cpp_quote("#define __IMarshal2_INTERFACE_DEFINED__")
cpp_quote("  typedef IMarshal2 *LPMARSHAL2;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IMarshal2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IMarshal2 : public IMarshal {")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IMarshal2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IMarshal2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IMarshal2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(IMarshal2 *This);")
cpp_quote("      HRESULT (WINAPI *GetUnmarshalClass)(IMarshal2 *This,REFIID riid,void *pv,DWORD dwDestContext,void *pvDestContext,DWORD mshlflags,CLSID *pCid);")
cpp_quote("      HRESULT (WINAPI *GetMarshalSizeMax)(IMarshal2 *This,REFIID riid,void *pv,DWORD dwDestContext,void *pvDestContext,DWORD mshlflags,DWORD *pSize);")
cpp_quote("      HRESULT (WINAPI *MarshalInterface)(IMarshal2 *This,IStream *pStm,REFIID riid,void *pv,DWORD dwDestContext,void *pvDestContext,DWORD mshlflags);")
cpp_quote("      HRESULT (WINAPI *UnmarshalInterface)(IMarshal2 *This,IStream *pStm,REFIID riid,void **ppv);")
cpp_quote("      HRESULT (WINAPI *ReleaseMarshalData)(IMarshal2 *This,IStream *pStm);")
cpp_quote("      HRESULT (WINAPI *DisconnectObject)(IMarshal2 *This,DWORD dwReserved);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IMarshal2Vtbl;")
cpp_quote("  struct IMarshal2 {")
cpp_quote("    CONST_VTBL struct IMarshal2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IMarshal2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IMarshal2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IMarshal2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IMarshal2_GetUnmarshalClass(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pCid) (This)->lpVtbl->GetUnmarshalClass(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pCid)")
cpp_quote("#define IMarshal2_GetMarshalSizeMax(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pSize) (This)->lpVtbl->GetMarshalSizeMax(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pSize)")
cpp_quote("#define IMarshal2_MarshalInterface(This,pStm,riid,pv,dwDestContext,pvDestContext,mshlflags) (This)->lpVtbl->MarshalInterface(This,pStm,riid,pv,dwDestContext,pvDestContext,mshlflags)")
cpp_quote("#define IMarshal2_UnmarshalInterface(This,pStm,riid,ppv) (This)->lpVtbl->UnmarshalInterface(This,pStm,riid,ppv)")
cpp_quote("#define IMarshal2_ReleaseMarshalData(This,pStm) (This)->lpVtbl->ReleaseMarshalData(This,pStm)")
cpp_quote("#define IMarshal2_DisconnectObject(This,dwReserved) (This)->lpVtbl->DisconnectObject(This,dwReserved)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IMalloc_INTERFACE_DEFINED__")
cpp_quote("#define __IMalloc_INTERFACE_DEFINED__")
cpp_quote("  typedef IMalloc *LPMALLOC;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IMalloc;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IMalloc : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual void *WINAPI Alloc(SIZE_T cb) = 0;")
cpp_quote("    virtual void *WINAPI Realloc(void *pv,SIZE_T cb) = 0;")
cpp_quote("    virtual void WINAPI Free(void *pv) = 0;")
cpp_quote("    virtual SIZE_T WINAPI GetSize(void *pv) = 0;")
cpp_quote("    virtual int WINAPI DidAlloc(void *pv) = 0;")
cpp_quote("    virtual void WINAPI HeapMinimize(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IMallocVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IMalloc *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IMalloc *This);")
cpp_quote("      ULONG (WINAPI *Release)(IMalloc *This);")
cpp_quote("      void *(WINAPI *Alloc)(IMalloc *This,SIZE_T cb);")
cpp_quote("      void *(WINAPI *Realloc)(IMalloc *This,void *pv,SIZE_T cb);")
cpp_quote("      void (WINAPI *Free)(IMalloc *This,void *pv);")
cpp_quote("      SIZE_T (WINAPI *GetSize)(IMalloc *This,void *pv);")
cpp_quote("      int (WINAPI *DidAlloc)(IMalloc *This,void *pv);")
cpp_quote("      void (WINAPI *HeapMinimize)(IMalloc *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IMallocVtbl;")
cpp_quote("  struct IMalloc {")
cpp_quote("    CONST_VTBL struct IMallocVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IMalloc_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IMalloc_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IMalloc_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IMalloc_Alloc(This,cb) (This)->lpVtbl->Alloc(This,cb)")
cpp_quote("#define IMalloc_Realloc(This,pv,cb) (This)->lpVtbl->Realloc(This,pv,cb)")
cpp_quote("#define IMalloc_Free(This,pv) (This)->lpVtbl->Free(This,pv)")
cpp_quote("#define IMalloc_GetSize(This,pv) (This)->lpVtbl->GetSize(This,pv)")
cpp_quote("#define IMalloc_DidAlloc(This,pv) (This)->lpVtbl->DidAlloc(This,pv)")
cpp_quote("#define IMalloc_HeapMinimize(This) (This)->lpVtbl->HeapMinimize(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  void *WINAPI IMalloc_Alloc_Proxy(IMalloc *This,SIZE_T cb);")
cpp_quote("  void __RPC_STUB IMalloc_Alloc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void *WINAPI IMalloc_Realloc_Proxy(IMalloc *This,void *pv,SIZE_T cb);")
cpp_quote("  void __RPC_STUB IMalloc_Realloc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IMalloc_Free_Proxy(IMalloc *This,void *pv);")
cpp_quote("  void __RPC_STUB IMalloc_Free_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  SIZE_T WINAPI IMalloc_GetSize_Proxy(IMalloc *This,void *pv);")
cpp_quote("  void __RPC_STUB IMalloc_GetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  int WINAPI IMalloc_DidAlloc_Proxy(IMalloc *This,void *pv);")
cpp_quote("  void __RPC_STUB IMalloc_DidAlloc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IMalloc_HeapMinimize_Proxy(IMalloc *This);")
cpp_quote("  void __RPC_STUB IMalloc_HeapMinimize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IMallocSpy_INTERFACE_DEFINED__")
cpp_quote("#define __IMallocSpy_INTERFACE_DEFINED__")
cpp_quote("  typedef IMallocSpy *LPMALLOCSPY;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IMallocSpy;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IMallocSpy : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual SIZE_T WINAPI PreAlloc(SIZE_T cbRequest) = 0;")
cpp_quote("    virtual void *WINAPI PostAlloc(void *pActual) = 0;")
cpp_quote("    virtual void *WINAPI PreFree(void *pRequest,WINBOOL fSpyed) = 0;")
cpp_quote("    virtual void WINAPI PostFree(WINBOOL fSpyed) = 0;")
cpp_quote("    virtual SIZE_T WINAPI PreRealloc(void *pRequest,SIZE_T cbRequest,void **ppNewRequest,WINBOOL fSpyed) = 0;")
cpp_quote("    virtual void *WINAPI PostRealloc(void *pActual,WINBOOL fSpyed) = 0;")
cpp_quote("    virtual void *WINAPI PreGetSize(void *pRequest,WINBOOL fSpyed) = 0;")
cpp_quote("    virtual SIZE_T WINAPI PostGetSize(SIZE_T cbActual,WINBOOL fSpyed) = 0;")
cpp_quote("    virtual void *WINAPI PreDidAlloc(void *pRequest,WINBOOL fSpyed) = 0;")
cpp_quote("    virtual int WINAPI PostDidAlloc(void *pRequest,WINBOOL fSpyed,int fActual) = 0;")
cpp_quote("    virtual void WINAPI PreHeapMinimize(void) = 0;")
cpp_quote("    virtual void WINAPI PostHeapMinimize(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IMallocSpyVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IMallocSpy *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IMallocSpy *This);")
cpp_quote("      ULONG (WINAPI *Release)(IMallocSpy *This);")
cpp_quote("      SIZE_T (WINAPI *PreAlloc)(IMallocSpy *This,SIZE_T cbRequest);")
cpp_quote("      void *(WINAPI *PostAlloc)(IMallocSpy *This,void *pActual);")
cpp_quote("      void *(WINAPI *PreFree)(IMallocSpy *This,void *pRequest,WINBOOL fSpyed);")
cpp_quote("      void (WINAPI *PostFree)(IMallocSpy *This,WINBOOL fSpyed);")
cpp_quote("      SIZE_T (WINAPI *PreRealloc)(IMallocSpy *This,void *pRequest,SIZE_T cbRequest,void **ppNewRequest,WINBOOL fSpyed);")
cpp_quote("      void *(WINAPI *PostRealloc)(IMallocSpy *This,void *pActual,WINBOOL fSpyed);")
cpp_quote("      void *(WINAPI *PreGetSize)(IMallocSpy *This,void *pRequest,WINBOOL fSpyed);")
cpp_quote("      SIZE_T (WINAPI *PostGetSize)(IMallocSpy *This,SIZE_T cbActual,WINBOOL fSpyed);")
cpp_quote("      void *(WINAPI *PreDidAlloc)(IMallocSpy *This,void *pRequest,WINBOOL fSpyed);")
cpp_quote("      int (WINAPI *PostDidAlloc)(IMallocSpy *This,void *pRequest,WINBOOL fSpyed,int fActual);")
cpp_quote("      void (WINAPI *PreHeapMinimize)(IMallocSpy *This);")
cpp_quote("      void (WINAPI *PostHeapMinimize)(IMallocSpy *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IMallocSpyVtbl;")
cpp_quote("  struct IMallocSpy {")
cpp_quote("    CONST_VTBL struct IMallocSpyVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IMallocSpy_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IMallocSpy_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IMallocSpy_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IMallocSpy_PreAlloc(This,cbRequest) (This)->lpVtbl->PreAlloc(This,cbRequest)")
cpp_quote("#define IMallocSpy_PostAlloc(This,pActual) (This)->lpVtbl->PostAlloc(This,pActual)")
cpp_quote("#define IMallocSpy_PreFree(This,pRequest,fSpyed) (This)->lpVtbl->PreFree(This,pRequest,fSpyed)")
cpp_quote("#define IMallocSpy_PostFree(This,fSpyed) (This)->lpVtbl->PostFree(This,fSpyed)")
cpp_quote("#define IMallocSpy_PreRealloc(This,pRequest,cbRequest,ppNewRequest,fSpyed) (This)->lpVtbl->PreRealloc(This,pRequest,cbRequest,ppNewRequest,fSpyed)")
cpp_quote("#define IMallocSpy_PostRealloc(This,pActual,fSpyed) (This)->lpVtbl->PostRealloc(This,pActual,fSpyed)")
cpp_quote("#define IMallocSpy_PreGetSize(This,pRequest,fSpyed) (This)->lpVtbl->PreGetSize(This,pRequest,fSpyed)")
cpp_quote("#define IMallocSpy_PostGetSize(This,cbActual,fSpyed) (This)->lpVtbl->PostGetSize(This,cbActual,fSpyed)")
cpp_quote("#define IMallocSpy_PreDidAlloc(This,pRequest,fSpyed) (This)->lpVtbl->PreDidAlloc(This,pRequest,fSpyed)")
cpp_quote("#define IMallocSpy_PostDidAlloc(This,pRequest,fSpyed,fActual) (This)->lpVtbl->PostDidAlloc(This,pRequest,fSpyed,fActual)")
cpp_quote("#define IMallocSpy_PreHeapMinimize(This) (This)->lpVtbl->PreHeapMinimize(This)")
cpp_quote("#define IMallocSpy_PostHeapMinimize(This) (This)->lpVtbl->PostHeapMinimize(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  SIZE_T WINAPI IMallocSpy_PreAlloc_Proxy(IMallocSpy *This,SIZE_T cbRequest);")
cpp_quote("  void __RPC_STUB IMallocSpy_PreAlloc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void *WINAPI IMallocSpy_PostAlloc_Proxy(IMallocSpy *This,void *pActual);")
cpp_quote("  void __RPC_STUB IMallocSpy_PostAlloc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void *WINAPI IMallocSpy_PreFree_Proxy(IMallocSpy *This,void *pRequest,WINBOOL fSpyed);")
cpp_quote("  void __RPC_STUB IMallocSpy_PreFree_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IMallocSpy_PostFree_Proxy(IMallocSpy *This,WINBOOL fSpyed);")
cpp_quote("  void __RPC_STUB IMallocSpy_PostFree_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  SIZE_T WINAPI IMallocSpy_PreRealloc_Proxy(IMallocSpy *This,void *pRequest,SIZE_T cbRequest,void **ppNewRequest,WINBOOL fSpyed);")
cpp_quote("  void __RPC_STUB IMallocSpy_PreRealloc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void *WINAPI IMallocSpy_PostRealloc_Proxy(IMallocSpy *This,void *pActual,WINBOOL fSpyed);")
cpp_quote("  void __RPC_STUB IMallocSpy_PostRealloc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void *WINAPI IMallocSpy_PreGetSize_Proxy(IMallocSpy *This,void *pRequest,WINBOOL fSpyed);")
cpp_quote("  void __RPC_STUB IMallocSpy_PreGetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  SIZE_T WINAPI IMallocSpy_PostGetSize_Proxy(IMallocSpy *This,SIZE_T cbActual,WINBOOL fSpyed);")
cpp_quote("  void __RPC_STUB IMallocSpy_PostGetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void *WINAPI IMallocSpy_PreDidAlloc_Proxy(IMallocSpy *This,void *pRequest,WINBOOL fSpyed);")
cpp_quote("  void __RPC_STUB IMallocSpy_PreDidAlloc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  int WINAPI IMallocSpy_PostDidAlloc_Proxy(IMallocSpy *This,void *pRequest,WINBOOL fSpyed,int fActual);")
cpp_quote("  void __RPC_STUB IMallocSpy_PostDidAlloc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IMallocSpy_PreHeapMinimize_Proxy(IMallocSpy *This);")
cpp_quote("  void __RPC_STUB IMallocSpy_PreHeapMinimize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IMallocSpy_PostHeapMinimize_Proxy(IMallocSpy *This);")
cpp_quote("  void __RPC_STUB IMallocSpy_PostHeapMinimize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IStdMarshalInfo_INTERFACE_DEFINED__")
cpp_quote("#define __IStdMarshalInfo_INTERFACE_DEFINED__")
cpp_quote("  typedef IStdMarshalInfo *LPSTDMARSHALINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IStdMarshalInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IStdMarshalInfo : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetClassForHandler(DWORD dwDestContext,void *pvDestContext,CLSID *pClsid) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IStdMarshalInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IStdMarshalInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IStdMarshalInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(IStdMarshalInfo *This);")
cpp_quote("      HRESULT (WINAPI *GetClassForHandler)(IStdMarshalInfo *This,DWORD dwDestContext,void *pvDestContext,CLSID *pClsid);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IStdMarshalInfoVtbl;")
cpp_quote("  struct IStdMarshalInfo {")
cpp_quote("    CONST_VTBL struct IStdMarshalInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IStdMarshalInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IStdMarshalInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IStdMarshalInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IStdMarshalInfo_GetClassForHandler(This,dwDestContext,pvDestContext,pClsid) (This)->lpVtbl->GetClassForHandler(This,dwDestContext,pvDestContext,pClsid)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IStdMarshalInfo_GetClassForHandler_Proxy(IStdMarshalInfo *This,DWORD dwDestContext,void *pvDestContext,CLSID *pClsid);")
cpp_quote("  void __RPC_STUB IStdMarshalInfo_GetClassForHandler_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IExternalConnection_INTERFACE_DEFINED__")
cpp_quote("#define __IExternalConnection_INTERFACE_DEFINED__")
cpp_quote("  typedef IExternalConnection *LPEXTERNALCONNECTION;")
cpp_quote("")
cpp_quote("  typedef enum tagEXTCONN {")
cpp_quote("    EXTCONN_STRONG = 0x1,EXTCONN_WEAK = 0x2,EXTCONN_CALLABLE = 0x4")
cpp_quote("  } EXTCONN;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IExternalConnection;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IExternalConnection : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual DWORD WINAPI AddConnection(DWORD extconn,DWORD reserved) = 0;")
cpp_quote("    virtual DWORD WINAPI ReleaseConnection(DWORD extconn,DWORD reserved,WINBOOL fLastReleaseCloses) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IExternalConnectionVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IExternalConnection *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IExternalConnection *This);")
cpp_quote("      ULONG (WINAPI *Release)(IExternalConnection *This);")
cpp_quote("      DWORD (WINAPI *AddConnection)(IExternalConnection *This,DWORD extconn,DWORD reserved);")
cpp_quote("      DWORD (WINAPI *ReleaseConnection)(IExternalConnection *This,DWORD extconn,DWORD reserved,WINBOOL fLastReleaseCloses);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IExternalConnectionVtbl;")
cpp_quote("  struct IExternalConnection {")
cpp_quote("    CONST_VTBL struct IExternalConnectionVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IExternalConnection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IExternalConnection_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IExternalConnection_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IExternalConnection_AddConnection(This,extconn,reserved) (This)->lpVtbl->AddConnection(This,extconn,reserved)")
cpp_quote("#define IExternalConnection_ReleaseConnection(This,extconn,reserved,fLastReleaseCloses) (This)->lpVtbl->ReleaseConnection(This,extconn,reserved,fLastReleaseCloses)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  DWORD WINAPI IExternalConnection_AddConnection_Proxy(IExternalConnection *This,DWORD extconn,DWORD reserved);")
cpp_quote("  void __RPC_STUB IExternalConnection_AddConnection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  DWORD WINAPI IExternalConnection_ReleaseConnection_Proxy(IExternalConnection *This,DWORD extconn,DWORD reserved,WINBOOL fLastReleaseCloses);")
cpp_quote("  void __RPC_STUB IExternalConnection_ReleaseConnection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  typedef IMultiQI *LPMULTIQI;")
cpp_quote("")
cpp_quote("  typedef struct tagMULTI_QI {")
cpp_quote("    const IID *pIID;")
cpp_quote("    IUnknown *pItf;")
cpp_quote("    HRESULT hr;")
cpp_quote("  } MULTI_QI;")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0015_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0015_v0_0_s_ifspec;")
cpp_quote("#ifndef __IMultiQI_INTERFACE_DEFINED__")
cpp_quote("#define __IMultiQI_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IMultiQI;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IMultiQI : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI QueryMultipleInterfaces(ULONG cMQIs,MULTI_QI *pMQIs) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IMultiQIVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IMultiQI *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IMultiQI *This);")
cpp_quote("      ULONG (WINAPI *Release)(IMultiQI *This);")
cpp_quote("      HRESULT (WINAPI *QueryMultipleInterfaces)(IMultiQI *This,ULONG cMQIs,MULTI_QI *pMQIs);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IMultiQIVtbl;")
cpp_quote("  struct IMultiQI {")
cpp_quote("    CONST_VTBL struct IMultiQIVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IMultiQI_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IMultiQI_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IMultiQI_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IMultiQI_QueryMultipleInterfaces(This,cMQIs,pMQIs) (This)->lpVtbl->QueryMultipleInterfaces(This,cMQIs,pMQIs)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IMultiQI_QueryMultipleInterfaces_Proxy(IMultiQI *This,ULONG cMQIs,MULTI_QI *pMQIs);")
cpp_quote("  void __RPC_STUB IMultiQI_QueryMultipleInterfaces_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __AsyncIMultiQI_INTERFACE_DEFINED__")
cpp_quote("#define __AsyncIMultiQI_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_AsyncIMultiQI;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("")
cpp_quote("  struct AsyncIMultiQI : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Begin_QueryMultipleInterfaces(ULONG cMQIs,MULTI_QI *pMQIs) = 0;")
cpp_quote("    virtual HRESULT WINAPI Finish_QueryMultipleInterfaces(MULTI_QI *pMQIs) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct AsyncIMultiQIVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(AsyncIMultiQI *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(AsyncIMultiQI *This);")
cpp_quote("      ULONG (WINAPI *Release)(AsyncIMultiQI *This);")
cpp_quote("      HRESULT (WINAPI *Begin_QueryMultipleInterfaces)(AsyncIMultiQI *This,ULONG cMQIs,MULTI_QI *pMQIs);")
cpp_quote("      HRESULT (WINAPI *Finish_QueryMultipleInterfaces)(AsyncIMultiQI *This,MULTI_QI *pMQIs);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } AsyncIMultiQIVtbl;")
cpp_quote("  struct AsyncIMultiQI {")
cpp_quote("    CONST_VTBL struct AsyncIMultiQIVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define AsyncIMultiQI_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define AsyncIMultiQI_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define AsyncIMultiQI_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define AsyncIMultiQI_Begin_QueryMultipleInterfaces(This,cMQIs,pMQIs) (This)->lpVtbl->Begin_QueryMultipleInterfaces(This,cMQIs,pMQIs)")
cpp_quote("#define AsyncIMultiQI_Finish_QueryMultipleInterfaces(This,pMQIs) (This)->lpVtbl->Finish_QueryMultipleInterfaces(This,pMQIs)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI AsyncIMultiQI_Begin_QueryMultipleInterfaces_Proxy(AsyncIMultiQI *This,ULONG cMQIs,MULTI_QI *pMQIs);")
cpp_quote("  void __RPC_STUB AsyncIMultiQI_Begin_QueryMultipleInterfaces_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIMultiQI_Finish_QueryMultipleInterfaces_Proxy(AsyncIMultiQI *This,MULTI_QI *pMQIs);")
cpp_quote("  void __RPC_STUB AsyncIMultiQI_Finish_QueryMultipleInterfaces_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IInternalUnknown_INTERFACE_DEFINED__")
cpp_quote("#define __IInternalUnknown_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IInternalUnknown;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInternalUnknown : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI QueryInternalInterface(REFIID riid,void **ppv) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInternalUnknownVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInternalUnknown *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInternalUnknown *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInternalUnknown *This);")
cpp_quote("      HRESULT (WINAPI *QueryInternalInterface)(IInternalUnknown *This,REFIID riid,void **ppv);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInternalUnknownVtbl;")
cpp_quote("  struct IInternalUnknown {")
cpp_quote("    CONST_VTBL struct IInternalUnknownVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInternalUnknown_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInternalUnknown_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInternalUnknown_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInternalUnknown_QueryInternalInterface(This,riid,ppv) (This)->lpVtbl->QueryInternalInterface(This,riid,ppv)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInternalUnknown_QueryInternalInterface_Proxy(IInternalUnknown *This,REFIID riid,void **ppv);")
cpp_quote("  void __RPC_STUB IInternalUnknown_QueryInternalInterface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")

[
    object,
    uuid(00000100-0000-0000-c000-000000000046),
    pointer_default(unique)
]
interface IEnumUnknown : IUnknown
{
    typedef [unique] IEnumUnknown *LPENUMUNKNOWN;

    [local]
    HRESULT Next(
            [in] ULONG celt,
            [out] IUnknown **rgelt,
            [out] ULONG *pceltFetched);

    [call_as(Next)]
    HRESULT RemoteNext(
            [in] ULONG celt,
            [out, size_is(celt), length_is(*pceltFetched)] IUnknown **rgelt,
            [out] ULONG *pceltFetched);

    HRESULT Skip([in] ULONG celt);
    HRESULT Reset();
    HRESULT Clone([out] IEnumUnknown **ppenum);
}

[
    object,
    uuid(0000000e-0000-0000-C000-000000000046),
    pointer_default(unique)
]
interface IBindCtx : IUnknown
{
    typedef [unique] IBindCtx *LPBC;
    typedef [unique] IBindCtx *LPBINDCTX;

    typedef struct tagBIND_OPTS {
        DWORD cbStruct;
        DWORD grfFlags;
        DWORD grfMode;
        DWORD dwTickCountDeadline;
    } BIND_OPTS, *LPBIND_OPTS;

cpp_quote("#if defined(__cplusplus)")
cpp_quote("  typedef struct tagBIND_OPTS2 : tagBIND_OPTS {")
cpp_quote("    DWORD dwTrackFlags;")
cpp_quote("    DWORD dwClassContext;")
cpp_quote("    LCID locale;")
cpp_quote("    COSERVERINFO *pServerInfo;")
cpp_quote("  } BIND_OPTS2, *LPBIND_OPTS2;")
cpp_quote("#else")
    typedef struct tagBIND_OPTS2 {
        DWORD cbStruct;
        DWORD grfFlags;
        DWORD grfMode;
        DWORD dwTickCountDeadline;
        DWORD dwTrackFlags;
        DWORD dwClassContext;
        LCID  locale;
        COSERVERINFO *pServerInfo;
    } BIND_OPTS2, *LPBIND_OPTS2;
cpp_quote("#endif")

cpp_quote("#if defined(__cplusplus)")
cpp_quote("  typedef struct tagBIND_OPTS3 : tagBIND_OPTS2 {")
cpp_quote("    HWND hwnd;")
cpp_quote("  } BIND_OPTS3, *LPBIND_OPTS3;")
cpp_quote("#else")
    typedef struct tagBIND_OPTS3 {
        DWORD cbStruct;
        DWORD grfFlags;
        DWORD grfMode;
        DWORD dwTickCountDeadline;
        DWORD dwTrackFlags;
        DWORD dwClassContext;
        LCID  locale;
        COSERVERINFO *pServerInfo;
        HWND  hwnd;
    } BIND_OPTS3, *LPBIND_OPTS3;
cpp_quote("#endif")

    typedef enum tagBIND_FLAGS {
        BIND_MAYBOTHERUSER = 1,
        BIND_JUSTTESTEXISTENCE = 2
    } BIND_FLAGS;

    HRESULT RegisterObjectBound([in, unique] IUnknown *punk);
    HRESULT RevokeObjectBound([in, unique] IUnknown *punk);
    HRESULT ReleaseBoundObjects();

    [local]
    HRESULT SetBindOptions([in] BIND_OPTS *pbindopts);
    [call_as(SetBindOptions)]
    HRESULT RemoteSetBindOptions([in] BIND_OPTS2 *pbindopts);

    [local]
    HRESULT GetBindOptions([in, out] BIND_OPTS *pbindopts);
    [call_as(GetBindOptions)]
    HRESULT RemoteGetBindOptions([in, out] BIND_OPTS2 *pbindopts);

    HRESULT GetRunningObjectTable([out] IRunningObjectTable **pprot);

    HRESULT RegisterObjectParam(
            [in] LPOLESTR pszKey,
            [in, unique] IUnknown *punk);

    HRESULT GetObjectParam(
            [in] LPOLESTR pszKey,
            [out] IUnknown **ppunk);

    HRESULT EnumObjectParam([out] IEnumString **ppenum);
    HRESULT RevokeObjectParam([in] LPOLESTR pszKey);
}

[
    object,
    uuid(00000102-0000-0000-c000-000000000046),
    pointer_default(unique)
]
interface IEnumMoniker : IUnknown
{
    typedef [unique] IEnumMoniker *LPENUMMONIKER;

    [local]
    HRESULT Next(
            [in] ULONG celt,
            IMoniker **rgelt,
            ULONG *pceltFetched);
    [call_as(Next)]
    HRESULT RemoteNext(
            [in] ULONG celt,
            [out, size_is(celt), length_is(*pceltFetched)]
            IMoniker **rgelt,
            [out] ULONG *pceltFetched);

    HRESULT Skip([in] ULONG celt);
    HRESULT Reset();
    HRESULT Clone([out] IEnumMoniker **ppenum);
}

cpp_quote("#ifndef __IRunnableObject_INTERFACE_DEFINED__")
cpp_quote("#define __IRunnableObject_INTERFACE_DEFINED__")
cpp_quote("  typedef IRunnableObject *LPRUNNABLEOBJECT;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IRunnableObject;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IRunnableObject : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetRunningClass(LPCLSID lpClsid) = 0;")
cpp_quote("    virtual HRESULT WINAPI Run(LPBINDCTX pbc) = 0;")
cpp_quote("    virtual WINBOOL WINAPI IsRunning(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI LockRunning(WINBOOL fLock,WINBOOL fLastUnlockCloses) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetContainedObject(WINBOOL fContained) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IRunnableObjectVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IRunnableObject *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IRunnableObject *This);")
cpp_quote("      ULONG (WINAPI *Release)(IRunnableObject *This);")
cpp_quote("      HRESULT (WINAPI *GetRunningClass)(IRunnableObject *This,LPCLSID lpClsid);")
cpp_quote("      HRESULT (WINAPI *Run)(IRunnableObject *This,LPBINDCTX pbc);")
cpp_quote("      WINBOOL (WINAPI *IsRunning)(IRunnableObject *This);")
cpp_quote("      HRESULT (WINAPI *LockRunning)(IRunnableObject *This,WINBOOL fLock,WINBOOL fLastUnlockCloses);")
cpp_quote("      HRESULT (WINAPI *SetContainedObject)(IRunnableObject *This,WINBOOL fContained);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IRunnableObjectVtbl;")
cpp_quote("  struct IRunnableObject {")
cpp_quote("    CONST_VTBL struct IRunnableObjectVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IRunnableObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IRunnableObject_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IRunnableObject_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IRunnableObject_GetRunningClass(This,lpClsid) (This)->lpVtbl->GetRunningClass(This,lpClsid)")
cpp_quote("#define IRunnableObject_Run(This,pbc) (This)->lpVtbl->Run(This,pbc)")
cpp_quote("#define IRunnableObject_IsRunning(This) (This)->lpVtbl->IsRunning(This)")
cpp_quote("#define IRunnableObject_LockRunning(This,fLock,fLastUnlockCloses) (This)->lpVtbl->LockRunning(This,fLock,fLastUnlockCloses)")
cpp_quote("#define IRunnableObject_SetContainedObject(This,fContained) (This)->lpVtbl->SetContainedObject(This,fContained)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IRunnableObject_GetRunningClass_Proxy(IRunnableObject *This,LPCLSID lpClsid);")
cpp_quote("  void __RPC_STUB IRunnableObject_GetRunningClass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRunnableObject_Run_Proxy(IRunnableObject *This,LPBINDCTX pbc);")
cpp_quote("  void __RPC_STUB IRunnableObject_Run_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRunnableObject_RemoteIsRunning_Proxy(IRunnableObject *This);")
cpp_quote("  void __RPC_STUB IRunnableObject_RemoteIsRunning_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRunnableObject_LockRunning_Proxy(IRunnableObject *This,WINBOOL fLock,WINBOOL fLastUnlockCloses);")
cpp_quote("  void __RPC_STUB IRunnableObject_LockRunning_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRunnableObject_SetContainedObject_Proxy(IRunnableObject *This,WINBOOL fContained);")
cpp_quote("  void __RPC_STUB IRunnableObject_SetContainedObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")

[
    object,
    uuid(00000010-0000-0000-C000-000000000046)
]
interface IRunningObjectTable : IUnknown
{
    typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE;

    HRESULT Register(
            [in] DWORD grfFlags,
            [in, unique] IUnknown *punkObject,
            [in, unique] IMoniker *pmkObjectName,
            [out] DWORD *pdwRegister);

    HRESULT Revoke([in] DWORD dwRegister);
    HRESULT IsRunning([in, unique] IMoniker *pmkObjectName);

    HRESULT GetObject(
            [in, unique] IMoniker *pmkObjectName,
            [out] IUnknown **ppunkObject);

    HRESULT NoteChangeTime(
            [in] DWORD dwRegister,
            [in] FILETIME *pfiletime);

    HRESULT GetTimeOfLastChange(
            [in, unique] IMoniker *pmkObjectName,
            [out] FILETIME *pfiletime);

    HRESULT EnumRunning([out] IEnumMoniker **ppenumMoniker);
}

[
    object,
    uuid(0000010c-0000-0000-C000-000000000046)
]
interface IPersist : IUnknown {
    typedef [unique] IPersist *LPPERSIST;

    HRESULT GetClassID([out] CLSID *pClassID);
}

[
    object,
    uuid(00000109-0000-0000-c000-000000000046),
    pointer_default(unique)
]
interface IPersistStream : IPersist
{
    typedef [unique] IPersistStream *LPPERSISTSTREAM;

    HRESULT IsDirty();
    HRESULT Load([in, unique] IStream *pStm);

    HRESULT Save(
            [in, unique] IStream *pStm,
            [in] BOOL fClearDirty);

    HRESULT GetSizeMax([out] ULARGE_INTEGER *pcbSize);
}

[
    object,
    uuid(0000000f-0000-0000-C000-000000000046),
    pointer_default(unique)
]

interface IMoniker : IPersistStream
{
    typedef [unique] IMoniker *LPMONIKER;

    typedef enum tagMKSYS {
        MKSYS_NONE = 0,
        MKSYS_GENERICCOMPOSITE = 1,
        MKSYS_FILEMONIKER = 2,
        MKSYS_ANTIMONIKER = 3,
        MKSYS_ITEMMONIKER = 4,
        MKSYS_POINTERMONIKER = 5,
        MKSYS_CLASSMONIKER = 7,
        MKSYS_OBJREFMONIKER = 8,
        MKSYS_SESSIONMONIKER = 9,
        MKSYS_LUAMONIKER = 10
    } MKSYS;

    typedef [v1_enum] enum tagMKREDUCE {
        MKRREDUCE_ONE         = 3<<16,
        MKRREDUCE_TOUSER      = 2<<16,
        MKRREDUCE_THROUGHUSER = 1<<16,
        MKRREDUCE_ALL         = 0
    } MKRREDUCE;

    [local]
    HRESULT BindToObject(
            [in, unique] IBindCtx *pbc,
            [in, unique] IMoniker *pmkToLeft,
            [in] REFIID riidResult,
            [out, iid_is(riidResult)] void **ppvResult);
    [call_as(BindToObject)]
    HRESULT RemoteBindToObject(
            [in, unique] IBindCtx *pbc,
            [in, unique] IMoniker *pmkToLeft,
            [in] REFIID riidResult,
            [out, iid_is(riidResult)] IUnknown **ppvResult);

    [local]
    HRESULT BindToStorage(
            [in, unique] IBindCtx *pbc,
            [in, unique] IMoniker *pmkToLeft,
            [in] REFIID riid,
            [out, iid_is(riid)] void **ppvObj);
    [call_as(BindToStorage)]
    HRESULT RemoteBindToStorage(
            [in, unique] IBindCtx *pbc,
            [in, unique] IMoniker *pmkToLeft,
            [in] REFIID riid,
            [out, iid_is(riid)] IUnknown **ppvObj);

    HRESULT Reduce(
            [in, unique] IBindCtx *pbc,
            [in] DWORD dwReduceHowFar,
            [in, out, unique] IMoniker **ppmkToLeft,
            [out] IMoniker **ppmkReduced);

    HRESULT ComposeWith(
            [in, unique] IMoniker *pmkRight,
            [in] BOOL fOnlyIfNotGeneric,
            [out] IMoniker **ppmkComposite);

    HRESULT Enum(
            [in] BOOL fForward,
            [out] IEnumMoniker **ppenumMoniker);

    HRESULT IsEqual([in, unique] IMoniker *pmkOtherMoniker);
    HRESULT Hash([out] DWORD *pdwHash);

    HRESULT IsRunning(
            [in, unique] IBindCtx *pbc,
            [in, unique] IMoniker *pmkToLeft,
            [in, unique] IMoniker *pmkNewlyRunning);

    HRESULT GetTimeOfLastChange(
            [in, unique] IBindCtx *pbc,
            [in, unique] IMoniker *pmkToLeft,
            [out] FILETIME *pFileTime);

    HRESULT Inverse([out] IMoniker **ppmk);

    HRESULT CommonPrefixWith(
            [in, unique] IMoniker *pmkOther,
            [out] IMoniker **ppmkPrefix);

    HRESULT RelativePathTo(
            [in, unique] IMoniker *pmkOther,
            [out] IMoniker **ppmkRelPath);

    HRESULT GetDisplayName(
            [in, unique] IBindCtx *pbc,
            [in, unique] IMoniker *pmkToLeft,
            [out] LPOLESTR *ppszDisplayName);

    HRESULT ParseDisplayName(
            [in, unique] IBindCtx *pbc,
            [in, unique] IMoniker *pmkToLeft,
            [in] LPOLESTR pszDisplayName,
            [out] ULONG *pchEaten,
            [out] IMoniker **ppmkOut);

    HRESULT IsSystemMoniker([out] DWORD *pdwMksys);
}

cpp_quote("#ifndef __IROTData_INTERFACE_DEFINED__")
cpp_quote("#define __IROTData_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IROTData;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IROTData : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetComparisonData(byte *pbData,ULONG cbMax,ULONG *pcbData) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IROTDataVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IROTData *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IROTData *This);")
cpp_quote("      ULONG (WINAPI *Release)(IROTData *This);")
cpp_quote("      HRESULT (WINAPI *GetComparisonData)(IROTData *This,byte *pbData,ULONG cbMax,ULONG *pcbData);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IROTDataVtbl;")
cpp_quote("  struct IROTData {")
cpp_quote("    CONST_VTBL struct IROTDataVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IROTData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IROTData_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IROTData_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IROTData_GetComparisonData(This,pbData,cbMax,pcbData) (This)->lpVtbl->GetComparisonData(This,pbData,cbMax,pcbData)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IROTData_GetComparisonData_Proxy(IROTData *This,byte *pbData,ULONG cbMax,ULONG *pcbData);")
cpp_quote("  void __RPC_STUB IROTData_GetComparisonData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")

[
    object,
    uuid(00000101-0000-0000-c000-000000000046),
    pointer_default(unique)
]
interface IEnumString : IUnknown
{
    typedef [unique] IEnumString *LPENUMSTRING;

    [local]
    HRESULT Next(
            [in] ULONG celt,
            LPOLESTR *rgelt,
            ULONG *pceltFetched);
    [call_as(Next)]
    HRESULT RemoteNext(
            [in] ULONG celt,
            [out, size_is(celt), length_is(*pceltFetched)]
            LPOLESTR *rgelt,
            [out] ULONG *pceltFetched);

    HRESULT Skip([in] ULONG celt);
    HRESULT Reset();
    HRESULT Clone([out] IEnumString **ppenum);
}

[
    object,
    uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),
    pointer_default(unique)
]
interface ISequentialStream : IUnknown
{
    [local]
    HRESULT Read(
            void *pv,
            [in] ULONG cb,
            ULONG *pcbRead);
    [call_as(Read)]
    HRESULT RemoteRead(
            [out, size_is(cb), length_is(*pcbRead)] byte *pv,
            [in] ULONG cb,
            [out] ULONG *pcbRead);

    [local]
    HRESULT Write(
            void const *pv,
            [in] ULONG cb,
            ULONG *pcbWritten);
    [call_as(Write)]
    HRESULT RemoteWrite(
            [in, size_is(cb)] byte const *pv,
            [in] ULONG cb,
            [out] ULONG *pcbWritten);
}

[
    object,
    uuid(0000000c-0000-0000-c000-000000000046),
    pointer_default(unique)
]
interface IStream : ISequentialStream
{
    typedef [unique] IStream *LPSTREAM;

    typedef struct tagSTATSTG {
        LPOLESTR pwcsName;
        DWORD type;
        ULARGE_INTEGER cbSize;
        FILETIME mtime;
        FILETIME ctime;
        FILETIME atime;
        DWORD grfMode;
        DWORD grfLocksSupported;
        CLSID clsid;
        DWORD grfStateBits;
        DWORD reserved;
    } STATSTG;

    typedef enum tagSTGTY {
        STGTY_STORAGE   = 1,
        STGTY_STREAM    = 2,
        STGTY_LOCKBYTES = 3,
        STGTY_PROPERTY  = 4
    } STGTY;

    typedef enum tagSTREAM_SEEK {
        STREAM_SEEK_SET = 0,
        STREAM_SEEK_CUR = 1,
        STREAM_SEEK_END = 2
    } STREAM_SEEK;

    typedef enum tagLOCKTYPE {
        LOCK_WRITE     = 1,
        LOCK_EXCLUSIVE = 2,
        LOCK_ONLYONCE  = 4
    } LOCKTYPE;

    [local]
    HRESULT Seek(
            [in] LARGE_INTEGER dlibMove,
            [in] DWORD dwOrigin,
            ULARGE_INTEGER *plibNewPosition);
    [call_as(Seek)]
    HRESULT RemoteSeek(
            [in] LARGE_INTEGER dlibMove,
            [in] DWORD dwOrigin,
            [out] ULARGE_INTEGER *plibNewPosition);

    HRESULT SetSize([in] ULARGE_INTEGER libNewSize);

    [local]
    HRESULT CopyTo(
            [in, unique] IStream *pstm,
            [in] ULARGE_INTEGER cb,
            ULARGE_INTEGER *pcbRead,
            ULARGE_INTEGER *pcbWritten);
    [call_as(CopyTo)]
    HRESULT RemoteCopyTo(
            [in, unique] IStream *pstm,
            [in] ULARGE_INTEGER cb,
            [out] ULARGE_INTEGER *pcbRead,
            [out] ULARGE_INTEGER *pcbWritten);

    HRESULT Commit([in] DWORD grfCommitFlags);
    HRESULT Revert();

    HRESULT LockRegion(
            [in] ULARGE_INTEGER libOffset,
            [in] ULARGE_INTEGER cb,
            [in] DWORD dwLockType);

    HRESULT UnlockRegion(
            [in] ULARGE_INTEGER libOffset,
            [in] ULARGE_INTEGER cb,
            [in] DWORD dwLockType);

    HRESULT Stat(
            [out] STATSTG *pstatstg,
            [in] DWORD grfStatFlag);

    HRESULT Clone([out] IStream **ppstm);
}

[
    object,
    uuid(0000000d-0000-0000-C000-000000000046),
    pointer_default(unique)
]
interface IEnumSTATSTG : IUnknown
{
    typedef [unique] IEnumSTATSTG *LPENUMSTATSTG;

    [local]
    HRESULT Next(
            [in] ULONG celt,
            [out, size_is(celt), length_is(*pceltFetched)] STATSTG *rgelt,
            [out] ULONG *pceltFetched);
    [call_as(Next)]
    HRESULT RemoteNext(
            [in] ULONG celt,
            [out, size_is(celt), length_is(*pceltFetched)] STATSTG *rgelt,
            [out] ULONG *pceltFetched);

    HRESULT Skip([in] ULONG celt);
    HRESULT Reset();
    HRESULT Clone([out] IEnumSTATSTG **ppenum);
}

[
    object,
    uuid(0000000b-0000-0000-C000-000000000046),
    pointer_default(unique)
]
interface IStorage : IUnknown
{
    typedef [unique] IStorage *LPSTORAGE;

    typedef struct tagRemSNB {
        unsigned long ulCntStr;
        unsigned long ulCntChar;
        [size_is(ulCntChar)] OLECHAR rgString[];
    } RemSNB;

    typedef [unique] RemSNB *wireSNB;
    typedef [wire_marshal(wireSNB)] OLECHAR **SNB;

    HRESULT CreateStream(
            [in] LPCOLESTR pwcsName,
            [in] DWORD grfMode,
            [in] DWORD reserved1,
            [in] DWORD reserved2,
            [out] IStream **ppstm);

    [local]
    HRESULT OpenStream(
            [in] LPCOLESTR pwcsName,
            [in, unique] void *reserved1,
            [in] DWORD grfMode,
            [in] DWORD reserved2,
            [out] IStream **ppstm);
    [call_as(OpenStream)]
    HRESULT RemoteOpenStream(
            [in] LPCOLESTR pwcsName,
            [in] unsigned long cbReserved1,
            [in, unique, size_is(cbReserved1)] byte *reserved1,
            [in] DWORD grfMode,
            [in] DWORD reserved2,
            [out] IStream **ppstm);

    HRESULT CreateStorage(
            [in] LPCOLESTR pwcsName,
            [in] DWORD grfMode,
            [in] DWORD dwStgFmt,
            [in] DWORD reserved2,
            [out] IStorage **ppstg);

    HRESULT OpenStorage(
            [in, unique] LPCOLESTR pwcsName,
            [in, unique] IStorage *pstgPriority,
            [in] DWORD grfMode,
            [in, unique] SNB snbExclude,
            [in] DWORD reserved,
            [out] IStorage **ppstg);

    HRESULT CopyTo(
            [in] DWORD ciidExclude,
            [in, unique, size_is(ciidExclude)] const IID *rgiidExclude,
            [in, unique] SNB snbExclude,
            [in, unique] IStorage *pstgDest);

    HRESULT MoveElementTo(
            [in] LPCOLESTR pwcsName,
            [in, unique] IStorage *pstgDest,
            [in] LPCOLESTR pwcsNewName,
            [in] DWORD grfFlags);

    HRESULT Commit([in] DWORD grfCommitFlags);
    HRESULT Revert();

    [local]
    HRESULT EnumElements(
            [in] DWORD reserved1,
            [in, unique, size_is(1)] void *reserved2,
            [in] DWORD reserved3,
            [out] IEnumSTATSTG **ppenum);
    [call_as(EnumElements)]
    HRESULT RemoteEnumElements(
            [in] DWORD reserved1,
            [in] unsigned long cbReserved2,
            [in, unique, size_is(cbReserved2)] byte *reserved2,
            [in] DWORD reserved3,
            [out] IEnumSTATSTG **ppenum);

    HRESULT DestroyElement(
            [in] LPCOLESTR pwcsName);

    HRESULT RenameElement(
            [in] LPCOLESTR pwcsOldName,
            [in] LPCOLESTR pwcsNewName);

    HRESULT SetElementTimes(
            [in, unique] LPCOLESTR pwcsName,
            [in, unique] const FILETIME *pctime,
            [in, unique] const FILETIME *patime,
            [in, unique] const FILETIME *pmtime);

    HRESULT SetClass(
            [in] REFCLSID clsid);

    HRESULT SetStateBits(
            [in] DWORD grfStateBits,
            [in] DWORD grfMask);

    HRESULT Stat(
            [out] STATSTG *pstatstg,
            [in] DWORD grfStatFlag);
}

cpp_quote("#ifndef __IPersistFile_INTERFACE_DEFINED__")
cpp_quote("#define __IPersistFile_INTERFACE_DEFINED__")
cpp_quote("  typedef IPersistFile *LPPERSISTFILE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPersistFile;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPersistFile : public IPersist {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI IsDirty(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Load(LPCOLESTR pszFileName,DWORD dwMode) = 0;")
cpp_quote("    virtual HRESULT WINAPI Save(LPCOLESTR pszFileName,WINBOOL fRemember) = 0;")
cpp_quote("    virtual HRESULT WINAPI SaveCompleted(LPCOLESTR pszFileName) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetCurFile(LPOLESTR *ppszFileName) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPersistFileVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPersistFile *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPersistFile *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPersistFile *This);")
cpp_quote("      HRESULT (WINAPI *GetClassID)(IPersistFile *This,CLSID *pClassID);")
cpp_quote("      HRESULT (WINAPI *IsDirty)(IPersistFile *This);")
cpp_quote("      HRESULT (WINAPI *Load)(IPersistFile *This,LPCOLESTR pszFileName,DWORD dwMode);")
cpp_quote("      HRESULT (WINAPI *Save)(IPersistFile *This,LPCOLESTR pszFileName,WINBOOL fRemember);")
cpp_quote("      HRESULT (WINAPI *SaveCompleted)(IPersistFile *This,LPCOLESTR pszFileName);")
cpp_quote("      HRESULT (WINAPI *GetCurFile)(IPersistFile *This,LPOLESTR *ppszFileName);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPersistFileVtbl;")
cpp_quote("  struct IPersistFile {")
cpp_quote("    CONST_VTBL struct IPersistFileVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPersistFile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPersistFile_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPersistFile_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPersistFile_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)")
cpp_quote("#define IPersistFile_IsDirty(This) (This)->lpVtbl->IsDirty(This)")
cpp_quote("#define IPersistFile_Load(This,pszFileName,dwMode) (This)->lpVtbl->Load(This,pszFileName,dwMode)")
cpp_quote("#define IPersistFile_Save(This,pszFileName,fRemember) (This)->lpVtbl->Save(This,pszFileName,fRemember)")
cpp_quote("#define IPersistFile_SaveCompleted(This,pszFileName) (This)->lpVtbl->SaveCompleted(This,pszFileName)")
cpp_quote("#define IPersistFile_GetCurFile(This,ppszFileName) (This)->lpVtbl->GetCurFile(This,ppszFileName)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPersistFile_IsDirty_Proxy(IPersistFile *This);")
cpp_quote("  void __RPC_STUB IPersistFile_IsDirty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistFile_Load_Proxy(IPersistFile *This,LPCOLESTR pszFileName,DWORD dwMode);")
cpp_quote("  void __RPC_STUB IPersistFile_Load_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistFile_Save_Proxy(IPersistFile *This,LPCOLESTR pszFileName,WINBOOL fRemember);")
cpp_quote("  void __RPC_STUB IPersistFile_Save_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistFile_SaveCompleted_Proxy(IPersistFile *This,LPCOLESTR pszFileName);")
cpp_quote("  void __RPC_STUB IPersistFile_SaveCompleted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistFile_GetCurFile_Proxy(IPersistFile *This,LPOLESTR *ppszFileName);")
cpp_quote("  void __RPC_STUB IPersistFile_GetCurFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPersistStorage_INTERFACE_DEFINED__")
cpp_quote("#define __IPersistStorage_INTERFACE_DEFINED__")
cpp_quote("  typedef IPersistStorage *LPPERSISTSTORAGE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPersistStorage;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPersistStorage : public IPersist {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI IsDirty(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI InitNew(IStorage *pStg) = 0;")
cpp_quote("    virtual HRESULT WINAPI Load(IStorage *pStg) = 0;")
cpp_quote("    virtual HRESULT WINAPI Save(IStorage *pStgSave,WINBOOL fSameAsLoad) = 0;")
cpp_quote("    virtual HRESULT WINAPI SaveCompleted(IStorage *pStgNew) = 0;")
cpp_quote("    virtual HRESULT WINAPI HandsOffStorage(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPersistStorageVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPersistStorage *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPersistStorage *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPersistStorage *This);")
cpp_quote("      HRESULT (WINAPI *GetClassID)(IPersistStorage *This,CLSID *pClassID);")
cpp_quote("      HRESULT (WINAPI *IsDirty)(IPersistStorage *This);")
cpp_quote("      HRESULT (WINAPI *InitNew)(IPersistStorage *This,IStorage *pStg);")
cpp_quote("      HRESULT (WINAPI *Load)(IPersistStorage *This,IStorage *pStg);")
cpp_quote("      HRESULT (WINAPI *Save)(IPersistStorage *This,IStorage *pStgSave,WINBOOL fSameAsLoad);")
cpp_quote("      HRESULT (WINAPI *SaveCompleted)(IPersistStorage *This,IStorage *pStgNew);")
cpp_quote("      HRESULT (WINAPI *HandsOffStorage)(IPersistStorage *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPersistStorageVtbl;")
cpp_quote("  struct IPersistStorage {")
cpp_quote("    CONST_VTBL struct IPersistStorageVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPersistStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPersistStorage_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPersistStorage_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPersistStorage_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)")
cpp_quote("#define IPersistStorage_IsDirty(This) (This)->lpVtbl->IsDirty(This)")
cpp_quote("#define IPersistStorage_InitNew(This,pStg) (This)->lpVtbl->InitNew(This,pStg)")
cpp_quote("#define IPersistStorage_Load(This,pStg) (This)->lpVtbl->Load(This,pStg)")
cpp_quote("#define IPersistStorage_Save(This,pStgSave,fSameAsLoad) (This)->lpVtbl->Save(This,pStgSave,fSameAsLoad)")
cpp_quote("#define IPersistStorage_SaveCompleted(This,pStgNew) (This)->lpVtbl->SaveCompleted(This,pStgNew)")
cpp_quote("#define IPersistStorage_HandsOffStorage(This) (This)->lpVtbl->HandsOffStorage(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPersistStorage_IsDirty_Proxy(IPersistStorage *This);")
cpp_quote("  void __RPC_STUB IPersistStorage_IsDirty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistStorage_InitNew_Proxy(IPersistStorage *This,IStorage *pStg);")
cpp_quote("  void __RPC_STUB IPersistStorage_InitNew_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistStorage_Load_Proxy(IPersistStorage *This,IStorage *pStg);")
cpp_quote("  void __RPC_STUB IPersistStorage_Load_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistStorage_Save_Proxy(IPersistStorage *This,IStorage *pStgSave,WINBOOL fSameAsLoad);")
cpp_quote("  void __RPC_STUB IPersistStorage_Save_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistStorage_SaveCompleted_Proxy(IPersistStorage *This,IStorage *pStgNew);")
cpp_quote("  void __RPC_STUB IPersistStorage_SaveCompleted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistStorage_HandsOffStorage_Proxy(IPersistStorage *This);")
cpp_quote("  void __RPC_STUB IPersistStorage_HandsOffStorage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ILockBytes_INTERFACE_DEFINED__")
cpp_quote("#define __ILockBytes_INTERFACE_DEFINED__")
cpp_quote("  typedef ILockBytes *LPLOCKBYTES;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ILockBytes;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ILockBytes : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI ReadAt(ULARGE_INTEGER ulOffset,void *pv,ULONG cb,ULONG *pcbRead) = 0;")
cpp_quote("    virtual HRESULT WINAPI WriteAt(ULARGE_INTEGER ulOffset,const void *pv,ULONG cb,ULONG *pcbWritten) = 0;")
cpp_quote("    virtual HRESULT WINAPI Flush(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetSize(ULARGE_INTEGER cb) = 0;")
cpp_quote("    virtual HRESULT WINAPI LockRegion(ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) = 0;")
cpp_quote("    virtual HRESULT WINAPI UnlockRegion(ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) = 0;")
cpp_quote("    virtual HRESULT WINAPI Stat(STATSTG *pstatstg,DWORD grfStatFlag) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ILockBytesVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ILockBytes *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ILockBytes *This);")
cpp_quote("      ULONG (WINAPI *Release)(ILockBytes *This);")
cpp_quote("      HRESULT (WINAPI *ReadAt)(ILockBytes *This,ULARGE_INTEGER ulOffset,void *pv,ULONG cb,ULONG *pcbRead);")
cpp_quote("      HRESULT (WINAPI *WriteAt)(ILockBytes *This,ULARGE_INTEGER ulOffset,const void *pv,ULONG cb,ULONG *pcbWritten);")
cpp_quote("      HRESULT (WINAPI *Flush)(ILockBytes *This);")
cpp_quote("      HRESULT (WINAPI *SetSize)(ILockBytes *This,ULARGE_INTEGER cb);")
cpp_quote("      HRESULT (WINAPI *LockRegion)(ILockBytes *This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType);")
cpp_quote("      HRESULT (WINAPI *UnlockRegion)(ILockBytes *This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType);")
cpp_quote("      HRESULT (WINAPI *Stat)(ILockBytes *This,STATSTG *pstatstg,DWORD grfStatFlag);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ILockBytesVtbl;")
cpp_quote("  struct ILockBytes {")
cpp_quote("    CONST_VTBL struct ILockBytesVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ILockBytes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ILockBytes_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ILockBytes_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ILockBytes_ReadAt(This,ulOffset,pv,cb,pcbRead) (This)->lpVtbl->ReadAt(This,ulOffset,pv,cb,pcbRead)")
cpp_quote("#define ILockBytes_WriteAt(This,ulOffset,pv,cb,pcbWritten) (This)->lpVtbl->WriteAt(This,ulOffset,pv,cb,pcbWritten)")
cpp_quote("#define ILockBytes_Flush(This) (This)->lpVtbl->Flush(This)")
cpp_quote("#define ILockBytes_SetSize(This,cb) (This)->lpVtbl->SetSize(This,cb)")
cpp_quote("#define ILockBytes_LockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->LockRegion(This,libOffset,cb,dwLockType)")
cpp_quote("#define ILockBytes_UnlockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType)")
cpp_quote("#define ILockBytes_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ILockBytes_RemoteReadAt_Proxy(ILockBytes *This,ULARGE_INTEGER ulOffset,byte *pv,ULONG cb,ULONG *pcbRead);")
cpp_quote("  void __RPC_STUB ILockBytes_RemoteReadAt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ILockBytes_RemoteWriteAt_Proxy(ILockBytes *This,ULARGE_INTEGER ulOffset,const byte *pv,ULONG cb,ULONG *pcbWritten);")
cpp_quote("  void __RPC_STUB ILockBytes_RemoteWriteAt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ILockBytes_Flush_Proxy(ILockBytes *This);")
cpp_quote("  void __RPC_STUB ILockBytes_Flush_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ILockBytes_SetSize_Proxy(ILockBytes *This,ULARGE_INTEGER cb);")
cpp_quote("  void __RPC_STUB ILockBytes_SetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ILockBytes_LockRegion_Proxy(ILockBytes *This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType);")
cpp_quote("  void __RPC_STUB ILockBytes_LockRegion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ILockBytes_UnlockRegion_Proxy(ILockBytes *This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType);")
cpp_quote("  void __RPC_STUB ILockBytes_UnlockRegion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ILockBytes_Stat_Proxy(ILockBytes *This,STATSTG *pstatstg,DWORD grfStatFlag);")
cpp_quote("  void __RPC_STUB ILockBytes_Stat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")

[
    object,
    uuid(00000103-0000-0000-C000-000000000046),
    pointer_default(unique)
]
interface IEnumFORMATETC : IUnknown
{
    typedef [unique] IEnumFORMATETC *LPENUMFORMATETC;

    typedef struct tagDVTARGETDEVICE {
        DWORD tdSize;
        WORD tdDriverNameOffset;
        WORD tdDeviceNameOffset;
        WORD tdPortNameOffset;
        WORD tdExtDevmodeOffset;
        [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))] BYTE tdData[];
    } DVTARGETDEVICE;

    typedef CLIPFORMAT *LPCLIPFORMAT;

    typedef struct tagFORMATETC {
        CLIPFORMAT cfFormat;
        [unique] DVTARGETDEVICE *ptd;
        DWORD dwAspect;
        LONG lindex;
        DWORD tymed;
    } FORMATETC, *LPFORMATETC;

    [local]
    HRESULT Next(
            [in] ULONG celt,
            [out, size_is(celt), length_is(*pceltFetched)]
            FORMATETC *rgelt,
            [out] ULONG *pceltFetched);
    [call_as(Next)]
    HRESULT RemoteNext(
            [in] ULONG celt,
            [out, size_is(celt), length_is(*pceltFetched)]
            FORMATETC *rgelt,
            [out] ULONG *pceltFetched);

    HRESULT Skip([in] ULONG celt);
    HRESULT Reset();
    HRESULT Clone([out] IEnumFORMATETC **ppenum);
}

[
    object,
    uuid(00000105-0000-0000-c000-000000000046),
    pointer_default(unique)
]
interface IEnumSTATDATA : IUnknown
{
    typedef [unique] IEnumSTATDATA *LPENUMSTATDATA;

    typedef enum tagADVF {
        ADVF_NODATA = 1,
        ADVF_PRIMEFIRST = 2,
        ADVF_ONLYONCE = 4,
        ADVF_DATAONSTOP = 64,
        ADVFCACHE_NOHANDLER = 8,
        ADVFCACHE_FORCEBUILTIN = 16,
        ADVFCACHE_ONSAVE = 32
    } ADVF;

    typedef struct tagSTATDATA {
        FORMATETC formatetc;
        DWORD advf;
        [unique] IAdviseSink *pAdvSink;
        DWORD dwConnection;
    } STATDATA;

    typedef STATDATA *LPSTATDATA;

    [local]
    HRESULT Next(
            [in] ULONG celt,
            STATDATA *rgelt,
            ULONG *pceltFetched);
    [call_as(Next)]
    HRESULT RemoteNext(
            [in] ULONG celt,
            [out, size_is(celt), length_is(*pceltFetched)] STATDATA *rgelt,
            [out] ULONG *pceltFetched);

    HRESULT Skip([in] ULONG celt);
    HRESULT Reset();
    HRESULT Clone([out] IEnumSTATDATA **ppenum);
}

cpp_quote("#ifndef __IRootStorage_INTERFACE_DEFINED__")
cpp_quote("#define __IRootStorage_INTERFACE_DEFINED__")
cpp_quote("  typedef IRootStorage *LPROOTSTORAGE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IRootStorage;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IRootStorage : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SwitchToFile(LPOLESTR pszFile) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IRootStorageVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IRootStorage *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IRootStorage *This);")
cpp_quote("      ULONG (WINAPI *Release)(IRootStorage *This);")
cpp_quote("      HRESULT (WINAPI *SwitchToFile)(IRootStorage *This,LPOLESTR pszFile);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IRootStorageVtbl;")
cpp_quote("  struct IRootStorage {")
cpp_quote("    CONST_VTBL struct IRootStorageVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IRootStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IRootStorage_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IRootStorage_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IRootStorage_SwitchToFile(This,pszFile) (This)->lpVtbl->SwitchToFile(This,pszFile)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IRootStorage_SwitchToFile_Proxy(IRootStorage *This,LPOLESTR pszFile);")
cpp_quote("  void __RPC_STUB IRootStorage_SwitchToFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")

[
    object,
    uuid(0000010f-0000-0000-C000-000000000046),
    /* FIXME: not yet supported by widl: async_uuid(00000150-0000-0000-C000-000000000046), */
    pointer_default(unique)
]
interface IAdviseSink : IUnknown
{
    typedef IAdviseSink *LPADVISESINK;

    typedef [v1_enum] enum tagTYMED {
        TYMED_HGLOBAL = 1,
        TYMED_FILE = 2,
        TYMED_ISTREAM = 4,
        TYMED_ISTORAGE = 8,
        TYMED_GDI = 16,
        TYMED_MFPICT = 32,
        TYMED_ENHMF = 64,
        TYMED_NULL = 0
    } TYMED;

    typedef struct tagRemSTGMEDIUM {
        DWORD tymed;
        DWORD dwHandleType;
        unsigned long pData;
        unsigned long pUnkForRelease;
        unsigned long cbData;
        [size_is(cbData)] byte data[];
    } RemSTGMEDIUM;

/* FIXME: Remove #if 0 */
cpp_quote("#if 0")
    typedef struct tagSTGMEDIUM {
        DWORD tymed;
        [switch_is(tymed)] union {
            [case(TYMED_GDI)]      HBITMAP hBitmap;
            [case(TYMED_MFPICT)]   HMETAFILEPICT hMetaFilePict;
            [case(TYMED_ENHMF)]    HENHMETAFILE hEnhMetaFile;
            [case(TYMED_HGLOBAL)]  HGLOBAL hGlobal;
            [case(TYMED_FILE)]     LPOLESTR lpszFileName;
            [case(TYMED_ISTREAM)]  IStream *pstm;
            [case(TYMED_ISTORAGE)] IStorage *pstg;
            [default]              ;
        } DUMMYUNIONNAME;
        [unique] IUnknown *pUnkForRelease;
    } uSTGMEDIUM;
cpp_quote("#else")
cpp_quote("  typedef struct tagSTGMEDIUM {")
cpp_quote("    DWORD tymed;")
cpp_quote("    __C89_NAMELESS union {")
cpp_quote("      HBITMAP hBitmap;")
cpp_quote("      HMETAFILEPICT hMetaFilePict;")
cpp_quote("      HENHMETAFILE hEnhMetaFile;")
cpp_quote("      HGLOBAL hGlobal;")
cpp_quote("      LPOLESTR lpszFileName;")
cpp_quote("      IStream *pstm;")
cpp_quote("      IStorage *pstg;")
cpp_quote("    } DUMMYUNIONNAME;")
cpp_quote("    IUnknown *pUnkForRelease;")
cpp_quote("  } uSTGMEDIUM;")
cpp_quote("#endif")

#define OBJ_PAL     5
#define OBJ_BITMAP  7

    typedef union _GDI_OBJECT switch(DWORD ObjectType) u {
        case OBJ_BITMAP: wireHBITMAP  hBitmap;
        case OBJ_PAL:    wireHPALETTE hPalette;
        default:         wireHGLOBAL  hGeneric;
    } GDI_OBJECT;

    typedef struct _userSTGMEDIUM {
        union _STGMEDIUM_UNION switch(DWORD tymed) u {
            case TYMED_NULL:     ;
            case TYMED_MFPICT:   wireHMETAFILEPICT hMetaFilePict;
            case TYMED_ENHMF:    wireHENHMETAFILE  hHEnhMetaFile;
            case TYMED_GDI:      GDI_OBJECT*       hGdiHandle;
            case TYMED_HGLOBAL:  wireHGLOBAL       hGlobal;
            case TYMED_FILE:     LPOLESTR          lpszFileName;
            case TYMED_ISTREAM:  BYTE_BLOB*        pstm;
            case TYMED_ISTORAGE: BYTE_BLOB*        pstg;
        } DUMMYUNIONNAME;
        IUnknown *              pUnkForRelease;
    } userSTGMEDIUM;

    typedef [unique] userSTGMEDIUM *wireSTGMEDIUM;
    typedef [wire_marshal(wireSTGMEDIUM)] uSTGMEDIUM STGMEDIUM;
    typedef [unique] userSTGMEDIUM  *wireASYNC_STGMEDIUM;
    typedef [wire_marshal(wireASYNC_STGMEDIUM)] STGMEDIUM ASYNC_STGMEDIUM;
    typedef STGMEDIUM *LPSTGMEDIUM;

    typedef struct _userFLAG_STGMEDIUM {
        long ContextFlags;
        long fPassOwnership;
        userSTGMEDIUM Stgmed;
    } userFLAG_STGMEDIUM;

    typedef [unique] userFLAG_STGMEDIUM  *wireFLAG_STGMEDIUM;

    typedef [wire_marshal(wireFLAG_STGMEDIUM)] struct _FLAG_STGMEDIUM {
        long ContextFlags;
        long fPassOwnership;
        STGMEDIUM Stgmed;
    } FLAG_STGMEDIUM;

    [local]
    void OnDataChange(
            [in, unique] FORMATETC *pFormatetc,
            [in, unique] STGMEDIUM *pStgmed);

    [local]
    void OnViewChange(
            [in] DWORD dwAspect,
            [in] LONG lindex);

    [local] void OnRename([in] IMoniker *pmk);
    [local] void OnSave();
    [local] void OnClose();

    [call_as(OnDataChange)]
    HRESULT  RemoteOnDataChange(
            [in, unique] FORMATETC *pFormatetc,
            [in, unique] ASYNC_STGMEDIUM *pStgmed);

    [call_as(OnViewChange)]
    HRESULT  RemoteOnViewChange(
            [in] DWORD dwAspect,
            [in] LONG lindex);

    [call_as(OnRename)] HRESULT  RemoteOnRename([in] IMoniker *pmk);
    [call_as(OnSave)] HRESULT RemoteOnSave();
    [call_as(OnClose)] HRESULT RemoteOnClose();
}

cpp_quote("#ifndef __AsyncIAdviseSink_INTERFACE_DEFINED__")
cpp_quote("#define __AsyncIAdviseSink_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_AsyncIAdviseSink;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct AsyncIAdviseSink : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual void WINAPI Begin_OnDataChange(FORMATETC *pFormatetc,STGMEDIUM *pStgmed) = 0;")
cpp_quote("    virtual void WINAPI Finish_OnDataChange(void) = 0;")
cpp_quote("    virtual void WINAPI Begin_OnViewChange(DWORD dwAspect,LONG lindex) = 0;")
cpp_quote("    virtual void WINAPI Finish_OnViewChange(void) = 0;")
cpp_quote("    virtual void WINAPI Begin_OnRename(IMoniker *pmk) = 0;")
cpp_quote("    virtual void WINAPI Finish_OnRename(void) = 0;")
cpp_quote("    virtual void WINAPI Begin_OnSave(void) = 0;")
cpp_quote("    virtual void WINAPI Finish_OnSave(void) = 0;")
cpp_quote("    virtual void WINAPI Begin_OnClose(void) = 0;")
cpp_quote("    virtual void WINAPI Finish_OnClose(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct AsyncIAdviseSinkVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(AsyncIAdviseSink *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(AsyncIAdviseSink *This);")
cpp_quote("      ULONG (WINAPI *Release)(AsyncIAdviseSink *This);")
cpp_quote("      void (WINAPI *Begin_OnDataChange)(AsyncIAdviseSink *This,FORMATETC *pFormatetc,STGMEDIUM *pStgmed);")
cpp_quote("      void (WINAPI *Finish_OnDataChange)(AsyncIAdviseSink *This);")
cpp_quote("      void (WINAPI *Begin_OnViewChange)(AsyncIAdviseSink *This,DWORD dwAspect,LONG lindex);")
cpp_quote("      void (WINAPI *Finish_OnViewChange)(AsyncIAdviseSink *This);")
cpp_quote("      void (WINAPI *Begin_OnRename)(AsyncIAdviseSink *This,IMoniker *pmk);")
cpp_quote("      void (WINAPI *Finish_OnRename)(AsyncIAdviseSink *This);")
cpp_quote("      void (WINAPI *Begin_OnSave)(AsyncIAdviseSink *This);")
cpp_quote("      void (WINAPI *Finish_OnSave)(AsyncIAdviseSink *This);")
cpp_quote("      void (WINAPI *Begin_OnClose)(AsyncIAdviseSink *This);")
cpp_quote("      void (WINAPI *Finish_OnClose)(AsyncIAdviseSink *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } AsyncIAdviseSinkVtbl;")
cpp_quote("  struct AsyncIAdviseSink {")
cpp_quote("    CONST_VTBL struct AsyncIAdviseSinkVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define AsyncIAdviseSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define AsyncIAdviseSink_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define AsyncIAdviseSink_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define AsyncIAdviseSink_Begin_OnDataChange(This,pFormatetc,pStgmed) (This)->lpVtbl->Begin_OnDataChange(This,pFormatetc,pStgmed)")
cpp_quote("#define AsyncIAdviseSink_Finish_OnDataChange(This) (This)->lpVtbl->Finish_OnDataChange(This)")
cpp_quote("#define AsyncIAdviseSink_Begin_OnViewChange(This,dwAspect,lindex) (This)->lpVtbl->Begin_OnViewChange(This,dwAspect,lindex)")
cpp_quote("#define AsyncIAdviseSink_Finish_OnViewChange(This) (This)->lpVtbl->Finish_OnViewChange(This)")
cpp_quote("#define AsyncIAdviseSink_Begin_OnRename(This,pmk) (This)->lpVtbl->Begin_OnRename(This,pmk)")
cpp_quote("#define AsyncIAdviseSink_Finish_OnRename(This) (This)->lpVtbl->Finish_OnRename(This)")
cpp_quote("#define AsyncIAdviseSink_Begin_OnSave(This) (This)->lpVtbl->Begin_OnSave(This)")
cpp_quote("#define AsyncIAdviseSink_Finish_OnSave(This) (This)->lpVtbl->Finish_OnSave(This)")
cpp_quote("#define AsyncIAdviseSink_Begin_OnClose(This) (This)->lpVtbl->Begin_OnClose(This)")
cpp_quote("#define AsyncIAdviseSink_Finish_OnClose(This) (This)->lpVtbl->Finish_OnClose(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Begin_RemoteOnDataChange_Proxy(AsyncIAdviseSink *This,FORMATETC *pFormatetc,ASYNC_STGMEDIUM *pStgmed);")
cpp_quote("  void __RPC_STUB AsyncIAdviseSink_Begin_RemoteOnDataChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Finish_RemoteOnDataChange_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  void __RPC_STUB AsyncIAdviseSink_Finish_RemoteOnDataChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Begin_RemoteOnViewChange_Proxy(AsyncIAdviseSink *This,DWORD dwAspect,LONG lindex);")
cpp_quote("  void __RPC_STUB AsyncIAdviseSink_Begin_RemoteOnViewChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Finish_RemoteOnViewChange_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  void __RPC_STUB AsyncIAdviseSink_Finish_RemoteOnViewChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Begin_RemoteOnRename_Proxy(AsyncIAdviseSink *This,IMoniker *pmk);")
cpp_quote("  void __RPC_STUB AsyncIAdviseSink_Begin_RemoteOnRename_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Finish_RemoteOnRename_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  void __RPC_STUB AsyncIAdviseSink_Finish_RemoteOnRename_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Begin_RemoteOnSave_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  void __RPC_STUB AsyncIAdviseSink_Begin_RemoteOnSave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Finish_RemoteOnSave_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  void __RPC_STUB AsyncIAdviseSink_Finish_RemoteOnSave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Begin_RemoteOnClose_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  void __RPC_STUB AsyncIAdviseSink_Begin_RemoteOnClose_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Finish_RemoteOnClose_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  void __RPC_STUB AsyncIAdviseSink_Finish_RemoteOnClose_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IAdviseSink2_INTERFACE_DEFINED__")
cpp_quote("#define __IAdviseSink2_INTERFACE_DEFINED__")
cpp_quote("  typedef IAdviseSink2 *LPADVISESINK2;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IAdviseSink2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IAdviseSink2 : public IAdviseSink {")
cpp_quote("  public:")
cpp_quote("    virtual void WINAPI OnLinkSrcChange(IMoniker *pmk) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IAdviseSink2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IAdviseSink2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IAdviseSink2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(IAdviseSink2 *This);")
cpp_quote("      void (WINAPI *OnDataChange)(IAdviseSink2 *This,FORMATETC *pFormatetc,STGMEDIUM *pStgmed);")
cpp_quote("      void (WINAPI *OnViewChange)(IAdviseSink2 *This,DWORD dwAspect,LONG lindex);")
cpp_quote("      void (WINAPI *OnRename)(IAdviseSink2 *This,IMoniker *pmk);")
cpp_quote("      void (WINAPI *OnSave)(IAdviseSink2 *This);")
cpp_quote("      void (WINAPI *OnClose)(IAdviseSink2 *This);")
cpp_quote("      void (WINAPI *OnLinkSrcChange)(IAdviseSink2 *This,IMoniker *pmk);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IAdviseSink2Vtbl;")
cpp_quote("  struct IAdviseSink2 {")
cpp_quote("    CONST_VTBL struct IAdviseSink2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IAdviseSink2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IAdviseSink2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IAdviseSink2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IAdviseSink2_OnDataChange(This,pFormatetc,pStgmed) (This)->lpVtbl->OnDataChange(This,pFormatetc,pStgmed)")
cpp_quote("#define IAdviseSink2_OnViewChange(This,dwAspect,lindex) (This)->lpVtbl->OnViewChange(This,dwAspect,lindex)")
cpp_quote("#define IAdviseSink2_OnRename(This,pmk) (This)->lpVtbl->OnRename(This,pmk)")
cpp_quote("#define IAdviseSink2_OnSave(This) (This)->lpVtbl->OnSave(This)")
cpp_quote("#define IAdviseSink2_OnClose(This) (This)->lpVtbl->OnClose(This)")
cpp_quote("#define IAdviseSink2_OnLinkSrcChange(This,pmk) (This)->lpVtbl->OnLinkSrcChange(This,pmk)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IAdviseSink2_RemoteOnLinkSrcChange_Proxy(IAdviseSink2 *This,IMoniker *pmk);")
cpp_quote("  void __RPC_STUB IAdviseSink2_RemoteOnLinkSrcChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __AsyncIAdviseSink2_INTERFACE_DEFINED__")
cpp_quote("#define __AsyncIAdviseSink2_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_AsyncIAdviseSink2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct AsyncIAdviseSink2 : public AsyncIAdviseSink {")
cpp_quote("  public:")
cpp_quote("    virtual void WINAPI Begin_OnLinkSrcChange(IMoniker *pmk) = 0;")
cpp_quote("    virtual void WINAPI Finish_OnLinkSrcChange(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct AsyncIAdviseSink2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(AsyncIAdviseSink2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(AsyncIAdviseSink2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(AsyncIAdviseSink2 *This);")
cpp_quote("      void (WINAPI *Begin_OnDataChange)(AsyncIAdviseSink2 *This,FORMATETC *pFormatetc,STGMEDIUM *pStgmed);")
cpp_quote("      void (WINAPI *Finish_OnDataChange)(AsyncIAdviseSink2 *This);")
cpp_quote("      void (WINAPI *Begin_OnViewChange)(AsyncIAdviseSink2 *This,DWORD dwAspect,LONG lindex);")
cpp_quote("      void (WINAPI *Finish_OnViewChange)(AsyncIAdviseSink2 *This);")
cpp_quote("      void (WINAPI *Begin_OnRename)(AsyncIAdviseSink2 *This,IMoniker *pmk);")
cpp_quote("      void (WINAPI *Finish_OnRename)(AsyncIAdviseSink2 *This);")
cpp_quote("      void (WINAPI *Begin_OnSave)(AsyncIAdviseSink2 *This);")
cpp_quote("      void (WINAPI *Finish_OnSave)(AsyncIAdviseSink2 *This);")
cpp_quote("      void (WINAPI *Begin_OnClose)(AsyncIAdviseSink2 *This);")
cpp_quote("      void (WINAPI *Finish_OnClose)(AsyncIAdviseSink2 *This);")
cpp_quote("      void (WINAPI *Begin_OnLinkSrcChange)(AsyncIAdviseSink2 *This,IMoniker *pmk);")
cpp_quote("      void (WINAPI *Finish_OnLinkSrcChange)(AsyncIAdviseSink2 *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } AsyncIAdviseSink2Vtbl;")
cpp_quote("  struct AsyncIAdviseSink2 {")
cpp_quote("    CONST_VTBL struct AsyncIAdviseSink2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define AsyncIAdviseSink2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define AsyncIAdviseSink2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define AsyncIAdviseSink2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define AsyncIAdviseSink2_Begin_OnDataChange(This,pFormatetc,pStgmed) (This)->lpVtbl->Begin_OnDataChange(This,pFormatetc,pStgmed)")
cpp_quote("#define AsyncIAdviseSink2_Finish_OnDataChange(This) (This)->lpVtbl->Finish_OnDataChange(This)")
cpp_quote("#define AsyncIAdviseSink2_Begin_OnViewChange(This,dwAspect,lindex) (This)->lpVtbl->Begin_OnViewChange(This,dwAspect,lindex)")
cpp_quote("#define AsyncIAdviseSink2_Finish_OnViewChange(This) (This)->lpVtbl->Finish_OnViewChange(This)")
cpp_quote("#define AsyncIAdviseSink2_Begin_OnRename(This,pmk) (This)->lpVtbl->Begin_OnRename(This,pmk)")
cpp_quote("#define AsyncIAdviseSink2_Finish_OnRename(This) (This)->lpVtbl->Finish_OnRename(This)")
cpp_quote("#define AsyncIAdviseSink2_Begin_OnSave(This) (This)->lpVtbl->Begin_OnSave(This)")
cpp_quote("#define AsyncIAdviseSink2_Finish_OnSave(This) (This)->lpVtbl->Finish_OnSave(This)")
cpp_quote("#define AsyncIAdviseSink2_Begin_OnClose(This) (This)->lpVtbl->Begin_OnClose(This)")
cpp_quote("#define AsyncIAdviseSink2_Finish_OnClose(This) (This)->lpVtbl->Finish_OnClose(This)")
cpp_quote("#define AsyncIAdviseSink2_Begin_OnLinkSrcChange(This,pmk) (This)->lpVtbl->Begin_OnLinkSrcChange(This,pmk)")
cpp_quote("#define AsyncIAdviseSink2_Finish_OnLinkSrcChange(This) (This)->lpVtbl->Finish_OnLinkSrcChange(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink2_Begin_RemoteOnLinkSrcChange_Proxy(AsyncIAdviseSink2 *This,IMoniker *pmk);")
cpp_quote("  void __RPC_STUB AsyncIAdviseSink2_Begin_RemoteOnLinkSrcChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink2_Finish_RemoteOnLinkSrcChange_Proxy(AsyncIAdviseSink2 *This);")
cpp_quote("  void __RPC_STUB AsyncIAdviseSink2_Finish_RemoteOnLinkSrcChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")

[
    object,
    uuid(0000010e-0000-0000-C000-000000000046),
    pointer_default(unique)
]
interface IDataObject : IUnknown
{
    typedef [unique] IDataObject *LPDATAOBJECT;

    typedef enum tagDATADIR {
        DATADIR_GET = 1,
        DATADIR_SET = 2
    } DATADIR;

    [local]
    HRESULT GetData(
            [in, unique] FORMATETC *pformatetcIn,
            [out] STGMEDIUM *pmedium);
    [call_as(GetData)]
    HRESULT RemoteGetData(
            [in, unique] FORMATETC *pformatetcIn,
            [out] STGMEDIUM *pRemoteMedium);

    [local]
    HRESULT GetDataHere(
            [in, unique] FORMATETC *pformatetc,
            [in, out] STGMEDIUM *pmedium);
    [call_as(GetDataHere)]
    HRESULT RemoteGetDataHere(
            [in, unique] FORMATETC *pformatetc,
            [in, out] STGMEDIUM *pRemoteMedium);

    HRESULT QueryGetData(
            [in, unique] FORMATETC *pformatetc);

    HRESULT GetCanonicalFormatEtc(
            [in, unique] FORMATETC *pformatectIn,
            [out] FORMATETC *pformatetcOut);

    [local]
    HRESULT SetData(
           [in, unique] FORMATETC *pformatetc,
           [in, unique] STGMEDIUM *pmedium,
           [in] BOOL fRelease);
    [call_as(SetData)]
    HRESULT RemoteSetData(
           [in, unique] FORMATETC *pformatetc,
           [in, unique] FLAG_STGMEDIUM *pmedium,
           [in] BOOL fRelease);

    HRESULT EnumFormatEtc(
           [in] DWORD dwDirection,
           [out] IEnumFORMATETC **ppenumFormatEtc);

    HRESULT DAdvise(
          [in] FORMATETC *pformatetc,
          [in] DWORD advf,
          [in, unique] IAdviseSink *pAdvSink,
          [out] DWORD *pdwConnection);

    HRESULT DUnadvise([in] DWORD dwConnection);
    HRESULT EnumDAdvise([out] IEnumSTATDATA **ppenumAdvise);
}

cpp_quote("#ifndef __IDataAdviseHolder_INTERFACE_DEFINED__")
cpp_quote("#define __IDataAdviseHolder_INTERFACE_DEFINED__")
cpp_quote("  typedef IDataAdviseHolder *LPDATAADVISEHOLDER;")
cpp_quote("  EXTERN_C const IID IID_IDataAdviseHolder;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IDataAdviseHolder : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Advise(IDataObject *pDataObject,FORMATETC *pFetc,DWORD advf,IAdviseSink *pAdvise,DWORD *pdwConnection) = 0;")
cpp_quote("    virtual HRESULT WINAPI Unadvise(DWORD dwConnection) = 0;")
cpp_quote("    virtual HRESULT WINAPI EnumAdvise(IEnumSTATDATA **ppenumAdvise) = 0;")
cpp_quote("    virtual HRESULT WINAPI SendOnDataChange(IDataObject *pDataObject,DWORD dwReserved,DWORD advf) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IDataAdviseHolderVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IDataAdviseHolder *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IDataAdviseHolder *This);")
cpp_quote("      ULONG (WINAPI *Release)(IDataAdviseHolder *This);")
cpp_quote("      HRESULT (WINAPI *Advise)(IDataAdviseHolder *This,IDataObject *pDataObject,FORMATETC *pFetc,DWORD advf,IAdviseSink *pAdvise,DWORD *pdwConnection);")
cpp_quote("      HRESULT (WINAPI *Unadvise)(IDataAdviseHolder *This,DWORD dwConnection);")
cpp_quote("      HRESULT (WINAPI *EnumAdvise)(IDataAdviseHolder *This,IEnumSTATDATA **ppenumAdvise);")
cpp_quote("      HRESULT (WINAPI *SendOnDataChange)(IDataAdviseHolder *This,IDataObject *pDataObject,DWORD dwReserved,DWORD advf);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IDataAdviseHolderVtbl;")
cpp_quote("  struct IDataAdviseHolder {")
cpp_quote("    CONST_VTBL struct IDataAdviseHolderVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IDataAdviseHolder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IDataAdviseHolder_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IDataAdviseHolder_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IDataAdviseHolder_Advise(This,pDataObject,pFetc,advf,pAdvise,pdwConnection) (This)->lpVtbl->Advise(This,pDataObject,pFetc,advf,pAdvise,pdwConnection)")
cpp_quote("#define IDataAdviseHolder_Unadvise(This,dwConnection) (This)->lpVtbl->Unadvise(This,dwConnection)")
cpp_quote("#define IDataAdviseHolder_EnumAdvise(This,ppenumAdvise) (This)->lpVtbl->EnumAdvise(This,ppenumAdvise)")
cpp_quote("#define IDataAdviseHolder_SendOnDataChange(This,pDataObject,dwReserved,advf) (This)->lpVtbl->SendOnDataChange(This,pDataObject,dwReserved,advf)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IDataAdviseHolder_Advise_Proxy(IDataAdviseHolder *This,IDataObject *pDataObject,FORMATETC *pFetc,DWORD advf,IAdviseSink *pAdvise,DWORD *pdwConnection);")
cpp_quote("  void __RPC_STUB IDataAdviseHolder_Advise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IDataAdviseHolder_Unadvise_Proxy(IDataAdviseHolder *This,DWORD dwConnection);")
cpp_quote("  void __RPC_STUB IDataAdviseHolder_Unadvise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IDataAdviseHolder_EnumAdvise_Proxy(IDataAdviseHolder *This,IEnumSTATDATA **ppenumAdvise);")
cpp_quote("  void __RPC_STUB IDataAdviseHolder_EnumAdvise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IDataAdviseHolder_SendOnDataChange_Proxy(IDataAdviseHolder *This,IDataObject *pDataObject,DWORD dwReserved,DWORD advf);")
cpp_quote("  void __RPC_STUB IDataAdviseHolder_SendOnDataChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IMessageFilter_INTERFACE_DEFINED__")
cpp_quote("#define __IMessageFilter_INTERFACE_DEFINED__")
cpp_quote("  typedef IMessageFilter *LPMESSAGEFILTER;")
cpp_quote("")
cpp_quote("  typedef enum tagCALLTYPE {")
cpp_quote("    CALLTYPE_TOPLEVEL = 1,CALLTYPE_NESTED = 2,CALLTYPE_ASYNC = 3,CALLTYPE_TOPLEVEL_CALLPENDING = 4,CALLTYPE_ASYNC_CALLPENDING = 5")
cpp_quote("  } CALLTYPE;")
cpp_quote("")
cpp_quote("  typedef enum tagSERVERCALL {")
cpp_quote("    SERVERCALL_ISHANDLED = 0,SERVERCALL_REJECTED = 1,SERVERCALL_RETRYLATER = 2")
cpp_quote("  } SERVERCALL;")
cpp_quote("")
cpp_quote("  typedef enum tagPENDINGTYPE {")
cpp_quote("    PENDINGTYPE_TOPLEVEL = 1,PENDINGTYPE_NESTED = 2")
cpp_quote("  } PENDINGTYPE;")
cpp_quote("")
cpp_quote("  typedef enum tagPENDINGMSG {")
cpp_quote("    PENDINGMSG_CANCELCALL = 0,PENDINGMSG_WAITNOPROCESS = 1,PENDINGMSG_WAITDEFPROCESS = 2")
cpp_quote("  } PENDINGMSG;")
cpp_quote("")
cpp_quote("  typedef struct tagINTERFACEINFO {")
cpp_quote("    IUnknown *pUnk;")
cpp_quote("    IID iid;")
cpp_quote("    WORD wMethod;")
cpp_quote("  } INTERFACEINFO;")
cpp_quote("")
cpp_quote("  typedef struct tagINTERFACEINFO *LPINTERFACEINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IMessageFilter;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IMessageFilter : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual DWORD WINAPI HandleInComingCall(DWORD dwCallType,HTASK htaskCaller,DWORD dwTickCount,LPINTERFACEINFO lpInterfaceInfo) = 0;")
cpp_quote("    virtual DWORD WINAPI RetryRejectedCall(HTASK htaskCallee,DWORD dwTickCount,DWORD dwRejectType) = 0;")
cpp_quote("    virtual DWORD WINAPI MessagePending(HTASK htaskCallee,DWORD dwTickCount,DWORD dwPendingType) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IMessageFilterVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IMessageFilter *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IMessageFilter *This);")
cpp_quote("      ULONG (WINAPI *Release)(IMessageFilter *This);")
cpp_quote("      DWORD (WINAPI *HandleInComingCall)(IMessageFilter *This,DWORD dwCallType,HTASK htaskCaller,DWORD dwTickCount,LPINTERFACEINFO lpInterfaceInfo);")
cpp_quote("      DWORD (WINAPI *RetryRejectedCall)(IMessageFilter *This,HTASK htaskCallee,DWORD dwTickCount,DWORD dwRejectType);")
cpp_quote("      DWORD (WINAPI *MessagePending)(IMessageFilter *This,HTASK htaskCallee,DWORD dwTickCount,DWORD dwPendingType);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IMessageFilterVtbl;")
cpp_quote("  struct IMessageFilter {")
cpp_quote("    CONST_VTBL struct IMessageFilterVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IMessageFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IMessageFilter_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IMessageFilter_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IMessageFilter_HandleInComingCall(This,dwCallType,htaskCaller,dwTickCount,lpInterfaceInfo) (This)->lpVtbl->HandleInComingCall(This,dwCallType,htaskCaller,dwTickCount,lpInterfaceInfo)")
cpp_quote("#define IMessageFilter_RetryRejectedCall(This,htaskCallee,dwTickCount,dwRejectType) (This)->lpVtbl->RetryRejectedCall(This,htaskCallee,dwTickCount,dwRejectType)")
cpp_quote("#define IMessageFilter_MessagePending(This,htaskCallee,dwTickCount,dwPendingType) (This)->lpVtbl->MessagePending(This,htaskCallee,dwTickCount,dwPendingType)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  DWORD WINAPI IMessageFilter_HandleInComingCall_Proxy(IMessageFilter *This,DWORD dwCallType,HTASK htaskCaller,DWORD dwTickCount,LPINTERFACEINFO lpInterfaceInfo);")
cpp_quote("  void __RPC_STUB IMessageFilter_HandleInComingCall_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  DWORD WINAPI IMessageFilter_RetryRejectedCall_Proxy(IMessageFilter *This,HTASK htaskCallee,DWORD dwTickCount,DWORD dwRejectType);")
cpp_quote("  void __RPC_STUB IMessageFilter_RetryRejectedCall_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  DWORD WINAPI IMessageFilter_MessagePending_Proxy(IMessageFilter *This,HTASK htaskCallee,DWORD dwTickCount,DWORD dwPendingType);")
cpp_quote("  void __RPC_STUB IMessageFilter_MessagePending_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcChannelBuffer_INTERFACE_DEFINED__")
cpp_quote("#define __IRpcChannelBuffer_INTERFACE_DEFINED__")
cpp_quote("  typedef unsigned long RPCOLEDATAREP;")
cpp_quote("")
cpp_quote("  typedef struct tagRPCOLEMESSAGE {")
cpp_quote("    void *reserved1;")
cpp_quote("    RPCOLEDATAREP dataRepresentation;")
cpp_quote("    void *Buffer;")
cpp_quote("    ULONG cbBuffer;")
cpp_quote("    ULONG iMethod;")
cpp_quote("    void *reserved2[5 ];")
cpp_quote("    ULONG rpcFlags;")
cpp_quote("  } RPCOLEMESSAGE;")
cpp_quote("")
cpp_quote("  typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IRpcChannelBuffer;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IRpcChannelBuffer : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetBuffer(RPCOLEMESSAGE *pMessage,REFIID riid) = 0;")
cpp_quote("    virtual HRESULT WINAPI SendReceive(RPCOLEMESSAGE *pMessage,ULONG *pStatus) = 0;")
cpp_quote("    virtual HRESULT WINAPI FreeBuffer(RPCOLEMESSAGE *pMessage) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetDestCtx(DWORD *pdwDestContext,void **ppvDestContext) = 0;")
cpp_quote("    virtual HRESULT WINAPI IsConnected(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IRpcChannelBufferVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IRpcChannelBuffer *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IRpcChannelBuffer *This);")
cpp_quote("      ULONG (WINAPI *Release)(IRpcChannelBuffer *This);")
cpp_quote("      HRESULT (WINAPI *GetBuffer)(IRpcChannelBuffer *This,RPCOLEMESSAGE *pMessage,REFIID riid);")
cpp_quote("      HRESULT (WINAPI *SendReceive)(IRpcChannelBuffer *This,RPCOLEMESSAGE *pMessage,ULONG *pStatus);")
cpp_quote("      HRESULT (WINAPI *FreeBuffer)(IRpcChannelBuffer *This,RPCOLEMESSAGE *pMessage);")
cpp_quote("      HRESULT (WINAPI *GetDestCtx)(IRpcChannelBuffer *This,DWORD *pdwDestContext,void **ppvDestContext);")
cpp_quote("      HRESULT (WINAPI *IsConnected)(IRpcChannelBuffer *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IRpcChannelBufferVtbl;")
cpp_quote("  struct IRpcChannelBuffer {")
cpp_quote("    CONST_VTBL struct IRpcChannelBufferVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IRpcChannelBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IRpcChannelBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IRpcChannelBuffer_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IRpcChannelBuffer_GetBuffer(This,pMessage,riid) (This)->lpVtbl->GetBuffer(This,pMessage,riid)")
cpp_quote("#define IRpcChannelBuffer_SendReceive(This,pMessage,pStatus) (This)->lpVtbl->SendReceive(This,pMessage,pStatus)")
cpp_quote("#define IRpcChannelBuffer_FreeBuffer(This,pMessage) (This)->lpVtbl->FreeBuffer(This,pMessage)")
cpp_quote("#define IRpcChannelBuffer_GetDestCtx(This,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtx(This,pdwDestContext,ppvDestContext)")
cpp_quote("#define IRpcChannelBuffer_IsConnected(This) (This)->lpVtbl->IsConnected(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IRpcChannelBuffer_GetBuffer_Proxy(IRpcChannelBuffer *This,RPCOLEMESSAGE *pMessage,REFIID riid);")
cpp_quote("  void __RPC_STUB IRpcChannelBuffer_GetBuffer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcChannelBuffer_SendReceive_Proxy(IRpcChannelBuffer *This,RPCOLEMESSAGE *pMessage,ULONG *pStatus);")
cpp_quote("  void __RPC_STUB IRpcChannelBuffer_SendReceive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcChannelBuffer_FreeBuffer_Proxy(IRpcChannelBuffer *This,RPCOLEMESSAGE *pMessage);")
cpp_quote("  void __RPC_STUB IRpcChannelBuffer_FreeBuffer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcChannelBuffer_GetDestCtx_Proxy(IRpcChannelBuffer *This,DWORD *pdwDestContext,void **ppvDestContext);")
cpp_quote("  void __RPC_STUB IRpcChannelBuffer_GetDestCtx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcChannelBuffer_IsConnected_Proxy(IRpcChannelBuffer *This);")
cpp_quote("  void __RPC_STUB IRpcChannelBuffer_IsConnected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcChannelBuffer2_INTERFACE_DEFINED__")
cpp_quote("#define __IRpcChannelBuffer2_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IRpcChannelBuffer2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IRpcChannelBuffer2 : public IRpcChannelBuffer {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetProtocolVersion(DWORD *pdwVersion) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IRpcChannelBuffer2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IRpcChannelBuffer2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IRpcChannelBuffer2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(IRpcChannelBuffer2 *This);")
cpp_quote("      HRESULT (WINAPI *GetBuffer)(IRpcChannelBuffer2 *This,RPCOLEMESSAGE *pMessage,REFIID riid);")
cpp_quote("      HRESULT (WINAPI *SendReceive)(IRpcChannelBuffer2 *This,RPCOLEMESSAGE *pMessage,ULONG *pStatus);")
cpp_quote("      HRESULT (WINAPI *FreeBuffer)(IRpcChannelBuffer2 *This,RPCOLEMESSAGE *pMessage);")
cpp_quote("      HRESULT (WINAPI *GetDestCtx)(IRpcChannelBuffer2 *This,DWORD *pdwDestContext,void **ppvDestContext);")
cpp_quote("      HRESULT (WINAPI *IsConnected)(IRpcChannelBuffer2 *This);")
cpp_quote("      HRESULT (WINAPI *GetProtocolVersion)(IRpcChannelBuffer2 *This,DWORD *pdwVersion);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IRpcChannelBuffer2Vtbl;")
cpp_quote("  struct IRpcChannelBuffer2 {")
cpp_quote("    CONST_VTBL struct IRpcChannelBuffer2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IRpcChannelBuffer2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IRpcChannelBuffer2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IRpcChannelBuffer2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IRpcChannelBuffer2_GetBuffer(This,pMessage,riid) (This)->lpVtbl->GetBuffer(This,pMessage,riid)")
cpp_quote("#define IRpcChannelBuffer2_SendReceive(This,pMessage,pStatus) (This)->lpVtbl->SendReceive(This,pMessage,pStatus)")
cpp_quote("#define IRpcChannelBuffer2_FreeBuffer(This,pMessage) (This)->lpVtbl->FreeBuffer(This,pMessage)")
cpp_quote("#define IRpcChannelBuffer2_GetDestCtx(This,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtx(This,pdwDestContext,ppvDestContext)")
cpp_quote("#define IRpcChannelBuffer2_IsConnected(This) (This)->lpVtbl->IsConnected(This)")
cpp_quote("#define IRpcChannelBuffer2_GetProtocolVersion(This,pdwVersion) (This)->lpVtbl->GetProtocolVersion(This,pdwVersion)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IRpcChannelBuffer2_GetProtocolVersion_Proxy(IRpcChannelBuffer2 *This,DWORD *pdwVersion);")
cpp_quote("  void __RPC_STUB IRpcChannelBuffer2_GetProtocolVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IAsyncRpcChannelBuffer_INTERFACE_DEFINED__")
cpp_quote("#define __IAsyncRpcChannelBuffer_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IAsyncRpcChannelBuffer;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IAsyncRpcChannelBuffer : public IRpcChannelBuffer2 {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Send(RPCOLEMESSAGE *pMsg,ISynchronize *pSync,ULONG *pulStatus) = 0;")
cpp_quote("    virtual HRESULT WINAPI Receive(RPCOLEMESSAGE *pMsg,ULONG *pulStatus) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetDestCtxEx(RPCOLEMESSAGE *pMsg,DWORD *pdwDestContext,void **ppvDestContext) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IAsyncRpcChannelBufferVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IAsyncRpcChannelBuffer *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IAsyncRpcChannelBuffer *This);")
cpp_quote("      ULONG (WINAPI *Release)(IAsyncRpcChannelBuffer *This);")
cpp_quote("      HRESULT (WINAPI *GetBuffer)(IAsyncRpcChannelBuffer *This,RPCOLEMESSAGE *pMessage,REFIID riid);")
cpp_quote("      HRESULT (WINAPI *SendReceive)(IAsyncRpcChannelBuffer *This,RPCOLEMESSAGE *pMessage,ULONG *pStatus);")
cpp_quote("      HRESULT (WINAPI *FreeBuffer)(IAsyncRpcChannelBuffer *This,RPCOLEMESSAGE *pMessage);")
cpp_quote("      HRESULT (WINAPI *GetDestCtx)(IAsyncRpcChannelBuffer *This,DWORD *pdwDestContext,void **ppvDestContext);")
cpp_quote("      HRESULT (WINAPI *IsConnected)(IAsyncRpcChannelBuffer *This);")
cpp_quote("      HRESULT (WINAPI *GetProtocolVersion)(IAsyncRpcChannelBuffer *This,DWORD *pdwVersion);")
cpp_quote("      HRESULT (WINAPI *Send)(IAsyncRpcChannelBuffer *This,RPCOLEMESSAGE *pMsg,ISynchronize *pSync,ULONG *pulStatus);")
cpp_quote("      HRESULT (WINAPI *Receive)(IAsyncRpcChannelBuffer *This,RPCOLEMESSAGE *pMsg,ULONG *pulStatus);")
cpp_quote("      HRESULT (WINAPI *GetDestCtxEx)(IAsyncRpcChannelBuffer *This,RPCOLEMESSAGE *pMsg,DWORD *pdwDestContext,void **ppvDestContext);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IAsyncRpcChannelBufferVtbl;")
cpp_quote("  struct IAsyncRpcChannelBuffer {")
cpp_quote("    CONST_VTBL struct IAsyncRpcChannelBufferVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IAsyncRpcChannelBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IAsyncRpcChannelBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IAsyncRpcChannelBuffer_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IAsyncRpcChannelBuffer_GetBuffer(This,pMessage,riid) (This)->lpVtbl->GetBuffer(This,pMessage,riid)")
cpp_quote("#define IAsyncRpcChannelBuffer_SendReceive(This,pMessage,pStatus) (This)->lpVtbl->SendReceive(This,pMessage,pStatus)")
cpp_quote("#define IAsyncRpcChannelBuffer_FreeBuffer(This,pMessage) (This)->lpVtbl->FreeBuffer(This,pMessage)")
cpp_quote("#define IAsyncRpcChannelBuffer_GetDestCtx(This,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtx(This,pdwDestContext,ppvDestContext)")
cpp_quote("#define IAsyncRpcChannelBuffer_IsConnected(This) (This)->lpVtbl->IsConnected(This)")
cpp_quote("#define IAsyncRpcChannelBuffer_GetProtocolVersion(This,pdwVersion) (This)->lpVtbl->GetProtocolVersion(This,pdwVersion)")
cpp_quote("#define IAsyncRpcChannelBuffer_Send(This,pMsg,pSync,pulStatus) (This)->lpVtbl->Send(This,pMsg,pSync,pulStatus)")
cpp_quote("#define IAsyncRpcChannelBuffer_Receive(This,pMsg,pulStatus) (This)->lpVtbl->Receive(This,pMsg,pulStatus)")
cpp_quote("#define IAsyncRpcChannelBuffer_GetDestCtxEx(This,pMsg,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtxEx(This,pMsg,pdwDestContext,ppvDestContext)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IAsyncRpcChannelBuffer_Send_Proxy(IAsyncRpcChannelBuffer *This,RPCOLEMESSAGE *pMsg,ISynchronize *pSync,ULONG *pulStatus);")
cpp_quote("  void __RPC_STUB IAsyncRpcChannelBuffer_Send_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IAsyncRpcChannelBuffer_Receive_Proxy(IAsyncRpcChannelBuffer *This,RPCOLEMESSAGE *pMsg,ULONG *pulStatus);")
cpp_quote("  void __RPC_STUB IAsyncRpcChannelBuffer_Receive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IAsyncRpcChannelBuffer_GetDestCtxEx_Proxy(IAsyncRpcChannelBuffer *This,RPCOLEMESSAGE *pMsg,DWORD *pdwDestContext,void **ppvDestContext);")
cpp_quote("  void __RPC_STUB IAsyncRpcChannelBuffer_GetDestCtxEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcChannelBuffer3_INTERFACE_DEFINED__")
cpp_quote("#define __IRpcChannelBuffer3_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IRpcChannelBuffer3;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IRpcChannelBuffer3 : public IRpcChannelBuffer2 {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Send(RPCOLEMESSAGE *pMsg,ULONG *pulStatus) = 0;")
cpp_quote("    virtual HRESULT WINAPI Receive(RPCOLEMESSAGE *pMsg,ULONG ulSize,ULONG *pulStatus) = 0;")
cpp_quote("    virtual HRESULT WINAPI Cancel(RPCOLEMESSAGE *pMsg) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetCallContext(RPCOLEMESSAGE *pMsg,REFIID riid,void **pInterface) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetDestCtxEx(RPCOLEMESSAGE *pMsg,DWORD *pdwDestContext,void **ppvDestContext) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetState(RPCOLEMESSAGE *pMsg,DWORD *pState) = 0;")
cpp_quote("    virtual HRESULT WINAPI RegisterAsync(RPCOLEMESSAGE *pMsg,IAsyncManager *pAsyncMgr) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IRpcChannelBuffer3Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IRpcChannelBuffer3 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IRpcChannelBuffer3 *This);")
cpp_quote("      ULONG (WINAPI *Release)(IRpcChannelBuffer3 *This);")
cpp_quote("      HRESULT (WINAPI *GetBuffer)(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMessage,REFIID riid);")
cpp_quote("      HRESULT (WINAPI *SendReceive)(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMessage,ULONG *pStatus);")
cpp_quote("      HRESULT (WINAPI *FreeBuffer)(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMessage);")
cpp_quote("      HRESULT (WINAPI *GetDestCtx)(IRpcChannelBuffer3 *This,DWORD *pdwDestContext,void **ppvDestContext);")
cpp_quote("      HRESULT (WINAPI *IsConnected)(IRpcChannelBuffer3 *This);")
cpp_quote("      HRESULT (WINAPI *GetProtocolVersion)(IRpcChannelBuffer3 *This,DWORD *pdwVersion);")
cpp_quote("      HRESULT (WINAPI *Send)(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg,ULONG *pulStatus);")
cpp_quote("      HRESULT (WINAPI *Receive)(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg,ULONG ulSize,ULONG *pulStatus);")
cpp_quote("      HRESULT (WINAPI *Cancel)(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg);")
cpp_quote("      HRESULT (WINAPI *GetCallContext)(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg,REFIID riid,void **pInterface);")
cpp_quote("      HRESULT (WINAPI *GetDestCtxEx)(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg,DWORD *pdwDestContext,void **ppvDestContext);")
cpp_quote("      HRESULT (WINAPI *GetState)(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg,DWORD *pState);")
cpp_quote("      HRESULT (WINAPI *RegisterAsync)(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg,IAsyncManager *pAsyncMgr);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IRpcChannelBuffer3Vtbl;")
cpp_quote("  struct IRpcChannelBuffer3 {")
cpp_quote("    CONST_VTBL struct IRpcChannelBuffer3Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IRpcChannelBuffer3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IRpcChannelBuffer3_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IRpcChannelBuffer3_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IRpcChannelBuffer3_GetBuffer(This,pMessage,riid) (This)->lpVtbl->GetBuffer(This,pMessage,riid)")
cpp_quote("#define IRpcChannelBuffer3_SendReceive(This,pMessage,pStatus) (This)->lpVtbl->SendReceive(This,pMessage,pStatus)")
cpp_quote("#define IRpcChannelBuffer3_FreeBuffer(This,pMessage) (This)->lpVtbl->FreeBuffer(This,pMessage)")
cpp_quote("#define IRpcChannelBuffer3_GetDestCtx(This,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtx(This,pdwDestContext,ppvDestContext)")
cpp_quote("#define IRpcChannelBuffer3_IsConnected(This) (This)->lpVtbl->IsConnected(This)")
cpp_quote("#define IRpcChannelBuffer3_GetProtocolVersion(This,pdwVersion) (This)->lpVtbl->GetProtocolVersion(This,pdwVersion)")
cpp_quote("#define IRpcChannelBuffer3_Send(This,pMsg,pulStatus) (This)->lpVtbl->Send(This,pMsg,pulStatus)")
cpp_quote("#define IRpcChannelBuffer3_Receive(This,pMsg,ulSize,pulStatus) (This)->lpVtbl->Receive(This,pMsg,ulSize,pulStatus)")
cpp_quote("#define IRpcChannelBuffer3_Cancel(This,pMsg) (This)->lpVtbl->Cancel(This,pMsg)")
cpp_quote("#define IRpcChannelBuffer3_GetCallContext(This,pMsg,riid,pInterface) (This)->lpVtbl->GetCallContext(This,pMsg,riid,pInterface)")
cpp_quote("#define IRpcChannelBuffer3_GetDestCtxEx(This,pMsg,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtxEx(This,pMsg,pdwDestContext,ppvDestContext)")
cpp_quote("#define IRpcChannelBuffer3_GetState(This,pMsg,pState) (This)->lpVtbl->GetState(This,pMsg,pState)")
cpp_quote("#define IRpcChannelBuffer3_RegisterAsync(This,pMsg,pAsyncMgr) (This)->lpVtbl->RegisterAsync(This,pMsg,pAsyncMgr)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IRpcChannelBuffer3_Send_Proxy(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg,ULONG *pulStatus);")
cpp_quote("  void __RPC_STUB IRpcChannelBuffer3_Send_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcChannelBuffer3_Receive_Proxy(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg,ULONG ulSize,ULONG *pulStatus);")
cpp_quote("  void __RPC_STUB IRpcChannelBuffer3_Receive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcChannelBuffer3_Cancel_Proxy(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg);")
cpp_quote("  void __RPC_STUB IRpcChannelBuffer3_Cancel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcChannelBuffer3_GetCallContext_Proxy(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg,REFIID riid,void **pInterface);")
cpp_quote("  void __RPC_STUB IRpcChannelBuffer3_GetCallContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcChannelBuffer3_GetDestCtxEx_Proxy(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg,DWORD *pdwDestContext,void **ppvDestContext);")
cpp_quote("  void __RPC_STUB IRpcChannelBuffer3_GetDestCtxEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcChannelBuffer3_GetState_Proxy(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg,DWORD *pState);")
cpp_quote("  void __RPC_STUB IRpcChannelBuffer3_GetState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcChannelBuffer3_RegisterAsync_Proxy(IRpcChannelBuffer3 *This,RPCOLEMESSAGE *pMsg,IAsyncManager *pAsyncMgr);")
cpp_quote("  void __RPC_STUB IRpcChannelBuffer3_RegisterAsync_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcSyntaxNegotiate_INTERFACE_DEFINED__")
cpp_quote("#define __IRpcSyntaxNegotiate_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IRpcSyntaxNegotiate;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IRpcSyntaxNegotiate : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI NegotiateSyntax(RPCOLEMESSAGE *pMsg) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IRpcSyntaxNegotiateVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IRpcSyntaxNegotiate *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IRpcSyntaxNegotiate *This);")
cpp_quote("      ULONG (WINAPI *Release)(IRpcSyntaxNegotiate *This);")
cpp_quote("      HRESULT (WINAPI *NegotiateSyntax)(IRpcSyntaxNegotiate *This,RPCOLEMESSAGE *pMsg);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IRpcSyntaxNegotiateVtbl;")
cpp_quote("  struct IRpcSyntaxNegotiate {")
cpp_quote("    CONST_VTBL struct IRpcSyntaxNegotiateVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IRpcSyntaxNegotiate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IRpcSyntaxNegotiate_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IRpcSyntaxNegotiate_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IRpcSyntaxNegotiate_NegotiateSyntax(This,pMsg) (This)->lpVtbl->NegotiateSyntax(This,pMsg)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IRpcSyntaxNegotiate_NegotiateSyntax_Proxy(IRpcSyntaxNegotiate *This,RPCOLEMESSAGE *pMsg);")
cpp_quote("  void __RPC_STUB IRpcSyntaxNegotiate_NegotiateSyntax_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcProxyBuffer_INTERFACE_DEFINED__")
cpp_quote("#define __IRpcProxyBuffer_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IRpcProxyBuffer;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IRpcProxyBuffer : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Connect(IRpcChannelBuffer *pRpcChannelBuffer) = 0;")
cpp_quote("    virtual void WINAPI Disconnect(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IRpcProxyBufferVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IRpcProxyBuffer *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IRpcProxyBuffer *This);")
cpp_quote("      ULONG (WINAPI *Release)(IRpcProxyBuffer *This);")
cpp_quote("      HRESULT (WINAPI *Connect)(IRpcProxyBuffer *This,IRpcChannelBuffer *pRpcChannelBuffer);")
cpp_quote("      void (WINAPI *Disconnect)(IRpcProxyBuffer *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IRpcProxyBufferVtbl;")
cpp_quote("  struct IRpcProxyBuffer {")
cpp_quote("    CONST_VTBL struct IRpcProxyBufferVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IRpcProxyBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IRpcProxyBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IRpcProxyBuffer_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IRpcProxyBuffer_Connect(This,pRpcChannelBuffer) (This)->lpVtbl->Connect(This,pRpcChannelBuffer)")
cpp_quote("#define IRpcProxyBuffer_Disconnect(This) (This)->lpVtbl->Disconnect(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IRpcProxyBuffer_Connect_Proxy(IRpcProxyBuffer *This,IRpcChannelBuffer *pRpcChannelBuffer);")
cpp_quote("  void __RPC_STUB IRpcProxyBuffer_Connect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IRpcProxyBuffer_Disconnect_Proxy(IRpcProxyBuffer *This);")
cpp_quote("  void __RPC_STUB IRpcProxyBuffer_Disconnect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcStubBuffer_INTERFACE_DEFINED__")
cpp_quote("#define __IRpcStubBuffer_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IRpcStubBuffer;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IRpcStubBuffer : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Connect(IUnknown *pUnkServer) = 0;")
cpp_quote("    virtual void WINAPI Disconnect(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Invoke(RPCOLEMESSAGE *_prpcmsg,IRpcChannelBuffer *_pRpcChannelBuffer) = 0;")
cpp_quote("    virtual IRpcStubBuffer *WINAPI IsIIDSupported(REFIID riid) = 0;")
cpp_quote("    virtual ULONG WINAPI CountRefs(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI DebugServerQueryInterface(void **ppv) = 0;")
cpp_quote("    virtual void WINAPI DebugServerRelease(void *pv) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IRpcStubBufferVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IRpcStubBuffer *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IRpcStubBuffer *This);")
cpp_quote("      ULONG (WINAPI *Release)(IRpcStubBuffer *This);")
cpp_quote("      HRESULT (WINAPI *Connect)(IRpcStubBuffer *This,IUnknown *pUnkServer);")
cpp_quote("      void (WINAPI *Disconnect)(IRpcStubBuffer *This);")
cpp_quote("      HRESULT (WINAPI *Invoke)(IRpcStubBuffer *This,RPCOLEMESSAGE *_prpcmsg,IRpcChannelBuffer *_pRpcChannelBuffer);")
cpp_quote("      IRpcStubBuffer *(WINAPI *IsIIDSupported)(IRpcStubBuffer *This,REFIID riid);")
cpp_quote("      ULONG (WINAPI *CountRefs)(IRpcStubBuffer *This);")
cpp_quote("      HRESULT (WINAPI *DebugServerQueryInterface)(IRpcStubBuffer *This,void **ppv);")
cpp_quote("      void (WINAPI *DebugServerRelease)(IRpcStubBuffer *This,void *pv);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IRpcStubBufferVtbl;")
cpp_quote("  struct IRpcStubBuffer {")
cpp_quote("    CONST_VTBL struct IRpcStubBufferVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IRpcStubBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IRpcStubBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IRpcStubBuffer_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IRpcStubBuffer_Connect(This,pUnkServer) (This)->lpVtbl->Connect(This,pUnkServer)")
cpp_quote("#define IRpcStubBuffer_Disconnect(This) (This)->lpVtbl->Disconnect(This)")
cpp_quote("#define IRpcStubBuffer_Invoke(This,_prpcmsg,_pRpcChannelBuffer) (This)->lpVtbl->Invoke(This,_prpcmsg,_pRpcChannelBuffer)")
cpp_quote("#define IRpcStubBuffer_IsIIDSupported(This,riid) (This)->lpVtbl->IsIIDSupported(This,riid)")
cpp_quote("#define IRpcStubBuffer_CountRefs(This) (This)->lpVtbl->CountRefs(This)")
cpp_quote("#define IRpcStubBuffer_DebugServerQueryInterface(This,ppv) (This)->lpVtbl->DebugServerQueryInterface(This,ppv)")
cpp_quote("#define IRpcStubBuffer_DebugServerRelease(This,pv) (This)->lpVtbl->DebugServerRelease(This,pv)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IRpcStubBuffer_Connect_Proxy(IRpcStubBuffer *This,IUnknown *pUnkServer);")
cpp_quote("  void __RPC_STUB IRpcStubBuffer_Connect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IRpcStubBuffer_Disconnect_Proxy(IRpcStubBuffer *This);")
cpp_quote("  void __RPC_STUB IRpcStubBuffer_Disconnect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcStubBuffer_Invoke_Proxy(IRpcStubBuffer *This,RPCOLEMESSAGE *_prpcmsg,IRpcChannelBuffer *_pRpcChannelBuffer);")
cpp_quote("  void __RPC_STUB IRpcStubBuffer_Invoke_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  IRpcStubBuffer *WINAPI IRpcStubBuffer_IsIIDSupported_Proxy(IRpcStubBuffer *This,REFIID riid);")
cpp_quote("  void __RPC_STUB IRpcStubBuffer_IsIIDSupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  ULONG WINAPI IRpcStubBuffer_CountRefs_Proxy(IRpcStubBuffer *This);")
cpp_quote("  void __RPC_STUB IRpcStubBuffer_CountRefs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcStubBuffer_DebugServerQueryInterface_Proxy(IRpcStubBuffer *This,void **ppv);")
cpp_quote("  void __RPC_STUB IRpcStubBuffer_DebugServerQueryInterface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IRpcStubBuffer_DebugServerRelease_Proxy(IRpcStubBuffer *This,void *pv);")
cpp_quote("  void __RPC_STUB IRpcStubBuffer_DebugServerRelease_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPSFactoryBuffer_INTERFACE_DEFINED__")
cpp_quote("#define __IPSFactoryBuffer_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IPSFactoryBuffer;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPSFactoryBuffer : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI CreateProxy(IUnknown *pUnkOuter,REFIID riid,IRpcProxyBuffer **ppProxy,void **ppv) = 0;")
cpp_quote("    virtual HRESULT WINAPI CreateStub(REFIID riid,IUnknown *pUnkServer,IRpcStubBuffer **ppStub) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPSFactoryBufferVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPSFactoryBuffer *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPSFactoryBuffer *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPSFactoryBuffer *This);")
cpp_quote("      HRESULT (WINAPI *CreateProxy)(IPSFactoryBuffer *This,IUnknown *pUnkOuter,REFIID riid,IRpcProxyBuffer **ppProxy,void **ppv);")
cpp_quote("      HRESULT (WINAPI *CreateStub)(IPSFactoryBuffer *This,REFIID riid,IUnknown *pUnkServer,IRpcStubBuffer **ppStub);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPSFactoryBufferVtbl;")
cpp_quote("  struct IPSFactoryBuffer {")
cpp_quote("    CONST_VTBL struct IPSFactoryBufferVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPSFactoryBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPSFactoryBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPSFactoryBuffer_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPSFactoryBuffer_CreateProxy(This,pUnkOuter,riid,ppProxy,ppv) (This)->lpVtbl->CreateProxy(This,pUnkOuter,riid,ppProxy,ppv)")
cpp_quote("#define IPSFactoryBuffer_CreateStub(This,riid,pUnkServer,ppStub) (This)->lpVtbl->CreateStub(This,riid,pUnkServer,ppStub)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPSFactoryBuffer_CreateProxy_Proxy(IPSFactoryBuffer *This,IUnknown *pUnkOuter,REFIID riid,IRpcProxyBuffer **ppProxy,void **ppv);")
cpp_quote("  void __RPC_STUB IPSFactoryBuffer_CreateProxy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPSFactoryBuffer_CreateStub_Proxy(IPSFactoryBuffer *This,REFIID riid,IUnknown *pUnkServer,IRpcStubBuffer **ppStub);")
cpp_quote("  void __RPC_STUB IPSFactoryBuffer_CreateStub_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  typedef struct SChannelHookCallInfo {")
cpp_quote("    IID iid;")
cpp_quote("    DWORD cbSize;")
cpp_quote("    GUID uCausality;")
cpp_quote("    DWORD dwServerPid;")
cpp_quote("    DWORD iMethod;")
cpp_quote("    void *pObject;")
cpp_quote("  } SChannelHookCallInfo;")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0050_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0050_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("#ifndef __IChannelHook_INTERFACE_DEFINED__")
cpp_quote("#define __IChannelHook_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IChannelHook;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IChannelHook : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual void WINAPI ClientGetSize(REFGUID uExtent,REFIID riid,ULONG *pDataSize) = 0;")
cpp_quote("    virtual void WINAPI ClientFillBuffer(REFGUID uExtent,REFIID riid,ULONG *pDataSize,void *pDataBuffer) = 0;")
cpp_quote("    virtual void WINAPI ClientNotify(REFGUID uExtent,REFIID riid,ULONG cbDataSize,void *pDataBuffer,DWORD lDataRep,HRESULT hrFault) = 0;")
cpp_quote("    virtual void WINAPI ServerNotify(REFGUID uExtent,REFIID riid,ULONG cbDataSize,void *pDataBuffer,DWORD lDataRep) = 0;")
cpp_quote("    virtual void WINAPI ServerGetSize(REFGUID uExtent,REFIID riid,HRESULT hrFault,ULONG *pDataSize) = 0;")
cpp_quote("    virtual void WINAPI ServerFillBuffer(REFGUID uExtent,REFIID riid,ULONG *pDataSize,void *pDataBuffer,HRESULT hrFault) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IChannelHookVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IChannelHook *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IChannelHook *This);")
cpp_quote("      ULONG (WINAPI *Release)(IChannelHook *This);")
cpp_quote("      void (WINAPI *ClientGetSize)(IChannelHook *This,REFGUID uExtent,REFIID riid,ULONG *pDataSize);")
cpp_quote("      void (WINAPI *ClientFillBuffer)(IChannelHook *This,REFGUID uExtent,REFIID riid,ULONG *pDataSize,void *pDataBuffer);")
cpp_quote("      void (WINAPI *ClientNotify)(IChannelHook *This,REFGUID uExtent,REFIID riid,ULONG cbDataSize,void *pDataBuffer,DWORD lDataRep,HRESULT hrFault);")
cpp_quote("      void (WINAPI *ServerNotify)(IChannelHook *This,REFGUID uExtent,REFIID riid,ULONG cbDataSize,void *pDataBuffer,DWORD lDataRep);")
cpp_quote("      void (WINAPI *ServerGetSize)(IChannelHook *This,REFGUID uExtent,REFIID riid,HRESULT hrFault,ULONG *pDataSize);")
cpp_quote("      void (WINAPI *ServerFillBuffer)(IChannelHook *This,REFGUID uExtent,REFIID riid,ULONG *pDataSize,void *pDataBuffer,HRESULT hrFault);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IChannelHookVtbl;")
cpp_quote("  struct IChannelHook {")
cpp_quote("    CONST_VTBL struct IChannelHookVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IChannelHook_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IChannelHook_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IChannelHook_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IChannelHook_ClientGetSize(This,uExtent,riid,pDataSize) (This)->lpVtbl->ClientGetSize(This,uExtent,riid,pDataSize)")
cpp_quote("#define IChannelHook_ClientFillBuffer(This,uExtent,riid,pDataSize,pDataBuffer) (This)->lpVtbl->ClientFillBuffer(This,uExtent,riid,pDataSize,pDataBuffer)")
cpp_quote("#define IChannelHook_ClientNotify(This,uExtent,riid,cbDataSize,pDataBuffer,lDataRep,hrFault) (This)->lpVtbl->ClientNotify(This,uExtent,riid,cbDataSize,pDataBuffer,lDataRep,hrFault)")
cpp_quote("#define IChannelHook_ServerNotify(This,uExtent,riid,cbDataSize,pDataBuffer,lDataRep) (This)->lpVtbl->ServerNotify(This,uExtent,riid,cbDataSize,pDataBuffer,lDataRep)")
cpp_quote("#define IChannelHook_ServerGetSize(This,uExtent,riid,hrFault,pDataSize) (This)->lpVtbl->ServerGetSize(This,uExtent,riid,hrFault,pDataSize)")
cpp_quote("#define IChannelHook_ServerFillBuffer(This,uExtent,riid,pDataSize,pDataBuffer,hrFault) (This)->lpVtbl->ServerFillBuffer(This,uExtent,riid,pDataSize,pDataBuffer,hrFault)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  void WINAPI IChannelHook_ClientGetSize_Proxy(IChannelHook *This,REFGUID uExtent,REFIID riid,ULONG *pDataSize);")
cpp_quote("  void __RPC_STUB IChannelHook_ClientGetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IChannelHook_ClientFillBuffer_Proxy(IChannelHook *This,REFGUID uExtent,REFIID riid,ULONG *pDataSize,void *pDataBuffer);")
cpp_quote("  void __RPC_STUB IChannelHook_ClientFillBuffer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IChannelHook_ClientNotify_Proxy(IChannelHook *This,REFGUID uExtent,REFIID riid,ULONG cbDataSize,void *pDataBuffer,DWORD lDataRep,HRESULT hrFault);")
cpp_quote("  void __RPC_STUB IChannelHook_ClientNotify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IChannelHook_ServerNotify_Proxy(IChannelHook *This,REFGUID uExtent,REFIID riid,ULONG cbDataSize,void *pDataBuffer,DWORD lDataRep);")
cpp_quote("  void __RPC_STUB IChannelHook_ServerNotify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IChannelHook_ServerGetSize_Proxy(IChannelHook *This,REFGUID uExtent,REFIID riid,HRESULT hrFault,ULONG *pDataSize);")
cpp_quote("  void __RPC_STUB IChannelHook_ServerGetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IChannelHook_ServerFillBuffer_Proxy(IChannelHook *This,REFGUID uExtent,REFIID riid,ULONG *pDataSize,void *pDataBuffer,HRESULT hrFault);")
cpp_quote("  void __RPC_STUB IChannelHook_ServerFillBuffer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  extern const FMTID FMTID_SummaryInformation;")
cpp_quote("  extern const FMTID FMTID_DocSummaryInformation;")
cpp_quote("  extern const FMTID FMTID_UserDefinedProperties;")
cpp_quote("  extern const FMTID FMTID_DiscardableInformation;")
cpp_quote("  extern const FMTID FMTID_ImageSummaryInformation;")
cpp_quote("  extern const FMTID FMTID_AudioSummaryInformation;")
cpp_quote("  extern const FMTID FMTID_VideoSummaryInformation;")
cpp_quote("  extern const FMTID FMTID_MediaFileSummaryInformation;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0051_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0051_v0_0_s_ifspec;")
cpp_quote("#ifndef __IClientSecurity_INTERFACE_DEFINED__")
cpp_quote("#define __IClientSecurity_INTERFACE_DEFINED__")
cpp_quote("  typedef struct tagSOLE_AUTHENTICATION_SERVICE {")
cpp_quote("    DWORD dwAuthnSvc;")
cpp_quote("    DWORD dwAuthzSvc;")
cpp_quote("    OLECHAR *pPrincipalName;")
cpp_quote("    HRESULT hr;")
cpp_quote("  } SOLE_AUTHENTICATION_SERVICE;")
cpp_quote("")
cpp_quote("  typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;")
cpp_quote("")
cpp_quote("  typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES {")
cpp_quote("    EOAC_NONE = 0,EOAC_MUTUAL_AUTH = 0x1,EOAC_STATIC_CLOAKING = 0x20,EOAC_DYNAMIC_CLOAKING = 0x40,EOAC_ANY_AUTHORITY = 0x80,EOAC_MAKE_FULLSIC = 0x100,")
cpp_quote("    EOAC_DEFAULT = 0x800,EOAC_SECURE_REFS = 0x2,EOAC_ACCESS_CONTROL = 0x4,EOAC_APPID = 0x8,EOAC_DYNAMIC = 0x10,EOAC_REQUIRE_FULLSIC = 0x200,")
cpp_quote("    EOAC_AUTO_IMPERSONATE = 0x400,EOAC_NO_CUSTOM_MARSHAL = 0x2000,EOAC_DISABLE_AAA = 0x1000")
cpp_quote("  } EOLE_AUTHENTICATION_CAPABILITIES;")
cpp_quote("")
cpp_quote("#define COLE_DEFAULT_PRINCIPAL ((OLECHAR *)-1)")
cpp_quote("#define COLE_DEFAULT_AUTHINFO ((void *)-1)")
cpp_quote("")
cpp_quote("  typedef struct tagSOLE_AUTHENTICATION_INFO {")
cpp_quote("    DWORD dwAuthnSvc;")
cpp_quote("    DWORD dwAuthzSvc;")
cpp_quote("    void *pAuthInfo;")
cpp_quote("  } SOLE_AUTHENTICATION_INFO;")
cpp_quote("")
cpp_quote("  typedef struct tagSOLE_AUTHENTICATION_INFO *PSOLE_AUTHENTICATION_INFO;")
cpp_quote("")
cpp_quote("  typedef struct tagSOLE_AUTHENTICATION_LIST {")
cpp_quote("    DWORD cAuthInfo;")
cpp_quote("    SOLE_AUTHENTICATION_INFO *aAuthInfo;")
cpp_quote("  } SOLE_AUTHENTICATION_LIST;")
cpp_quote("")
cpp_quote("  typedef struct tagSOLE_AUTHENTICATION_LIST *PSOLE_AUTHENTICATION_LIST;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IClientSecurity;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IClientSecurity : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI QueryBlanket(IUnknown *pProxy,DWORD *pAuthnSvc,DWORD *pAuthzSvc,OLECHAR **pServerPrincName,DWORD *pAuthnLevel,DWORD *pImpLevel,void **pAuthInfo,DWORD *pCapabilites) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetBlanket(IUnknown *pProxy,DWORD dwAuthnSvc,DWORD dwAuthzSvc,OLECHAR *pServerPrincName,DWORD dwAuthnLevel,DWORD dwImpLevel,void *pAuthInfo,DWORD dwCapabilities) = 0;")
cpp_quote("    virtual HRESULT WINAPI CopyProxy(IUnknown *pProxy,IUnknown **ppCopy) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IClientSecurityVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IClientSecurity *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IClientSecurity *This);")
cpp_quote("      ULONG (WINAPI *Release)(IClientSecurity *This);")
cpp_quote("      HRESULT (WINAPI *QueryBlanket)(IClientSecurity *This,IUnknown *pProxy,DWORD *pAuthnSvc,DWORD *pAuthzSvc,OLECHAR **pServerPrincName,DWORD *pAuthnLevel,DWORD *pImpLevel,void **pAuthInfo,DWORD *pCapabilites);")
cpp_quote("      HRESULT (WINAPI *SetBlanket)(IClientSecurity *This,IUnknown *pProxy,DWORD dwAuthnSvc,DWORD dwAuthzSvc,OLECHAR *pServerPrincName,DWORD dwAuthnLevel,DWORD dwImpLevel,void *pAuthInfo,DWORD dwCapabilities);")
cpp_quote("      HRESULT (WINAPI *CopyProxy)(IClientSecurity *This,IUnknown *pProxy,IUnknown **ppCopy);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IClientSecurityVtbl;")
cpp_quote("  struct IClientSecurity {")
cpp_quote("    CONST_VTBL struct IClientSecurityVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IClientSecurity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IClientSecurity_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IClientSecurity_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IClientSecurity_QueryBlanket(This,pProxy,pAuthnSvc,pAuthzSvc,pServerPrincName,pAuthnLevel,pImpLevel,pAuthInfo,pCapabilites) (This)->lpVtbl->QueryBlanket(This,pProxy,pAuthnSvc,pAuthzSvc,pServerPrincName,pAuthnLevel,pImpLevel,pAuthInfo,pCapabilites)")
cpp_quote("#define IClientSecurity_SetBlanket(This,pProxy,dwAuthnSvc,dwAuthzSvc,pServerPrincName,dwAuthnLevel,dwImpLevel,pAuthInfo,dwCapabilities) (This)->lpVtbl->SetBlanket(This,pProxy,dwAuthnSvc,dwAuthzSvc,pServerPrincName,dwAuthnLevel,dwImpLevel,pAuthInfo,dwCapabilities)")
cpp_quote("#define IClientSecurity_CopyProxy(This,pProxy,ppCopy) (This)->lpVtbl->CopyProxy(This,pProxy,ppCopy)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IClientSecurity_QueryBlanket_Proxy(IClientSecurity *This,IUnknown *pProxy,DWORD *pAuthnSvc,DWORD *pAuthzSvc,OLECHAR **pServerPrincName,DWORD *pAuthnLevel,DWORD *pImpLevel,void **pAuthInfo,DWORD *pCapabilites);")
cpp_quote("  void __RPC_STUB IClientSecurity_QueryBlanket_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IClientSecurity_SetBlanket_Proxy(IClientSecurity *This,IUnknown *pProxy,DWORD dwAuthnSvc,DWORD dwAuthzSvc,OLECHAR *pServerPrincName,DWORD dwAuthnLevel,DWORD dwImpLevel,void *pAuthInfo,DWORD dwCapabilities);")
cpp_quote("  void __RPC_STUB IClientSecurity_SetBlanket_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IClientSecurity_CopyProxy_Proxy(IClientSecurity *This,IUnknown *pProxy,IUnknown **ppCopy);")
cpp_quote("  void __RPC_STUB IClientSecurity_CopyProxy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IServerSecurity_INTERFACE_DEFINED__")
cpp_quote("#define __IServerSecurity_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IServerSecurity;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IServerSecurity : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI QueryBlanket(DWORD *pAuthnSvc,DWORD *pAuthzSvc,OLECHAR **pServerPrincName,DWORD *pAuthnLevel,DWORD *pImpLevel,void **pPrivs,DWORD *pCapabilities) = 0;")
cpp_quote("    virtual HRESULT WINAPI ImpersonateClient(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI RevertToSelf(void) = 0;")
cpp_quote("    virtual WINBOOL WINAPI IsImpersonating(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IServerSecurityVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IServerSecurity *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IServerSecurity *This);")
cpp_quote("      ULONG (WINAPI *Release)(IServerSecurity *This);")
cpp_quote("      HRESULT (WINAPI *QueryBlanket)(IServerSecurity *This,DWORD *pAuthnSvc,DWORD *pAuthzSvc,OLECHAR **pServerPrincName,DWORD *pAuthnLevel,DWORD *pImpLevel,void **pPrivs,DWORD *pCapabilities);")
cpp_quote("      HRESULT (WINAPI *ImpersonateClient)(IServerSecurity *This);")
cpp_quote("      HRESULT (WINAPI *RevertToSelf)(IServerSecurity *This);")
cpp_quote("      WINBOOL (WINAPI *IsImpersonating)(IServerSecurity *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IServerSecurityVtbl;")
cpp_quote("  struct IServerSecurity {")
cpp_quote("    CONST_VTBL struct IServerSecurityVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IServerSecurity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IServerSecurity_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IServerSecurity_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IServerSecurity_QueryBlanket(This,pAuthnSvc,pAuthzSvc,pServerPrincName,pAuthnLevel,pImpLevel,pPrivs,pCapabilities) (This)->lpVtbl->QueryBlanket(This,pAuthnSvc,pAuthzSvc,pServerPrincName,pAuthnLevel,pImpLevel,pPrivs,pCapabilities)")
cpp_quote("#define IServerSecurity_ImpersonateClient(This) (This)->lpVtbl->ImpersonateClient(This)")
cpp_quote("#define IServerSecurity_RevertToSelf(This) (This)->lpVtbl->RevertToSelf(This)")
cpp_quote("#define IServerSecurity_IsImpersonating(This) (This)->lpVtbl->IsImpersonating(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IServerSecurity_QueryBlanket_Proxy(IServerSecurity *This,DWORD *pAuthnSvc,DWORD *pAuthzSvc,OLECHAR **pServerPrincName,DWORD *pAuthnLevel,DWORD *pImpLevel,void **pPrivs,DWORD *pCapabilities);")
cpp_quote("  void __RPC_STUB IServerSecurity_QueryBlanket_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IServerSecurity_ImpersonateClient_Proxy(IServerSecurity *This);")
cpp_quote("  void __RPC_STUB IServerSecurity_ImpersonateClient_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IServerSecurity_RevertToSelf_Proxy(IServerSecurity *This);")
cpp_quote("  void __RPC_STUB IServerSecurity_RevertToSelf_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  WINBOOL WINAPI IServerSecurity_IsImpersonating_Proxy(IServerSecurity *This);")
cpp_quote("  void __RPC_STUB IServerSecurity_IsImpersonating_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IClassActivator_INTERFACE_DEFINED__")
cpp_quote("#define __IClassActivator_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IClassActivator;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IClassActivator : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetClassObject(REFCLSID rclsid,DWORD dwClassContext,LCID locale,REFIID riid,void **ppv) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IClassActivatorVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IClassActivator *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IClassActivator *This);")
cpp_quote("      ULONG (WINAPI *Release)(IClassActivator *This);")
cpp_quote("      HRESULT (WINAPI *GetClassObject)(IClassActivator *This,REFCLSID rclsid,DWORD dwClassContext,LCID locale,REFIID riid,void **ppv);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IClassActivatorVtbl;")
cpp_quote("  struct IClassActivator {")
cpp_quote("    CONST_VTBL struct IClassActivatorVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IClassActivator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IClassActivator_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IClassActivator_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IClassActivator_GetClassObject(This,rclsid,dwClassContext,locale,riid,ppv) (This)->lpVtbl->GetClassObject(This,rclsid,dwClassContext,locale,riid,ppv)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IClassActivator_GetClassObject_Proxy(IClassActivator *This,REFCLSID rclsid,DWORD dwClassContext,LCID locale,REFIID riid,void **ppv);")
cpp_quote("  void __RPC_STUB IClassActivator_GetClassObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcOptions_INTERFACE_DEFINED__")
cpp_quote("#define __IRpcOptions_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IRpcOptions;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IRpcOptions : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Set(IUnknown *pPrx,DWORD dwProperty,ULONG_PTR dwValue) = 0;")
cpp_quote("    virtual HRESULT WINAPI Query(IUnknown *pPrx,DWORD dwProperty,ULONG_PTR *pdwValue) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IRpcOptionsVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IRpcOptions *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IRpcOptions *This);")
cpp_quote("      ULONG (WINAPI *Release)(IRpcOptions *This);")
cpp_quote("      HRESULT (WINAPI *Set)(IRpcOptions *This,IUnknown *pPrx,DWORD dwProperty,ULONG_PTR dwValue);")
cpp_quote("      HRESULT (WINAPI *Query)(IRpcOptions *This,IUnknown *pPrx,DWORD dwProperty,ULONG_PTR *pdwValue);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IRpcOptionsVtbl;")
cpp_quote("  struct IRpcOptions {")
cpp_quote("    CONST_VTBL struct IRpcOptionsVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IRpcOptions_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IRpcOptions_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IRpcOptions_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IRpcOptions_Set(This,pPrx,dwProperty,dwValue) (This)->lpVtbl->Set(This,pPrx,dwProperty,dwValue)")
cpp_quote("#define IRpcOptions_Query(This,pPrx,dwProperty,pdwValue) (This)->lpVtbl->Query(This,pPrx,dwProperty,pdwValue)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IRpcOptions_Set_Proxy(IRpcOptions *This,IUnknown *pPrx,DWORD dwProperty,ULONG_PTR dwValue);")
cpp_quote("  void __RPC_STUB IRpcOptions_Set_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcOptions_Query_Proxy(IRpcOptions *This,IUnknown *pPrx,DWORD dwProperty,ULONG_PTR *pdwValue);")
cpp_quote("  void __RPC_STUB IRpcOptions_Query_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  enum __MIDL___MIDL_itf_objidl_0055_0001 {")
cpp_quote("    COMBND_RPCTIMEOUT = 0x1,COMBND_SERVER_LOCALITY = 0x2")
cpp_quote("  };")
cpp_quote("")
cpp_quote("  enum __MIDL___MIDL_itf_objidl_0055_0002 {")
cpp_quote("    SERVER_LOCALITY_PROCESS_LOCAL = 0,SERVER_LOCALITY_MACHINE_LOCAL = 1,SERVER_LOCALITY_REMOTE = 2")
cpp_quote("  };")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0055_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0055_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("#ifndef __IFillLockBytes_INTERFACE_DEFINED__")
cpp_quote("#define __IFillLockBytes_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IFillLockBytes;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IFillLockBytes : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI FillAppend(const void *pv,ULONG cb,ULONG *pcbWritten) = 0;")
cpp_quote("    virtual HRESULT WINAPI FillAt(ULARGE_INTEGER ulOffset,const void *pv,ULONG cb,ULONG *pcbWritten) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetFillSize(ULARGE_INTEGER ulSize) = 0;")
cpp_quote("    virtual HRESULT WINAPI Terminate(WINBOOL bCanceled) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IFillLockBytesVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IFillLockBytes *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IFillLockBytes *This);")
cpp_quote("      ULONG (WINAPI *Release)(IFillLockBytes *This);")
cpp_quote("      HRESULT (WINAPI *FillAppend)(IFillLockBytes *This,const void *pv,ULONG cb,ULONG *pcbWritten);")
cpp_quote("      HRESULT (WINAPI *FillAt)(IFillLockBytes *This,ULARGE_INTEGER ulOffset,const void *pv,ULONG cb,ULONG *pcbWritten);")
cpp_quote("      HRESULT (WINAPI *SetFillSize)(IFillLockBytes *This,ULARGE_INTEGER ulSize);")
cpp_quote("      HRESULT (WINAPI *Terminate)(IFillLockBytes *This,WINBOOL bCanceled);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IFillLockBytesVtbl;")
cpp_quote("  struct IFillLockBytes {")
cpp_quote("    CONST_VTBL struct IFillLockBytesVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IFillLockBytes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IFillLockBytes_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IFillLockBytes_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IFillLockBytes_FillAppend(This,pv,cb,pcbWritten) (This)->lpVtbl->FillAppend(This,pv,cb,pcbWritten)")
cpp_quote("#define IFillLockBytes_FillAt(This,ulOffset,pv,cb,pcbWritten) (This)->lpVtbl->FillAt(This,ulOffset,pv,cb,pcbWritten)")
cpp_quote("#define IFillLockBytes_SetFillSize(This,ulSize) (This)->lpVtbl->SetFillSize(This,ulSize)")
cpp_quote("#define IFillLockBytes_Terminate(This,bCanceled) (This)->lpVtbl->Terminate(This,bCanceled)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IFillLockBytes_RemoteFillAppend_Proxy(IFillLockBytes *This,const byte *pv,ULONG cb,ULONG *pcbWritten);")
cpp_quote("  void __RPC_STUB IFillLockBytes_RemoteFillAppend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFillLockBytes_RemoteFillAt_Proxy(IFillLockBytes *This,ULARGE_INTEGER ulOffset,const byte *pv,ULONG cb,ULONG *pcbWritten);")
cpp_quote("  void __RPC_STUB IFillLockBytes_RemoteFillAt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFillLockBytes_SetFillSize_Proxy(IFillLockBytes *This,ULARGE_INTEGER ulSize);")
cpp_quote("  void __RPC_STUB IFillLockBytes_SetFillSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFillLockBytes_Terminate_Proxy(IFillLockBytes *This,WINBOOL bCanceled);")
cpp_quote("  void __RPC_STUB IFillLockBytes_Terminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IProgressNotify_INTERFACE_DEFINED__")
cpp_quote("#define __IProgressNotify_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IProgressNotify;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IProgressNotify : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI OnProgress(DWORD dwProgressCurrent,DWORD dwProgressMaximum,WINBOOL fAccurate,WINBOOL fOwner) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IProgressNotifyVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IProgressNotify *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IProgressNotify *This);")
cpp_quote("      ULONG (WINAPI *Release)(IProgressNotify *This);")
cpp_quote("      HRESULT (WINAPI *OnProgress)(IProgressNotify *This,DWORD dwProgressCurrent,DWORD dwProgressMaximum,WINBOOL fAccurate,WINBOOL fOwner);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IProgressNotifyVtbl;")
cpp_quote("  struct IProgressNotify {")
cpp_quote("    CONST_VTBL struct IProgressNotifyVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IProgressNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IProgressNotify_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IProgressNotify_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IProgressNotify_OnProgress(This,dwProgressCurrent,dwProgressMaximum,fAccurate,fOwner) (This)->lpVtbl->OnProgress(This,dwProgressCurrent,dwProgressMaximum,fAccurate,fOwner)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IProgressNotify_OnProgress_Proxy(IProgressNotify *This,DWORD dwProgressCurrent,DWORD dwProgressMaximum,WINBOOL fAccurate,WINBOOL fOwner);")
cpp_quote("  void __RPC_STUB IProgressNotify_OnProgress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ILayoutStorage_INTERFACE_DEFINED__")
cpp_quote("#define __ILayoutStorage_INTERFACE_DEFINED__")
cpp_quote("  typedef struct tagStorageLayout {")
cpp_quote("    DWORD LayoutType;")
cpp_quote("    OLECHAR *pwcsElementName;")
cpp_quote("    LARGE_INTEGER cOffset;")
cpp_quote("    LARGE_INTEGER cBytes;")
cpp_quote("  } StorageLayout;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ILayoutStorage;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ILayoutStorage : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI LayoutScript(StorageLayout *pStorageLayout,DWORD nEntries,DWORD glfInterleavedFlag) = 0;")
cpp_quote("    virtual HRESULT WINAPI BeginMonitor(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI EndMonitor(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI ReLayoutDocfile(OLECHAR *pwcsNewDfName) = 0;")
cpp_quote("    virtual HRESULT WINAPI ReLayoutDocfileOnILockBytes(ILockBytes *pILockBytes) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ILayoutStorageVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ILayoutStorage *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ILayoutStorage *This);")
cpp_quote("      ULONG (WINAPI *Release)(ILayoutStorage *This);")
cpp_quote("      HRESULT (WINAPI *LayoutScript)(ILayoutStorage *This,StorageLayout *pStorageLayout,DWORD nEntries,DWORD glfInterleavedFlag);")
cpp_quote("      HRESULT (WINAPI *BeginMonitor)(ILayoutStorage *This);")
cpp_quote("      HRESULT (WINAPI *EndMonitor)(ILayoutStorage *This);")
cpp_quote("      HRESULT (WINAPI *ReLayoutDocfile)(ILayoutStorage *This,OLECHAR *pwcsNewDfName);")
cpp_quote("      HRESULT (WINAPI *ReLayoutDocfileOnILockBytes)(ILayoutStorage *This,ILockBytes *pILockBytes);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ILayoutStorageVtbl;")
cpp_quote("  struct ILayoutStorage {")
cpp_quote("    CONST_VTBL struct ILayoutStorageVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ILayoutStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ILayoutStorage_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ILayoutStorage_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ILayoutStorage_LayoutScript(This,pStorageLayout,nEntries,glfInterleavedFlag) (This)->lpVtbl->LayoutScript(This,pStorageLayout,nEntries,glfInterleavedFlag)")
cpp_quote("#define ILayoutStorage_BeginMonitor(This) (This)->lpVtbl->BeginMonitor(This)")
cpp_quote("#define ILayoutStorage_EndMonitor(This) (This)->lpVtbl->EndMonitor(This)")
cpp_quote("#define ILayoutStorage_ReLayoutDocfile(This,pwcsNewDfName) (This)->lpVtbl->ReLayoutDocfile(This,pwcsNewDfName)")
cpp_quote("#define ILayoutStorage_ReLayoutDocfileOnILockBytes(This,pILockBytes) (This)->lpVtbl->ReLayoutDocfileOnILockBytes(This,pILockBytes)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ILayoutStorage_LayoutScript_Proxy(ILayoutStorage *This,StorageLayout *pStorageLayout,DWORD nEntries,DWORD glfInterleavedFlag);")
cpp_quote("  void __RPC_STUB ILayoutStorage_LayoutScript_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ILayoutStorage_BeginMonitor_Proxy(ILayoutStorage *This);")
cpp_quote("  void __RPC_STUB ILayoutStorage_BeginMonitor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ILayoutStorage_EndMonitor_Proxy(ILayoutStorage *This);")
cpp_quote("  void __RPC_STUB ILayoutStorage_EndMonitor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ILayoutStorage_ReLayoutDocfile_Proxy(ILayoutStorage *This,OLECHAR *pwcsNewDfName);")
cpp_quote("  void __RPC_STUB ILayoutStorage_ReLayoutDocfile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ILayoutStorage_ReLayoutDocfileOnILockBytes_Proxy(ILayoutStorage *This,ILockBytes *pILockBytes);")
cpp_quote("  void __RPC_STUB ILayoutStorage_ReLayoutDocfileOnILockBytes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IBlockingLock_INTERFACE_DEFINED__")
cpp_quote("#define __IBlockingLock_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IBlockingLock;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IBlockingLock : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Lock(DWORD dwTimeout) = 0;")
cpp_quote("    virtual HRESULT WINAPI Unlock(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IBlockingLockVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IBlockingLock *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IBlockingLock *This);")
cpp_quote("      ULONG (WINAPI *Release)(IBlockingLock *This);")
cpp_quote("      HRESULT (WINAPI *Lock)(IBlockingLock *This,DWORD dwTimeout);")
cpp_quote("      HRESULT (WINAPI *Unlock)(IBlockingLock *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IBlockingLockVtbl;")
cpp_quote("  struct IBlockingLock {")
cpp_quote("    CONST_VTBL struct IBlockingLockVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IBlockingLock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IBlockingLock_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IBlockingLock_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IBlockingLock_Lock(This,dwTimeout) (This)->lpVtbl->Lock(This,dwTimeout)")
cpp_quote("#define IBlockingLock_Unlock(This) (This)->lpVtbl->Unlock(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IBlockingLock_Lock_Proxy(IBlockingLock *This,DWORD dwTimeout);")
cpp_quote("  void __RPC_STUB IBlockingLock_Lock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IBlockingLock_Unlock_Proxy(IBlockingLock *This);")
cpp_quote("  void __RPC_STUB IBlockingLock_Unlock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ITimeAndNoticeControl_INTERFACE_DEFINED__")
cpp_quote("#define __ITimeAndNoticeControl_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_ITimeAndNoticeControl;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ITimeAndNoticeControl : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SuppressChanges(DWORD res1,DWORD res2) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ITimeAndNoticeControlVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ITimeAndNoticeControl *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ITimeAndNoticeControl *This);")
cpp_quote("      ULONG (WINAPI *Release)(ITimeAndNoticeControl *This);")
cpp_quote("      HRESULT (WINAPI *SuppressChanges)(ITimeAndNoticeControl *This,DWORD res1,DWORD res2);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ITimeAndNoticeControlVtbl;")
cpp_quote("  struct ITimeAndNoticeControl {")
cpp_quote("    CONST_VTBL struct ITimeAndNoticeControlVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ITimeAndNoticeControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ITimeAndNoticeControl_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ITimeAndNoticeControl_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ITimeAndNoticeControl_SuppressChanges(This,res1,res2) (This)->lpVtbl->SuppressChanges(This,res1,res2)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ITimeAndNoticeControl_SuppressChanges_Proxy(ITimeAndNoticeControl *This,DWORD res1,DWORD res2);")
cpp_quote("  void __RPC_STUB ITimeAndNoticeControl_SuppressChanges_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOplockStorage_INTERFACE_DEFINED__")
cpp_quote("#define __IOplockStorage_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IOplockStorage;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOplockStorage : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI CreateStorageEx(LPCWSTR pwcsName,DWORD grfMode,DWORD stgfmt,DWORD grfAttrs,REFIID riid,void **ppstgOpen) = 0;")
cpp_quote("    virtual HRESULT WINAPI OpenStorageEx(LPCWSTR pwcsName,DWORD grfMode,DWORD stgfmt,DWORD grfAttrs,REFIID riid,void **ppstgOpen) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOplockStorageVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOplockStorage *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOplockStorage *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOplockStorage *This);")
cpp_quote("      HRESULT (WINAPI *CreateStorageEx)(IOplockStorage *This,LPCWSTR pwcsName,DWORD grfMode,DWORD stgfmt,DWORD grfAttrs,REFIID riid,void **ppstgOpen);")
cpp_quote("      HRESULT (WINAPI *OpenStorageEx)(IOplockStorage *This,LPCWSTR pwcsName,DWORD grfMode,DWORD stgfmt,DWORD grfAttrs,REFIID riid,void **ppstgOpen);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOplockStorageVtbl;")
cpp_quote("  struct IOplockStorage {")
cpp_quote("    CONST_VTBL struct IOplockStorageVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOplockStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOplockStorage_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOplockStorage_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOplockStorage_CreateStorageEx(This,pwcsName,grfMode,stgfmt,grfAttrs,riid,ppstgOpen) (This)->lpVtbl->CreateStorageEx(This,pwcsName,grfMode,stgfmt,grfAttrs,riid,ppstgOpen)")
cpp_quote("#define IOplockStorage_OpenStorageEx(This,pwcsName,grfMode,stgfmt,grfAttrs,riid,ppstgOpen) (This)->lpVtbl->OpenStorageEx(This,pwcsName,grfMode,stgfmt,grfAttrs,riid,ppstgOpen)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOplockStorage_CreateStorageEx_Proxy(IOplockStorage *This,LPCWSTR pwcsName,DWORD grfMode,DWORD stgfmt,DWORD grfAttrs,REFIID riid,void **ppstgOpen);")
cpp_quote("  void __RPC_STUB IOplockStorage_CreateStorageEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOplockStorage_OpenStorageEx_Proxy(IOplockStorage *This,LPCWSTR pwcsName,DWORD grfMode,DWORD stgfmt,DWORD grfAttrs,REFIID riid,void **ppstgOpen);")
cpp_quote("  void __RPC_STUB IOplockStorage_OpenStorageEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISurrogate_INTERFACE_DEFINED__")
cpp_quote("#define __ISurrogate_INTERFACE_DEFINED__")
cpp_quote("  typedef ISurrogate *LPSURROGATE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ISurrogate;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ISurrogate : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI LoadDllServer(REFCLSID Clsid) = 0;")
cpp_quote("    virtual HRESULT WINAPI FreeSurrogate(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ISurrogateVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ISurrogate *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ISurrogate *This);")
cpp_quote("      ULONG (WINAPI *Release)(ISurrogate *This);")
cpp_quote("      HRESULT (WINAPI *LoadDllServer)(ISurrogate *This,REFCLSID Clsid);")
cpp_quote("      HRESULT (WINAPI *FreeSurrogate)(ISurrogate *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ISurrogateVtbl;")
cpp_quote("  struct ISurrogate {")
cpp_quote("    CONST_VTBL struct ISurrogateVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ISurrogate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ISurrogate_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ISurrogate_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ISurrogate_LoadDllServer(This,Clsid) (This)->lpVtbl->LoadDllServer(This,Clsid)")
cpp_quote("#define ISurrogate_FreeSurrogate(This) (This)->lpVtbl->FreeSurrogate(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ISurrogate_LoadDllServer_Proxy(ISurrogate *This,REFCLSID Clsid);")
cpp_quote("  void __RPC_STUB ISurrogate_LoadDllServer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ISurrogate_FreeSurrogate_Proxy(ISurrogate *This);")
cpp_quote("  void __RPC_STUB ISurrogate_FreeSurrogate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IGlobalInterfaceTable_INTERFACE_DEFINED__")
cpp_quote("#define __IGlobalInterfaceTable_INTERFACE_DEFINED__")
cpp_quote("  typedef IGlobalInterfaceTable *LPGLOBALINTERFACETABLE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IGlobalInterfaceTable;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IGlobalInterfaceTable : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI RegisterInterfaceInGlobal(IUnknown *pUnk,REFIID riid,DWORD *pdwCookie) = 0;")
cpp_quote("    virtual HRESULT WINAPI RevokeInterfaceFromGlobal(DWORD dwCookie) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetInterfaceFromGlobal(DWORD dwCookie,REFIID riid,void **ppv) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IGlobalInterfaceTableVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IGlobalInterfaceTable *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IGlobalInterfaceTable *This);")
cpp_quote("      ULONG (WINAPI *Release)(IGlobalInterfaceTable *This);")
cpp_quote("      HRESULT (WINAPI *RegisterInterfaceInGlobal)(IGlobalInterfaceTable *This,IUnknown *pUnk,REFIID riid,DWORD *pdwCookie);")
cpp_quote("      HRESULT (WINAPI *RevokeInterfaceFromGlobal)(IGlobalInterfaceTable *This,DWORD dwCookie);")
cpp_quote("      HRESULT (WINAPI *GetInterfaceFromGlobal)(IGlobalInterfaceTable *This,DWORD dwCookie,REFIID riid,void **ppv);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IGlobalInterfaceTableVtbl;")
cpp_quote("  struct IGlobalInterfaceTable {")
cpp_quote("    CONST_VTBL struct IGlobalInterfaceTableVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IGlobalInterfaceTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IGlobalInterfaceTable_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IGlobalInterfaceTable_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IGlobalInterfaceTable_RegisterInterfaceInGlobal(This,pUnk,riid,pdwCookie) (This)->lpVtbl->RegisterInterfaceInGlobal(This,pUnk,riid,pdwCookie)")
cpp_quote("#define IGlobalInterfaceTable_RevokeInterfaceFromGlobal(This,dwCookie) (This)->lpVtbl->RevokeInterfaceFromGlobal(This,dwCookie)")
cpp_quote("#define IGlobalInterfaceTable_GetInterfaceFromGlobal(This,dwCookie,riid,ppv) (This)->lpVtbl->GetInterfaceFromGlobal(This,dwCookie,riid,ppv)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IGlobalInterfaceTable_RegisterInterfaceInGlobal_Proxy(IGlobalInterfaceTable *This,IUnknown *pUnk,REFIID riid,DWORD *pdwCookie);")
cpp_quote("  void __RPC_STUB IGlobalInterfaceTable_RegisterInterfaceInGlobal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IGlobalInterfaceTable_RevokeInterfaceFromGlobal_Proxy(IGlobalInterfaceTable *This,DWORD dwCookie);")
cpp_quote("  void __RPC_STUB IGlobalInterfaceTable_RevokeInterfaceFromGlobal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IGlobalInterfaceTable_GetInterfaceFromGlobal_Proxy(IGlobalInterfaceTable *This,DWORD dwCookie,REFIID riid,void **ppv);")
cpp_quote("  void __RPC_STUB IGlobalInterfaceTable_GetInterfaceFromGlobal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IDirectWriterLock_INTERFACE_DEFINED__")
cpp_quote("#define __IDirectWriterLock_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IDirectWriterLock;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IDirectWriterLock : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI WaitForWriteAccess(DWORD dwTimeout) = 0;")
cpp_quote("    virtual HRESULT WINAPI ReleaseWriteAccess(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI HaveWriteAccess(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IDirectWriterLockVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IDirectWriterLock *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IDirectWriterLock *This);")
cpp_quote("      ULONG (WINAPI *Release)(IDirectWriterLock *This);")
cpp_quote("      HRESULT (WINAPI *WaitForWriteAccess)(IDirectWriterLock *This,DWORD dwTimeout);")
cpp_quote("      HRESULT (WINAPI *ReleaseWriteAccess)(IDirectWriterLock *This);")
cpp_quote("      HRESULT (WINAPI *HaveWriteAccess)(IDirectWriterLock *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IDirectWriterLockVtbl;")
cpp_quote("  struct IDirectWriterLock {")
cpp_quote("    CONST_VTBL struct IDirectWriterLockVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IDirectWriterLock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IDirectWriterLock_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IDirectWriterLock_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IDirectWriterLock_WaitForWriteAccess(This,dwTimeout) (This)->lpVtbl->WaitForWriteAccess(This,dwTimeout)")
cpp_quote("#define IDirectWriterLock_ReleaseWriteAccess(This) (This)->lpVtbl->ReleaseWriteAccess(This)")
cpp_quote("#define IDirectWriterLock_HaveWriteAccess(This) (This)->lpVtbl->HaveWriteAccess(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IDirectWriterLock_WaitForWriteAccess_Proxy(IDirectWriterLock *This,DWORD dwTimeout);")
cpp_quote("  void __RPC_STUB IDirectWriterLock_WaitForWriteAccess_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IDirectWriterLock_ReleaseWriteAccess_Proxy(IDirectWriterLock *This);")
cpp_quote("  void __RPC_STUB IDirectWriterLock_ReleaseWriteAccess_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IDirectWriterLock_HaveWriteAccess_Proxy(IDirectWriterLock *This);")
cpp_quote("  void __RPC_STUB IDirectWriterLock_HaveWriteAccess_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISynchronize_INTERFACE_DEFINED__")
cpp_quote("#define __ISynchronize_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_ISynchronize;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ISynchronize : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Wait(DWORD dwFlags,DWORD dwMilliseconds) = 0;")
cpp_quote("    virtual HRESULT WINAPI Signal(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Reset(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ISynchronizeVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ISynchronize *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ISynchronize *This);")
cpp_quote("      ULONG (WINAPI *Release)(ISynchronize *This);")
cpp_quote("      HRESULT (WINAPI *Wait)(ISynchronize *This,DWORD dwFlags,DWORD dwMilliseconds);")
cpp_quote("      HRESULT (WINAPI *Signal)(ISynchronize *This);")
cpp_quote("      HRESULT (WINAPI *Reset)(ISynchronize *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ISynchronizeVtbl;")
cpp_quote("  struct ISynchronize {")
cpp_quote("    CONST_VTBL struct ISynchronizeVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ISynchronize_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ISynchronize_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ISynchronize_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ISynchronize_Wait(This,dwFlags,dwMilliseconds) (This)->lpVtbl->Wait(This,dwFlags,dwMilliseconds)")
cpp_quote("#define ISynchronize_Signal(This) (This)->lpVtbl->Signal(This)")
cpp_quote("#define ISynchronize_Reset(This) (This)->lpVtbl->Reset(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ISynchronize_Wait_Proxy(ISynchronize *This,DWORD dwFlags,DWORD dwMilliseconds);")
cpp_quote("  void __RPC_STUB ISynchronize_Wait_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ISynchronize_Signal_Proxy(ISynchronize *This);")
cpp_quote("  void __RPC_STUB ISynchronize_Signal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ISynchronize_Reset_Proxy(ISynchronize *This);")
cpp_quote("  void __RPC_STUB ISynchronize_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISynchronizeHandle_INTERFACE_DEFINED__")
cpp_quote("#define __ISynchronizeHandle_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_ISynchronizeHandle;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ISynchronizeHandle : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetHandle(HANDLE *ph) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ISynchronizeHandleVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ISynchronizeHandle *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ISynchronizeHandle *This);")
cpp_quote("      ULONG (WINAPI *Release)(ISynchronizeHandle *This);")
cpp_quote("      HRESULT (WINAPI *GetHandle)(ISynchronizeHandle *This,HANDLE *ph);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ISynchronizeHandleVtbl;")
cpp_quote("  struct ISynchronizeHandle {")
cpp_quote("    CONST_VTBL struct ISynchronizeHandleVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ISynchronizeHandle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ISynchronizeHandle_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ISynchronizeHandle_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ISynchronizeHandle_GetHandle(This,ph) (This)->lpVtbl->GetHandle(This,ph)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ISynchronizeHandle_GetHandle_Proxy(ISynchronizeHandle *This,HANDLE *ph);")
cpp_quote("  void __RPC_STUB ISynchronizeHandle_GetHandle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISynchronizeEvent_INTERFACE_DEFINED__")
cpp_quote("#define __ISynchronizeEvent_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_ISynchronizeEvent;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ISynchronizeEvent : public ISynchronizeHandle {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetEventHandle(HANDLE *ph) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ISynchronizeEventVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ISynchronizeEvent *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ISynchronizeEvent *This);")
cpp_quote("      ULONG (WINAPI *Release)(ISynchronizeEvent *This);")
cpp_quote("      HRESULT (WINAPI *GetHandle)(ISynchronizeEvent *This,HANDLE *ph);")
cpp_quote("      HRESULT (WINAPI *SetEventHandle)(ISynchronizeEvent *This,HANDLE *ph);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ISynchronizeEventVtbl;")
cpp_quote("  struct ISynchronizeEvent {")
cpp_quote("    CONST_VTBL struct ISynchronizeEventVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ISynchronizeEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ISynchronizeEvent_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ISynchronizeEvent_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ISynchronizeEvent_GetHandle(This,ph) (This)->lpVtbl->GetHandle(This,ph)")
cpp_quote("#define ISynchronizeEvent_SetEventHandle(This,ph) (This)->lpVtbl->SetEventHandle(This,ph)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ISynchronizeEvent_SetEventHandle_Proxy(ISynchronizeEvent *This,HANDLE *ph);")
cpp_quote("  void __RPC_STUB ISynchronizeEvent_SetEventHandle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISynchronizeContainer_INTERFACE_DEFINED__")
cpp_quote("#define __ISynchronizeContainer_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_ISynchronizeContainer;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ISynchronizeContainer : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI AddSynchronize(ISynchronize *pSync) = 0;")
cpp_quote("    virtual HRESULT WINAPI WaitMultiple(DWORD dwFlags,DWORD dwTimeOut,ISynchronize **ppSync) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ISynchronizeContainerVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ISynchronizeContainer *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ISynchronizeContainer *This);")
cpp_quote("      ULONG (WINAPI *Release)(ISynchronizeContainer *This);")
cpp_quote("      HRESULT (WINAPI *AddSynchronize)(ISynchronizeContainer *This,ISynchronize *pSync);")
cpp_quote("      HRESULT (WINAPI *WaitMultiple)(ISynchronizeContainer *This,DWORD dwFlags,DWORD dwTimeOut,ISynchronize **ppSync);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ISynchronizeContainerVtbl;")
cpp_quote("  struct ISynchronizeContainer {")
cpp_quote("    CONST_VTBL struct ISynchronizeContainerVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ISynchronizeContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ISynchronizeContainer_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ISynchronizeContainer_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ISynchronizeContainer_AddSynchronize(This,pSync) (This)->lpVtbl->AddSynchronize(This,pSync)")
cpp_quote("#define ISynchronizeContainer_WaitMultiple(This,dwFlags,dwTimeOut,ppSync) (This)->lpVtbl->WaitMultiple(This,dwFlags,dwTimeOut,ppSync)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ISynchronizeContainer_AddSynchronize_Proxy(ISynchronizeContainer *This,ISynchronize *pSync);")
cpp_quote("  void __RPC_STUB ISynchronizeContainer_AddSynchronize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ISynchronizeContainer_WaitMultiple_Proxy(ISynchronizeContainer *This,DWORD dwFlags,DWORD dwTimeOut,ISynchronize **ppSync);")
cpp_quote("  void __RPC_STUB ISynchronizeContainer_WaitMultiple_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISynchronizeMutex_INTERFACE_DEFINED__")
cpp_quote("#define __ISynchronizeMutex_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_ISynchronizeMutex;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ISynchronizeMutex : public ISynchronize {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI ReleaseMutex(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ISynchronizeMutexVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ISynchronizeMutex *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ISynchronizeMutex *This);")
cpp_quote("      ULONG (WINAPI *Release)(ISynchronizeMutex *This);")
cpp_quote("      HRESULT (WINAPI *Wait)(ISynchronizeMutex *This,DWORD dwFlags,DWORD dwMilliseconds);")
cpp_quote("      HRESULT (WINAPI *Signal)(ISynchronizeMutex *This);")
cpp_quote("      HRESULT (WINAPI *Reset)(ISynchronizeMutex *This);")
cpp_quote("      HRESULT (WINAPI *ReleaseMutex)(ISynchronizeMutex *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ISynchronizeMutexVtbl;")
cpp_quote("  struct ISynchronizeMutex {")
cpp_quote("    CONST_VTBL struct ISynchronizeMutexVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ISynchronizeMutex_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ISynchronizeMutex_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ISynchronizeMutex_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ISynchronizeMutex_Wait(This,dwFlags,dwMilliseconds) (This)->lpVtbl->Wait(This,dwFlags,dwMilliseconds)")
cpp_quote("#define ISynchronizeMutex_Signal(This) (This)->lpVtbl->Signal(This)")
cpp_quote("#define ISynchronizeMutex_Reset(This) (This)->lpVtbl->Reset(This)")
cpp_quote("#define ISynchronizeMutex_ReleaseMutex(This) (This)->lpVtbl->ReleaseMutex(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ISynchronizeMutex_ReleaseMutex_Proxy(ISynchronizeMutex *This);")
cpp_quote("  void __RPC_STUB ISynchronizeMutex_ReleaseMutex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICancelMethodCalls_INTERFACE_DEFINED__")
cpp_quote("#define __ICancelMethodCalls_INTERFACE_DEFINED__")
cpp_quote("  typedef ICancelMethodCalls *LPCANCELMETHODCALLS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ICancelMethodCalls;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ICancelMethodCalls : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Cancel(ULONG ulSeconds) = 0;")
cpp_quote("    virtual HRESULT WINAPI TestCancel(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ICancelMethodCallsVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ICancelMethodCalls *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ICancelMethodCalls *This);")
cpp_quote("      ULONG (WINAPI *Release)(ICancelMethodCalls *This);")
cpp_quote("      HRESULT (WINAPI *Cancel)(ICancelMethodCalls *This,ULONG ulSeconds);")
cpp_quote("      HRESULT (WINAPI *TestCancel)(ICancelMethodCalls *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ICancelMethodCallsVtbl;")
cpp_quote("  struct ICancelMethodCalls {")
cpp_quote("    CONST_VTBL struct ICancelMethodCallsVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ICancelMethodCalls_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ICancelMethodCalls_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ICancelMethodCalls_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ICancelMethodCalls_Cancel(This,ulSeconds) (This)->lpVtbl->Cancel(This,ulSeconds)")
cpp_quote("#define ICancelMethodCalls_TestCancel(This) (This)->lpVtbl->TestCancel(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ICancelMethodCalls_Cancel_Proxy(ICancelMethodCalls *This,ULONG ulSeconds);")
cpp_quote("  void __RPC_STUB ICancelMethodCalls_Cancel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICancelMethodCalls_TestCancel_Proxy(ICancelMethodCalls *This);")
cpp_quote("  void __RPC_STUB ICancelMethodCalls_TestCancel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IAsyncManager_INTERFACE_DEFINED__")
cpp_quote("#define __IAsyncManager_INTERFACE_DEFINED__")
cpp_quote("  typedef enum tagDCOM_CALL_STATE {")
cpp_quote("    DCOM_NONE = 0,DCOM_CALL_COMPLETE = 0x1,DCOM_CALL_CANCELED = 0x2")
cpp_quote("  } DCOM_CALL_STATE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IAsyncManager;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IAsyncManager : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI CompleteCall(HRESULT Result) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetCallContext(REFIID riid,void **pInterface) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetState(ULONG *pulStateFlags) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IAsyncManagerVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IAsyncManager *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IAsyncManager *This);")
cpp_quote("      ULONG (WINAPI *Release)(IAsyncManager *This);")
cpp_quote("      HRESULT (WINAPI *CompleteCall)(IAsyncManager *This,HRESULT Result);")
cpp_quote("      HRESULT (WINAPI *GetCallContext)(IAsyncManager *This,REFIID riid,void **pInterface);")
cpp_quote("      HRESULT (WINAPI *GetState)(IAsyncManager *This,ULONG *pulStateFlags);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IAsyncManagerVtbl;")
cpp_quote("  struct IAsyncManager {")
cpp_quote("    CONST_VTBL struct IAsyncManagerVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IAsyncManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IAsyncManager_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IAsyncManager_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IAsyncManager_CompleteCall(This,Result) (This)->lpVtbl->CompleteCall(This,Result)")
cpp_quote("#define IAsyncManager_GetCallContext(This,riid,pInterface) (This)->lpVtbl->GetCallContext(This,riid,pInterface)")
cpp_quote("#define IAsyncManager_GetState(This,pulStateFlags) (This)->lpVtbl->GetState(This,pulStateFlags)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IAsyncManager_CompleteCall_Proxy(IAsyncManager *This,HRESULT Result);")
cpp_quote("  void __RPC_STUB IAsyncManager_CompleteCall_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IAsyncManager_GetCallContext_Proxy(IAsyncManager *This,REFIID riid,void **pInterface);")
cpp_quote("  void __RPC_STUB IAsyncManager_GetCallContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IAsyncManager_GetState_Proxy(IAsyncManager *This,ULONG *pulStateFlags);")
cpp_quote("  void __RPC_STUB IAsyncManager_GetState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICallFactory_INTERFACE_DEFINED__")
cpp_quote("#define __ICallFactory_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_ICallFactory;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ICallFactory : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI CreateCall(REFIID riid,IUnknown *pCtrlUnk,REFIID riid2,IUnknown **ppv) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ICallFactoryVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ICallFactory *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ICallFactory *This);")
cpp_quote("      ULONG (WINAPI *Release)(ICallFactory *This);")
cpp_quote("      HRESULT (WINAPI *CreateCall)(ICallFactory *This,REFIID riid,IUnknown *pCtrlUnk,REFIID riid2,IUnknown **ppv);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ICallFactoryVtbl;")
cpp_quote("  struct ICallFactory {")
cpp_quote("    CONST_VTBL struct ICallFactoryVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ICallFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ICallFactory_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ICallFactory_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ICallFactory_CreateCall(This,riid,pCtrlUnk,riid2,ppv) (This)->lpVtbl->CreateCall(This,riid,pCtrlUnk,riid2,ppv)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ICallFactory_CreateCall_Proxy(ICallFactory *This,REFIID riid,IUnknown *pCtrlUnk,REFIID riid2,IUnknown **ppv);")
cpp_quote("  void __RPC_STUB ICallFactory_CreateCall_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRpcHelper_INTERFACE_DEFINED__")
cpp_quote("#define __IRpcHelper_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IRpcHelper;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IRpcHelper : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetDCOMProtocolVersion(DWORD *pComVersion) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetIIDFromOBJREF(void *pObjRef,IID **piid) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IRpcHelperVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IRpcHelper *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IRpcHelper *This);")
cpp_quote("      ULONG (WINAPI *Release)(IRpcHelper *This);")
cpp_quote("      HRESULT (WINAPI *GetDCOMProtocolVersion)(IRpcHelper *This,DWORD *pComVersion);")
cpp_quote("      HRESULT (WINAPI *GetIIDFromOBJREF)(IRpcHelper *This,void *pObjRef,IID **piid);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IRpcHelperVtbl;")
cpp_quote("  struct IRpcHelper {")
cpp_quote("    CONST_VTBL struct IRpcHelperVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IRpcHelper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IRpcHelper_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IRpcHelper_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IRpcHelper_GetDCOMProtocolVersion(This,pComVersion) (This)->lpVtbl->GetDCOMProtocolVersion(This,pComVersion)")
cpp_quote("#define IRpcHelper_GetIIDFromOBJREF(This,pObjRef,piid) (This)->lpVtbl->GetIIDFromOBJREF(This,pObjRef,piid)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IRpcHelper_GetDCOMProtocolVersion_Proxy(IRpcHelper *This,DWORD *pComVersion);")
cpp_quote("  void __RPC_STUB IRpcHelper_GetDCOMProtocolVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRpcHelper_GetIIDFromOBJREF_Proxy(IRpcHelper *This,void *pObjRef,IID **piid);")
cpp_quote("  void __RPC_STUB IRpcHelper_GetIIDFromOBJREF_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IReleaseMarshalBuffers_INTERFACE_DEFINED__")
cpp_quote("#define __IReleaseMarshalBuffers_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IReleaseMarshalBuffers;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IReleaseMarshalBuffers : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI ReleaseMarshalBuffer(RPCOLEMESSAGE *pMsg,DWORD dwFlags,IUnknown *pChnl) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IReleaseMarshalBuffersVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IReleaseMarshalBuffers *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IReleaseMarshalBuffers *This);")
cpp_quote("      ULONG (WINAPI *Release)(IReleaseMarshalBuffers *This);")
cpp_quote("      HRESULT (WINAPI *ReleaseMarshalBuffer)(IReleaseMarshalBuffers *This,RPCOLEMESSAGE *pMsg,DWORD dwFlags,IUnknown *pChnl);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IReleaseMarshalBuffersVtbl;")
cpp_quote("  struct IReleaseMarshalBuffers {")
cpp_quote("    CONST_VTBL struct IReleaseMarshalBuffersVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IReleaseMarshalBuffers_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IReleaseMarshalBuffers_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IReleaseMarshalBuffers_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IReleaseMarshalBuffers_ReleaseMarshalBuffer(This,pMsg,dwFlags,pChnl) (This)->lpVtbl->ReleaseMarshalBuffer(This,pMsg,dwFlags,pChnl)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IReleaseMarshalBuffers_ReleaseMarshalBuffer_Proxy(IReleaseMarshalBuffers *This,RPCOLEMESSAGE *pMsg,DWORD dwFlags,IUnknown *pChnl);")
cpp_quote("  void __RPC_STUB IReleaseMarshalBuffers_ReleaseMarshalBuffer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IWaitMultiple_INTERFACE_DEFINED__")
cpp_quote("#define __IWaitMultiple_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IWaitMultiple;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IWaitMultiple : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI WaitMultiple(DWORD timeout,ISynchronize **pSync) = 0;")
cpp_quote("    virtual HRESULT WINAPI AddSynchronize(ISynchronize *pSync) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IWaitMultipleVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IWaitMultiple *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IWaitMultiple *This);")
cpp_quote("      ULONG (WINAPI *Release)(IWaitMultiple *This);")
cpp_quote("      HRESULT (WINAPI *WaitMultiple)(IWaitMultiple *This,DWORD timeout,ISynchronize **pSync);")
cpp_quote("      HRESULT (WINAPI *AddSynchronize)(IWaitMultiple *This,ISynchronize *pSync);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IWaitMultipleVtbl;")
cpp_quote("  struct IWaitMultiple {")
cpp_quote("    CONST_VTBL struct IWaitMultipleVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IWaitMultiple_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IWaitMultiple_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IWaitMultiple_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IWaitMultiple_WaitMultiple(This,timeout,pSync) (This)->lpVtbl->WaitMultiple(This,timeout,pSync)")
cpp_quote("#define IWaitMultiple_AddSynchronize(This,pSync) (This)->lpVtbl->AddSynchronize(This,pSync)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IWaitMultiple_WaitMultiple_Proxy(IWaitMultiple *This,DWORD timeout,ISynchronize **pSync);")
cpp_quote("  void __RPC_STUB IWaitMultiple_WaitMultiple_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IWaitMultiple_AddSynchronize_Proxy(IWaitMultiple *This,ISynchronize *pSync);")
cpp_quote("  void __RPC_STUB IWaitMultiple_AddSynchronize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IUrlMon_INTERFACE_DEFINED__")
cpp_quote("#define __IUrlMon_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IUrlMon;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IUrlMon : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI AsyncGetClassBits(REFCLSID rclsid,LPCWSTR pszTYPE,LPCWSTR pszExt,DWORD dwFileVersionMS,DWORD dwFileVersionLS,LPCWSTR pszCodeBase,IBindCtx *pbc,DWORD dwClassContext,REFIID riid,DWORD flags) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IUrlMonVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IUrlMon *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IUrlMon *This);")
cpp_quote("      ULONG (WINAPI *Release)(IUrlMon *This);")
cpp_quote("      HRESULT (WINAPI *AsyncGetClassBits)(IUrlMon *This,REFCLSID rclsid,LPCWSTR pszTYPE,LPCWSTR pszExt,DWORD dwFileVersionMS,DWORD dwFileVersionLS,LPCWSTR pszCodeBase,IBindCtx *pbc,DWORD dwClassContext,REFIID riid,DWORD flags);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IUrlMonVtbl;")
cpp_quote("  struct IUrlMon {")
cpp_quote("    CONST_VTBL struct IUrlMonVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IUrlMon_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IUrlMon_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IUrlMon_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IUrlMon_AsyncGetClassBits(This,rclsid,pszTYPE,pszExt,dwFileVersionMS,dwFileVersionLS,pszCodeBase,pbc,dwClassContext,riid,flags) (This)->lpVtbl->AsyncGetClassBits(This,rclsid,pszTYPE,pszExt,dwFileVersionMS,dwFileVersionLS,pszCodeBase,pbc,dwClassContext,riid,flags)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IUrlMon_AsyncGetClassBits_Proxy(IUrlMon *This,REFCLSID rclsid,LPCWSTR pszTYPE,LPCWSTR pszExt,DWORD dwFileVersionMS,DWORD dwFileVersionLS,LPCWSTR pszCodeBase,IBindCtx *pbc,DWORD dwClassContext,REFIID riid,DWORD flags);")
cpp_quote("  void __RPC_STUB IUrlMon_AsyncGetClassBits_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IForegroundTransfer_INTERFACE_DEFINED__")
cpp_quote("#define __IForegroundTransfer_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IForegroundTransfer;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IForegroundTransfer : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI AllowForegroundTransfer(void *lpvReserved) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IForegroundTransferVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IForegroundTransfer *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IForegroundTransfer *This);")
cpp_quote("      ULONG (WINAPI *Release)(IForegroundTransfer *This);")
cpp_quote("      HRESULT (WINAPI *AllowForegroundTransfer)(IForegroundTransfer *This,void *lpvReserved);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IForegroundTransferVtbl;")
cpp_quote("  struct IForegroundTransfer {")
cpp_quote("    CONST_VTBL struct IForegroundTransferVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IForegroundTransfer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IForegroundTransfer_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IForegroundTransfer_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IForegroundTransfer_AllowForegroundTransfer(This,lpvReserved) (This)->lpVtbl->AllowForegroundTransfer(This,lpvReserved)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IForegroundTransfer_AllowForegroundTransfer_Proxy(IForegroundTransfer *This,void *lpvReserved);")
cpp_quote("  void __RPC_STUB IForegroundTransfer_AllowForegroundTransfer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IAddrTrackingControl_INTERFACE_DEFINED__")
cpp_quote("#define __IAddrTrackingControl_INTERFACE_DEFINED__")
cpp_quote("  typedef IAddrTrackingControl *LPADDRTRACKINGCONTROL;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IAddrTrackingControl;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IAddrTrackingControl : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI EnableCOMDynamicAddrTracking(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI DisableCOMDynamicAddrTracking(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IAddrTrackingControlVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IAddrTrackingControl *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IAddrTrackingControl *This);")
cpp_quote("      ULONG (WINAPI *Release)(IAddrTrackingControl *This);")
cpp_quote("      HRESULT (WINAPI *EnableCOMDynamicAddrTracking)(IAddrTrackingControl *This);")
cpp_quote("      HRESULT (WINAPI *DisableCOMDynamicAddrTracking)(IAddrTrackingControl *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IAddrTrackingControlVtbl;")
cpp_quote("  struct IAddrTrackingControl {")
cpp_quote("    CONST_VTBL struct IAddrTrackingControlVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IAddrTrackingControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IAddrTrackingControl_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IAddrTrackingControl_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IAddrTrackingControl_EnableCOMDynamicAddrTracking(This) (This)->lpVtbl->EnableCOMDynamicAddrTracking(This)")
cpp_quote("#define IAddrTrackingControl_DisableCOMDynamicAddrTracking(This) (This)->lpVtbl->DisableCOMDynamicAddrTracking(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IAddrTrackingControl_EnableCOMDynamicAddrTracking_Proxy(IAddrTrackingControl *This);")
cpp_quote("  void __RPC_STUB IAddrTrackingControl_EnableCOMDynamicAddrTracking_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IAddrTrackingControl_DisableCOMDynamicAddrTracking_Proxy(IAddrTrackingControl *This);")
cpp_quote("  void __RPC_STUB IAddrTrackingControl_DisableCOMDynamicAddrTracking_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IAddrExclusionControl_INTERFACE_DEFINED__")
cpp_quote("#define __IAddrExclusionControl_INTERFACE_DEFINED__")
cpp_quote("  typedef IAddrExclusionControl *LPADDREXCLUSIONCONTROL;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IAddrExclusionControl;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IAddrExclusionControl : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetCurrentAddrExclusionList(REFIID riid,void **ppEnumerator) = 0;")
cpp_quote("    virtual HRESULT WINAPI UpdateAddrExclusionList(IUnknown *pEnumerator) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IAddrExclusionControlVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IAddrExclusionControl *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IAddrExclusionControl *This);")
cpp_quote("      ULONG (WINAPI *Release)(IAddrExclusionControl *This);")
cpp_quote("      HRESULT (WINAPI *GetCurrentAddrExclusionList)(IAddrExclusionControl *This,REFIID riid,void **ppEnumerator);")
cpp_quote("      HRESULT (WINAPI *UpdateAddrExclusionList)(IAddrExclusionControl *This,IUnknown *pEnumerator);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IAddrExclusionControlVtbl;")
cpp_quote("  struct IAddrExclusionControl {")
cpp_quote("    CONST_VTBL struct IAddrExclusionControlVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IAddrExclusionControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IAddrExclusionControl_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IAddrExclusionControl_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IAddrExclusionControl_GetCurrentAddrExclusionList(This,riid,ppEnumerator) (This)->lpVtbl->GetCurrentAddrExclusionList(This,riid,ppEnumerator)")
cpp_quote("#define IAddrExclusionControl_UpdateAddrExclusionList(This,pEnumerator) (This)->lpVtbl->UpdateAddrExclusionList(This,pEnumerator)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IAddrExclusionControl_GetCurrentAddrExclusionList_Proxy(IAddrExclusionControl *This,REFIID riid,void **ppEnumerator);")
cpp_quote("  void __RPC_STUB IAddrExclusionControl_GetCurrentAddrExclusionList_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IAddrExclusionControl_UpdateAddrExclusionList_Proxy(IAddrExclusionControl *This,IUnknown *pEnumerator);")
cpp_quote("  void __RPC_STUB IAddrExclusionControl_UpdateAddrExclusionList_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPipeByte_INTERFACE_DEFINED__")
cpp_quote("#define __IPipeByte_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IPipeByte;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPipeByte : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Pull(BYTE *buf,ULONG cRequest,ULONG *pcReturned) = 0;")
cpp_quote("    virtual HRESULT WINAPI Push(BYTE *buf,ULONG cSent) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPipeByteVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPipeByte *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPipeByte *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPipeByte *This);")
cpp_quote("      HRESULT (WINAPI *Pull)(IPipeByte *This,BYTE *buf,ULONG cRequest,ULONG *pcReturned);")
cpp_quote("      HRESULT (WINAPI *Push)(IPipeByte *This,BYTE *buf,ULONG cSent);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPipeByteVtbl;")
cpp_quote("  struct IPipeByte {")
cpp_quote("    CONST_VTBL struct IPipeByteVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPipeByte_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPipeByte_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPipeByte_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPipeByte_Pull(This,buf,cRequest,pcReturned) (This)->lpVtbl->Pull(This,buf,cRequest,pcReturned)")
cpp_quote("#define IPipeByte_Push(This,buf,cSent) (This)->lpVtbl->Push(This,buf,cSent)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPipeByte_Pull_Proxy(IPipeByte *This,BYTE *buf,ULONG cRequest,ULONG *pcReturned);")
cpp_quote("  void __RPC_STUB IPipeByte_Pull_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPipeByte_Push_Proxy(IPipeByte *This,BYTE *buf,ULONG cSent);")
cpp_quote("  void __RPC_STUB IPipeByte_Push_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __AsyncIPipeByte_INTERFACE_DEFINED__")
cpp_quote("#define __AsyncIPipeByte_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_AsyncIPipeByte;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct AsyncIPipeByte : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Begin_Pull(ULONG cRequest) = 0;")
cpp_quote("    virtual HRESULT WINAPI Finish_Pull(BYTE *buf,ULONG *pcReturned) = 0;")
cpp_quote("    virtual HRESULT WINAPI Begin_Push(BYTE *buf,ULONG cSent) = 0;")
cpp_quote("    virtual HRESULT WINAPI Finish_Push(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct AsyncIPipeByteVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(AsyncIPipeByte *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(AsyncIPipeByte *This);")
cpp_quote("      ULONG (WINAPI *Release)(AsyncIPipeByte *This);")
cpp_quote("      HRESULT (WINAPI *Begin_Pull)(AsyncIPipeByte *This,ULONG cRequest);")
cpp_quote("      HRESULT (WINAPI *Finish_Pull)(AsyncIPipeByte *This,BYTE *buf,ULONG *pcReturned);")
cpp_quote("      HRESULT (WINAPI *Begin_Push)(AsyncIPipeByte *This,BYTE *buf,ULONG cSent);")
cpp_quote("      HRESULT (WINAPI *Finish_Push)(AsyncIPipeByte *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } AsyncIPipeByteVtbl;")
cpp_quote("  struct AsyncIPipeByte {")
cpp_quote("    CONST_VTBL struct AsyncIPipeByteVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define AsyncIPipeByte_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define AsyncIPipeByte_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define AsyncIPipeByte_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define AsyncIPipeByte_Begin_Pull(This,cRequest) (This)->lpVtbl->Begin_Pull(This,cRequest)")
cpp_quote("#define AsyncIPipeByte_Finish_Pull(This,buf,pcReturned) (This)->lpVtbl->Finish_Pull(This,buf,pcReturned)")
cpp_quote("#define AsyncIPipeByte_Begin_Push(This,buf,cSent) (This)->lpVtbl->Begin_Push(This,buf,cSent)")
cpp_quote("#define AsyncIPipeByte_Finish_Push(This) (This)->lpVtbl->Finish_Push(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI AsyncIPipeByte_Begin_Pull_Proxy(AsyncIPipeByte *This,ULONG cRequest);")
cpp_quote("  void __RPC_STUB AsyncIPipeByte_Begin_Pull_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIPipeByte_Finish_Pull_Proxy(AsyncIPipeByte *This,BYTE *buf,ULONG *pcReturned);")
cpp_quote("  void __RPC_STUB AsyncIPipeByte_Finish_Pull_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIPipeByte_Begin_Push_Proxy(AsyncIPipeByte *This,BYTE *buf,ULONG cSent);")
cpp_quote("  void __RPC_STUB AsyncIPipeByte_Begin_Push_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIPipeByte_Finish_Push_Proxy(AsyncIPipeByte *This);")
cpp_quote("  void __RPC_STUB AsyncIPipeByte_Finish_Push_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPipeLong_INTERFACE_DEFINED__")
cpp_quote("#define __IPipeLong_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IPipeLong;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPipeLong : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Pull(LONG *buf,ULONG cRequest,ULONG *pcReturned) = 0;")
cpp_quote("    virtual HRESULT WINAPI Push(LONG *buf,ULONG cSent) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPipeLongVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPipeLong *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPipeLong *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPipeLong *This);")
cpp_quote("      HRESULT (WINAPI *Pull)(IPipeLong *This,LONG *buf,ULONG cRequest,ULONG *pcReturned);")
cpp_quote("      HRESULT (WINAPI *Push)(IPipeLong *This,LONG *buf,ULONG cSent);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPipeLongVtbl;")
cpp_quote("  struct IPipeLong {")
cpp_quote("    CONST_VTBL struct IPipeLongVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPipeLong_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPipeLong_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPipeLong_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPipeLong_Pull(This,buf,cRequest,pcReturned) (This)->lpVtbl->Pull(This,buf,cRequest,pcReturned)")
cpp_quote("#define IPipeLong_Push(This,buf,cSent) (This)->lpVtbl->Push(This,buf,cSent)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPipeLong_Pull_Proxy(IPipeLong *This,LONG *buf,ULONG cRequest,ULONG *pcReturned);")
cpp_quote("  void __RPC_STUB IPipeLong_Pull_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPipeLong_Push_Proxy(IPipeLong *This,LONG *buf,ULONG cSent);")
cpp_quote("  void __RPC_STUB IPipeLong_Push_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __AsyncIPipeLong_INTERFACE_DEFINED__")
cpp_quote("#define __AsyncIPipeLong_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_AsyncIPipeLong;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct AsyncIPipeLong : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Begin_Pull(ULONG cRequest) = 0;")
cpp_quote("    virtual HRESULT WINAPI Finish_Pull(LONG *buf,ULONG *pcReturned) = 0;")
cpp_quote("    virtual HRESULT WINAPI Begin_Push(LONG *buf,ULONG cSent) = 0;")
cpp_quote("    virtual HRESULT WINAPI Finish_Push(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct AsyncIPipeLongVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(AsyncIPipeLong *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(AsyncIPipeLong *This);")
cpp_quote("      ULONG (WINAPI *Release)(AsyncIPipeLong *This);")
cpp_quote("      HRESULT (WINAPI *Begin_Pull)(AsyncIPipeLong *This,ULONG cRequest);")
cpp_quote("      HRESULT (WINAPI *Finish_Pull)(AsyncIPipeLong *This,LONG *buf,ULONG *pcReturned);")
cpp_quote("      HRESULT (WINAPI *Begin_Push)(AsyncIPipeLong *This,LONG *buf,ULONG cSent);")
cpp_quote("      HRESULT (WINAPI *Finish_Push)(AsyncIPipeLong *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } AsyncIPipeLongVtbl;")
cpp_quote("  struct AsyncIPipeLong {")
cpp_quote("    CONST_VTBL struct AsyncIPipeLongVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define AsyncIPipeLong_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define AsyncIPipeLong_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define AsyncIPipeLong_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define AsyncIPipeLong_Begin_Pull(This,cRequest) (This)->lpVtbl->Begin_Pull(This,cRequest)")
cpp_quote("#define AsyncIPipeLong_Finish_Pull(This,buf,pcReturned) (This)->lpVtbl->Finish_Pull(This,buf,pcReturned)")
cpp_quote("#define AsyncIPipeLong_Begin_Push(This,buf,cSent) (This)->lpVtbl->Begin_Push(This,buf,cSent)")
cpp_quote("#define AsyncIPipeLong_Finish_Push(This) (This)->lpVtbl->Finish_Push(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI AsyncIPipeLong_Begin_Pull_Proxy(AsyncIPipeLong *This,ULONG cRequest);")
cpp_quote("  void __RPC_STUB AsyncIPipeLong_Begin_Pull_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIPipeLong_Finish_Pull_Proxy(AsyncIPipeLong *This,LONG *buf,ULONG *pcReturned);")
cpp_quote("  void __RPC_STUB AsyncIPipeLong_Finish_Pull_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIPipeLong_Begin_Push_Proxy(AsyncIPipeLong *This,LONG *buf,ULONG cSent);")
cpp_quote("  void __RPC_STUB AsyncIPipeLong_Begin_Push_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIPipeLong_Finish_Push_Proxy(AsyncIPipeLong *This);")
cpp_quote("  void __RPC_STUB AsyncIPipeLong_Finish_Push_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPipeDouble_INTERFACE_DEFINED__")
cpp_quote("#define __IPipeDouble_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IPipeDouble;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPipeDouble : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Pull(DOUBLE *buf,ULONG cRequest,ULONG *pcReturned) = 0;")
cpp_quote("    virtual HRESULT WINAPI Push(DOUBLE *buf,ULONG cSent) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPipeDoubleVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPipeDouble *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPipeDouble *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPipeDouble *This);")
cpp_quote("      HRESULT (WINAPI *Pull)(IPipeDouble *This,DOUBLE *buf,ULONG cRequest,ULONG *pcReturned);")
cpp_quote("      HRESULT (WINAPI *Push)(IPipeDouble *This,DOUBLE *buf,ULONG cSent);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPipeDoubleVtbl;")
cpp_quote("  struct IPipeDouble {")
cpp_quote("    CONST_VTBL struct IPipeDoubleVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPipeDouble_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPipeDouble_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPipeDouble_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPipeDouble_Pull(This,buf,cRequest,pcReturned) (This)->lpVtbl->Pull(This,buf,cRequest,pcReturned)")
cpp_quote("#define IPipeDouble_Push(This,buf,cSent) (This)->lpVtbl->Push(This,buf,cSent)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPipeDouble_Pull_Proxy(IPipeDouble *This,DOUBLE *buf,ULONG cRequest,ULONG *pcReturned);")
cpp_quote("  void __RPC_STUB IPipeDouble_Pull_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPipeDouble_Push_Proxy(IPipeDouble *This,DOUBLE *buf,ULONG cSent);")
cpp_quote("  void __RPC_STUB IPipeDouble_Push_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __AsyncIPipeDouble_INTERFACE_DEFINED__")
cpp_quote("#define __AsyncIPipeDouble_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_AsyncIPipeDouble;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct AsyncIPipeDouble : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Begin_Pull(ULONG cRequest) = 0;")
cpp_quote("    virtual HRESULT WINAPI Finish_Pull(DOUBLE *buf,ULONG *pcReturned) = 0;")
cpp_quote("    virtual HRESULT WINAPI Begin_Push(DOUBLE *buf,ULONG cSent) = 0;")
cpp_quote("    virtual HRESULT WINAPI Finish_Push(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct AsyncIPipeDoubleVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(AsyncIPipeDouble *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(AsyncIPipeDouble *This);")
cpp_quote("      ULONG (WINAPI *Release)(AsyncIPipeDouble *This);")
cpp_quote("      HRESULT (WINAPI *Begin_Pull)(AsyncIPipeDouble *This,ULONG cRequest);")
cpp_quote("      HRESULT (WINAPI *Finish_Pull)(AsyncIPipeDouble *This,DOUBLE *buf,ULONG *pcReturned);")
cpp_quote("      HRESULT (WINAPI *Begin_Push)(AsyncIPipeDouble *This,DOUBLE *buf,ULONG cSent);")
cpp_quote("      HRESULT (WINAPI *Finish_Push)(AsyncIPipeDouble *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } AsyncIPipeDoubleVtbl;")
cpp_quote("  struct AsyncIPipeDouble {")
cpp_quote("    CONST_VTBL struct AsyncIPipeDoubleVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define AsyncIPipeDouble_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define AsyncIPipeDouble_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define AsyncIPipeDouble_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define AsyncIPipeDouble_Begin_Pull(This,cRequest) (This)->lpVtbl->Begin_Pull(This,cRequest)")
cpp_quote("#define AsyncIPipeDouble_Finish_Pull(This,buf,pcReturned) (This)->lpVtbl->Finish_Pull(This,buf,pcReturned)")
cpp_quote("#define AsyncIPipeDouble_Begin_Push(This,buf,cSent) (This)->lpVtbl->Begin_Push(This,buf,cSent)")
cpp_quote("#define AsyncIPipeDouble_Finish_Push(This) (This)->lpVtbl->Finish_Push(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI AsyncIPipeDouble_Begin_Pull_Proxy(AsyncIPipeDouble *This,ULONG cRequest);")
cpp_quote("  void __RPC_STUB AsyncIPipeDouble_Begin_Pull_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIPipeDouble_Finish_Pull_Proxy(AsyncIPipeDouble *This,DOUBLE *buf,ULONG *pcReturned);")
cpp_quote("  void __RPC_STUB AsyncIPipeDouble_Finish_Pull_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIPipeDouble_Begin_Push_Proxy(AsyncIPipeDouble *This,DOUBLE *buf,ULONG cSent);")
cpp_quote("  void __RPC_STUB AsyncIPipeDouble_Begin_Push_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI AsyncIPipeDouble_Finish_Push_Proxy(AsyncIPipeDouble *This);")
cpp_quote("  void __RPC_STUB AsyncIPipeDouble_Finish_Push_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IThumbnailExtractor_INTERFACE_DEFINED__")
cpp_quote("#define __IThumbnailExtractor_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IThumbnailExtractor;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IThumbnailExtractor : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI ExtractThumbnail(IStorage *pStg,ULONG ulLength,ULONG ulHeight,ULONG *pulOutputLength,ULONG *pulOutputHeight,HBITMAP *phOutputBitmap) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnFileUpdated(IStorage *pStg) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IThumbnailExtractorVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IThumbnailExtractor *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IThumbnailExtractor *This);")
cpp_quote("      ULONG (WINAPI *Release)(IThumbnailExtractor *This);")
cpp_quote("      HRESULT (WINAPI *ExtractThumbnail)(IThumbnailExtractor *This,IStorage *pStg,ULONG ulLength,ULONG ulHeight,ULONG *pulOutputLength,ULONG *pulOutputHeight,HBITMAP *phOutputBitmap);")
cpp_quote("      HRESULT (WINAPI *OnFileUpdated)(IThumbnailExtractor *This,IStorage *pStg);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IThumbnailExtractorVtbl;")
cpp_quote("  struct IThumbnailExtractor {")
cpp_quote("    CONST_VTBL struct IThumbnailExtractorVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IThumbnailExtractor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IThumbnailExtractor_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IThumbnailExtractor_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IThumbnailExtractor_ExtractThumbnail(This,pStg,ulLength,ulHeight,pulOutputLength,pulOutputHeight,phOutputBitmap) (This)->lpVtbl->ExtractThumbnail(This,pStg,ulLength,ulHeight,pulOutputLength,pulOutputHeight,phOutputBitmap)")
cpp_quote("#define IThumbnailExtractor_OnFileUpdated(This,pStg) (This)->lpVtbl->OnFileUpdated(This,pStg)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IThumbnailExtractor_ExtractThumbnail_Proxy(IThumbnailExtractor *This,IStorage *pStg,ULONG ulLength,ULONG ulHeight,ULONG *pulOutputLength,ULONG *pulOutputHeight,HBITMAP *phOutputBitmap);")
cpp_quote("  void __RPC_STUB IThumbnailExtractor_ExtractThumbnail_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IThumbnailExtractor_OnFileUpdated_Proxy(IThumbnailExtractor *This,IStorage *pStg);")
cpp_quote("  void __RPC_STUB IThumbnailExtractor_OnFileUpdated_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IDummyHICONIncluder_INTERFACE_DEFINED__")
cpp_quote("#define __IDummyHICONIncluder_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IDummyHICONIncluder;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IDummyHICONIncluder : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Dummy(HICON h1,HDC h2) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IDummyHICONIncluderVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IDummyHICONIncluder *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IDummyHICONIncluder *This);")
cpp_quote("      ULONG (WINAPI *Release)(IDummyHICONIncluder *This);")
cpp_quote("      HRESULT (WINAPI *Dummy)(IDummyHICONIncluder *This,HICON h1,HDC h2);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IDummyHICONIncluderVtbl;")
cpp_quote("  struct IDummyHICONIncluder {")
cpp_quote("    CONST_VTBL struct IDummyHICONIncluderVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IDummyHICONIncluder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IDummyHICONIncluder_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IDummyHICONIncluder_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IDummyHICONIncluder_Dummy(This,h1,h2) (This)->lpVtbl->Dummy(This,h1,h2)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IDummyHICONIncluder_Dummy_Proxy(IDummyHICONIncluder *This,HICON h1,HDC h2);")
cpp_quote("  void __RPC_STUB IDummyHICONIncluder_Dummy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#if defined USE_COM_CONTEXT_DEF || defined BUILDTYPE_COMSVCS")
cpp_quote("  typedef DWORD CPFLAGS;")
cpp_quote("")
cpp_quote("  typedef struct tagContextProperty {")
cpp_quote("    GUID policyId;")
cpp_quote("    CPFLAGS flags;")
cpp_quote("    IUnknown *pUnk;")
cpp_quote("  } ContextProperty;")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0084_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0084_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("#ifndef __IEnumContextProps_INTERFACE_DEFINED__")
cpp_quote("#define __IEnumContextProps_INTERFACE_DEFINED__")
cpp_quote("  typedef IEnumContextProps *LPENUMCONTEXTPROPS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IEnumContextProps;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IEnumContextProps : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Next(ULONG celt,ContextProperty *pContextProperties,ULONG *pceltFetched) = 0;")
cpp_quote("    virtual HRESULT WINAPI Skip(ULONG celt) = 0;")
cpp_quote("    virtual HRESULT WINAPI Reset(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Clone(IEnumContextProps **ppEnumContextProps) = 0;")
cpp_quote("    virtual HRESULT WINAPI Count(ULONG *pcelt) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IEnumContextPropsVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IEnumContextProps *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IEnumContextProps *This);")
cpp_quote("      ULONG (WINAPI *Release)(IEnumContextProps *This);")
cpp_quote("      HRESULT (WINAPI *Next)(IEnumContextProps *This,ULONG celt,ContextProperty *pContextProperties,ULONG *pceltFetched);")
cpp_quote("      HRESULT (WINAPI *Skip)(IEnumContextProps *This,ULONG celt);")
cpp_quote("      HRESULT (WINAPI *Reset)(IEnumContextProps *This);")
cpp_quote("      HRESULT (WINAPI *Clone)(IEnumContextProps *This,IEnumContextProps **ppEnumContextProps);")
cpp_quote("      HRESULT (WINAPI *Count)(IEnumContextProps *This,ULONG *pcelt);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IEnumContextPropsVtbl;")
cpp_quote("  struct IEnumContextProps {")
cpp_quote("    CONST_VTBL struct IEnumContextPropsVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IEnumContextProps_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IEnumContextProps_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IEnumContextProps_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IEnumContextProps_Next(This,celt,pContextProperties,pceltFetched) (This)->lpVtbl->Next(This,celt,pContextProperties,pceltFetched)")
cpp_quote("#define IEnumContextProps_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)")
cpp_quote("#define IEnumContextProps_Reset(This) (This)->lpVtbl->Reset(This)")
cpp_quote("#define IEnumContextProps_Clone(This,ppEnumContextProps) (This)->lpVtbl->Clone(This,ppEnumContextProps)")
cpp_quote("#define IEnumContextProps_Count(This,pcelt) (This)->lpVtbl->Count(This,pcelt)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IEnumContextProps_Next_Proxy(IEnumContextProps *This,ULONG celt,ContextProperty *pContextProperties,ULONG *pceltFetched);")
cpp_quote("  void __RPC_STUB IEnumContextProps_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumContextProps_Skip_Proxy(IEnumContextProps *This,ULONG celt);")
cpp_quote("  void __RPC_STUB IEnumContextProps_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumContextProps_Reset_Proxy(IEnumContextProps *This);")
cpp_quote("  void __RPC_STUB IEnumContextProps_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumContextProps_Clone_Proxy(IEnumContextProps *This,IEnumContextProps **ppEnumContextProps);")
cpp_quote("  void __RPC_STUB IEnumContextProps_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumContextProps_Count_Proxy(IEnumContextProps *This,ULONG *pcelt);")
cpp_quote("  void __RPC_STUB IEnumContextProps_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IContext_INTERFACE_DEFINED__")
cpp_quote("#define __IContext_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IContext;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IContext : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetProperty(REFGUID rpolicyId,CPFLAGS flags,IUnknown *pUnk) = 0;")
cpp_quote("    virtual HRESULT WINAPI RemoveProperty(REFGUID rPolicyId) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetProperty(REFGUID rGuid,CPFLAGS *pFlags,IUnknown **ppUnk) = 0;")
cpp_quote("    virtual HRESULT WINAPI EnumContextProps(IEnumContextProps **ppEnumContextProps) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IContextVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IContext *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IContext *This);")
cpp_quote("      ULONG (WINAPI *Release)(IContext *This);")
cpp_quote("      HRESULT (WINAPI *SetProperty)(IContext *This,REFGUID rpolicyId,CPFLAGS flags,IUnknown *pUnk);")
cpp_quote("      HRESULT (WINAPI *RemoveProperty)(IContext *This,REFGUID rPolicyId);")
cpp_quote("      HRESULT (WINAPI *GetProperty)(IContext *This,REFGUID rGuid,CPFLAGS *pFlags,IUnknown **ppUnk);")
cpp_quote("      HRESULT (WINAPI *EnumContextProps)(IContext *This,IEnumContextProps **ppEnumContextProps);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IContextVtbl;")
cpp_quote("  struct IContext {")
cpp_quote("    CONST_VTBL struct IContextVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IContext_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IContext_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IContext_SetProperty(This,rpolicyId,flags,pUnk) (This)->lpVtbl->SetProperty(This,rpolicyId,flags,pUnk)")
cpp_quote("#define IContext_RemoveProperty(This,rPolicyId) (This)->lpVtbl->RemoveProperty(This,rPolicyId)")
cpp_quote("#define IContext_GetProperty(This,rGuid,pFlags,ppUnk) (This)->lpVtbl->GetProperty(This,rGuid,pFlags,ppUnk)")
cpp_quote("#define IContext_EnumContextProps(This,ppEnumContextProps) (This)->lpVtbl->EnumContextProps(This,ppEnumContextProps)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IContext_SetProperty_Proxy(IContext *This,REFGUID rpolicyId,CPFLAGS flags,IUnknown *pUnk);")
cpp_quote("  void __RPC_STUB IContext_SetProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IContext_RemoveProperty_Proxy(IContext *This,REFGUID rPolicyId);")
cpp_quote("  void __RPC_STUB IContext_RemoveProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IContext_GetProperty_Proxy(IContext *This,REFGUID rGuid,CPFLAGS *pFlags,IUnknown **ppUnk);")
cpp_quote("  void __RPC_STUB IContext_GetProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IContext_EnumContextProps_Proxy(IContext *This,IEnumContextProps **ppEnumContextProps);")
cpp_quote("  void __RPC_STUB IContext_EnumContextProps_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef BUILDTYPE_COMSVCS")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0086_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0086_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("#ifndef __IObjContext_INTERFACE_DEFINED__")
cpp_quote("#define __IObjContext_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IObjContext;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IObjContext : public IContext {")
cpp_quote("  public:")
cpp_quote("    virtual void WINAPI Reserved1(void) = 0;")
cpp_quote("    virtual void WINAPI Reserved2(void) = 0;")
cpp_quote("    virtual void WINAPI Reserved3(void) = 0;")
cpp_quote("    virtual void WINAPI Reserved4(void) = 0;")
cpp_quote("    virtual void WINAPI Reserved5(void) = 0;")
cpp_quote("    virtual void WINAPI Reserved6(void) = 0;")
cpp_quote("    virtual void WINAPI Reserved7(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IObjContextVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IObjContext *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IObjContext *This);")
cpp_quote("      ULONG (WINAPI *Release)(IObjContext *This);")
cpp_quote("      HRESULT (WINAPI *SetProperty)(IObjContext *This,REFGUID rpolicyId,CPFLAGS flags,IUnknown *pUnk);")
cpp_quote("      HRESULT (WINAPI *RemoveProperty)(IObjContext *This,REFGUID rPolicyId);")
cpp_quote("      HRESULT (WINAPI *GetProperty)(IObjContext *This,REFGUID rGuid,CPFLAGS *pFlags,IUnknown **ppUnk);")
cpp_quote("      HRESULT (WINAPI *EnumContextProps)(IObjContext *This,IEnumContextProps **ppEnumContextProps);")
cpp_quote("      void (WINAPI *Reserved1)(IObjContext *This);")
cpp_quote("      void (WINAPI *Reserved2)(IObjContext *This);")
cpp_quote("      void (WINAPI *Reserved3)(IObjContext *This);")
cpp_quote("      void (WINAPI *Reserved4)(IObjContext *This);")
cpp_quote("      void (WINAPI *Reserved5)(IObjContext *This);")
cpp_quote("      void (WINAPI *Reserved6)(IObjContext *This);")
cpp_quote("      void (WINAPI *Reserved7)(IObjContext *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IObjContextVtbl;")
cpp_quote("  struct IObjContext {")
cpp_quote("    CONST_VTBL struct IObjContextVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IObjContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IObjContext_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IObjContext_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IObjContext_SetProperty(This,rpolicyId,flags,pUnk) (This)->lpVtbl->SetProperty(This,rpolicyId,flags,pUnk)")
cpp_quote("#define IObjContext_RemoveProperty(This,rPolicyId) (This)->lpVtbl->RemoveProperty(This,rPolicyId)")
cpp_quote("#define IObjContext_GetProperty(This,rGuid,pFlags,ppUnk) (This)->lpVtbl->GetProperty(This,rGuid,pFlags,ppUnk)")
cpp_quote("#define IObjContext_EnumContextProps(This,ppEnumContextProps) (This)->lpVtbl->EnumContextProps(This,ppEnumContextProps)")
cpp_quote("#define IObjContext_Reserved1(This) (This)->lpVtbl->Reserved1(This)")
cpp_quote("#define IObjContext_Reserved2(This) (This)->lpVtbl->Reserved2(This)")
cpp_quote("#define IObjContext_Reserved3(This) (This)->lpVtbl->Reserved3(This)")
cpp_quote("#define IObjContext_Reserved4(This) (This)->lpVtbl->Reserved4(This)")
cpp_quote("#define IObjContext_Reserved5(This) (This)->lpVtbl->Reserved5(This)")
cpp_quote("#define IObjContext_Reserved6(This) (This)->lpVtbl->Reserved6(This)")
cpp_quote("#define IObjContext_Reserved7(This) (This)->lpVtbl->Reserved7(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  void WINAPI IObjContext_Reserved1_Proxy(IObjContext *This);")
cpp_quote("  void __RPC_STUB IObjContext_Reserved1_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IObjContext_Reserved2_Proxy(IObjContext *This);")
cpp_quote("  void __RPC_STUB IObjContext_Reserved2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IObjContext_Reserved3_Proxy(IObjContext *This);")
cpp_quote("  void __RPC_STUB IObjContext_Reserved3_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IObjContext_Reserved4_Proxy(IObjContext *This);")
cpp_quote("  void __RPC_STUB IObjContext_Reserved4_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IObjContext_Reserved5_Proxy(IObjContext *This);")
cpp_quote("  void __RPC_STUB IObjContext_Reserved5_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IObjContext_Reserved6_Proxy(IObjContext *This);")
cpp_quote("  void __RPC_STUB IObjContext_Reserved6_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  void WINAPI IObjContext_Reserved7_Proxy(IObjContext *This);")
cpp_quote("  void __RPC_STUB IObjContext_Reserved7_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  typedef enum tagApplicationType {")
cpp_quote("    ServerApplication = 0,LibraryApplication = ServerApplication + 1")
cpp_quote("  } ApplicationType;")
cpp_quote("")
cpp_quote("  typedef enum tagShutdownType {")
cpp_quote("    IdleShutdown = 0,ForcedShutdown = IdleShutdown + 1")
cpp_quote("  } ShutdownType;")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0087_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0087_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("#ifndef __IProcessLock_INTERFACE_DEFINED__")
cpp_quote("#define __IProcessLock_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IProcessLock;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IProcessLock : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual ULONG WINAPI AddRefOnProcess(void) = 0;")
cpp_quote("    virtual ULONG WINAPI ReleaseRefOnProcess(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IProcessLockVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IProcessLock *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IProcessLock *This);")
cpp_quote("      ULONG (WINAPI *Release)(IProcessLock *This);")
cpp_quote("      ULONG (WINAPI *AddRefOnProcess)(IProcessLock *This);")
cpp_quote("      ULONG (WINAPI *ReleaseRefOnProcess)(IProcessLock *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IProcessLockVtbl;")
cpp_quote("  struct IProcessLock {")
cpp_quote("    CONST_VTBL struct IProcessLockVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IProcessLock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IProcessLock_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IProcessLock_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IProcessLock_AddRefOnProcess(This) (This)->lpVtbl->AddRefOnProcess(This)")
cpp_quote("#define IProcessLock_ReleaseRefOnProcess(This) (This)->lpVtbl->ReleaseRefOnProcess(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  ULONG WINAPI IProcessLock_AddRefOnProcess_Proxy(IProcessLock *This);")
cpp_quote("  void __RPC_STUB IProcessLock_AddRefOnProcess_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  ULONG WINAPI IProcessLock_ReleaseRefOnProcess_Proxy(IProcessLock *This);")
cpp_quote("  void __RPC_STUB IProcessLock_ReleaseRefOnProcess_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISurrogateService_INTERFACE_DEFINED__")
cpp_quote("#define __ISurrogateService_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_ISurrogateService;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ISurrogateService : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Init(REFGUID rguidProcessID,IProcessLock *pProcessLock,WINBOOL *pfApplicationAware) = 0;")
cpp_quote("    virtual HRESULT WINAPI ApplicationLaunch(REFGUID rguidApplID,ApplicationType appType) = 0;")
cpp_quote("    virtual HRESULT WINAPI ApplicationFree(REFGUID rguidApplID) = 0;")
cpp_quote("    virtual HRESULT WINAPI CatalogRefresh(ULONG ulReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI ProcessShutdown(ShutdownType shutdownType) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ISurrogateServiceVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ISurrogateService *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ISurrogateService *This);")
cpp_quote("      ULONG (WINAPI *Release)(ISurrogateService *This);")
cpp_quote("      HRESULT (WINAPI *Init)(ISurrogateService *This,REFGUID rguidProcessID,IProcessLock *pProcessLock,WINBOOL *pfApplicationAware);")
cpp_quote("      HRESULT (WINAPI *ApplicationLaunch)(ISurrogateService *This,REFGUID rguidApplID,ApplicationType appType);")
cpp_quote("      HRESULT (WINAPI *ApplicationFree)(ISurrogateService *This,REFGUID rguidApplID);")
cpp_quote("      HRESULT (WINAPI *CatalogRefresh)(ISurrogateService *This,ULONG ulReserved);")
cpp_quote("      HRESULT (WINAPI *ProcessShutdown)(ISurrogateService *This,ShutdownType shutdownType);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ISurrogateServiceVtbl;")
cpp_quote("  struct ISurrogateService {")
cpp_quote("    CONST_VTBL struct ISurrogateServiceVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ISurrogateService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ISurrogateService_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ISurrogateService_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ISurrogateService_Init(This,rguidProcessID,pProcessLock,pfApplicationAware) (This)->lpVtbl->Init(This,rguidProcessID,pProcessLock,pfApplicationAware)")
cpp_quote("#define ISurrogateService_ApplicationLaunch(This,rguidApplID,appType) (This)->lpVtbl->ApplicationLaunch(This,rguidApplID,appType)")
cpp_quote("#define ISurrogateService_ApplicationFree(This,rguidApplID) (This)->lpVtbl->ApplicationFree(This,rguidApplID)")
cpp_quote("#define ISurrogateService_CatalogRefresh(This,ulReserved) (This)->lpVtbl->CatalogRefresh(This,ulReserved)")
cpp_quote("#define ISurrogateService_ProcessShutdown(This,shutdownType) (This)->lpVtbl->ProcessShutdown(This,shutdownType)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ISurrogateService_Init_Proxy(ISurrogateService *This,REFGUID rguidProcessID,IProcessLock *pProcessLock,WINBOOL *pfApplicationAware);")
cpp_quote("  void __RPC_STUB ISurrogateService_Init_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ISurrogateService_ApplicationLaunch_Proxy(ISurrogateService *This,REFGUID rguidApplID,ApplicationType appType);")
cpp_quote("  void __RPC_STUB ISurrogateService_ApplicationLaunch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ISurrogateService_ApplicationFree_Proxy(ISurrogateService *This,REFGUID rguidApplID);")
cpp_quote("  void __RPC_STUB ISurrogateService_ApplicationFree_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ISurrogateService_CatalogRefresh_Proxy(ISurrogateService *This,ULONG ulReserved);")
cpp_quote("  void __RPC_STUB ISurrogateService_CatalogRefresh_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ISurrogateService_ProcessShutdown_Proxy(ISurrogateService *This,ShutdownType shutdownType);")
cpp_quote("  void __RPC_STUB ISurrogateService_ProcessShutdown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  typedef enum _APTTYPE {")
cpp_quote("    APTTYPE_CURRENT = -1,APTTYPE_STA = 0,APTTYPE_MTA = 1,APTTYPE_NA = 2,APTTYPE_MAINSTA = 3")
cpp_quote("  } APTTYPE;")
cpp_quote("")
cpp_quote("  typedef enum _THDTYPE {")
cpp_quote("    THDTYPE_BLOCKMESSAGES = 0,THDTYPE_PROCESSMESSAGES = 1")
cpp_quote("  } THDTYPE;")
cpp_quote("")
cpp_quote("  typedef DWORD APARTMENTID;")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0089_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0089_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("#ifndef __IComThreadingInfo_INTERFACE_DEFINED__")
cpp_quote("#define __IComThreadingInfo_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IComThreadingInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IComThreadingInfo : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetCurrentApartmentType(APTTYPE *pAptType) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetCurrentThreadType(THDTYPE *pThreadType) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetCurrentLogicalThreadId(GUID *pguidLogicalThreadId) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetCurrentLogicalThreadId(REFGUID rguid) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IComThreadingInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IComThreadingInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IComThreadingInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(IComThreadingInfo *This);")
cpp_quote("      HRESULT (WINAPI *GetCurrentApartmentType)(IComThreadingInfo *This,APTTYPE *pAptType);")
cpp_quote("      HRESULT (WINAPI *GetCurrentThreadType)(IComThreadingInfo *This,THDTYPE *pThreadType);")
cpp_quote("      HRESULT (WINAPI *GetCurrentLogicalThreadId)(IComThreadingInfo *This,GUID *pguidLogicalThreadId);")
cpp_quote("      HRESULT (WINAPI *SetCurrentLogicalThreadId)(IComThreadingInfo *This,REFGUID rguid);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IComThreadingInfoVtbl;")
cpp_quote("  struct IComThreadingInfo {")
cpp_quote("    CONST_VTBL struct IComThreadingInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IComThreadingInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IComThreadingInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IComThreadingInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IComThreadingInfo_GetCurrentApartmentType(This,pAptType) (This)->lpVtbl->GetCurrentApartmentType(This,pAptType)")
cpp_quote("#define IComThreadingInfo_GetCurrentThreadType(This,pThreadType) (This)->lpVtbl->GetCurrentThreadType(This,pThreadType)")
cpp_quote("#define IComThreadingInfo_GetCurrentLogicalThreadId(This,pguidLogicalThreadId) (This)->lpVtbl->GetCurrentLogicalThreadId(This,pguidLogicalThreadId)")
cpp_quote("#define IComThreadingInfo_SetCurrentLogicalThreadId(This,rguid) (This)->lpVtbl->SetCurrentLogicalThreadId(This,rguid)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IComThreadingInfo_GetCurrentApartmentType_Proxy(IComThreadingInfo *This,APTTYPE *pAptType);")
cpp_quote("  void __RPC_STUB IComThreadingInfo_GetCurrentApartmentType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IComThreadingInfo_GetCurrentThreadType_Proxy(IComThreadingInfo *This,THDTYPE *pThreadType);")
cpp_quote("  void __RPC_STUB IComThreadingInfo_GetCurrentThreadType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IComThreadingInfo_GetCurrentLogicalThreadId_Proxy(IComThreadingInfo *This,GUID *pguidLogicalThreadId);")
cpp_quote("  void __RPC_STUB IComThreadingInfo_GetCurrentLogicalThreadId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IComThreadingInfo_SetCurrentLogicalThreadId_Proxy(IComThreadingInfo *This,REFGUID rguid);")
cpp_quote("  void __RPC_STUB IComThreadingInfo_SetCurrentLogicalThreadId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IProcessInitControl_INTERFACE_DEFINED__")
cpp_quote("#define __IProcessInitControl_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IProcessInitControl;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IProcessInitControl : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI ResetInitializerTimeout(DWORD dwSecondsRemaining) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IProcessInitControlVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IProcessInitControl *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IProcessInitControl *This);")
cpp_quote("      ULONG (WINAPI *Release)(IProcessInitControl *This);")
cpp_quote("      HRESULT (WINAPI *ResetInitializerTimeout)(IProcessInitControl *This,DWORD dwSecondsRemaining);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IProcessInitControlVtbl;")
cpp_quote("  struct IProcessInitControl {")
cpp_quote("    CONST_VTBL struct IProcessInitControlVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IProcessInitControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IProcessInitControl_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IProcessInitControl_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IProcessInitControl_ResetInitializerTimeout(This,dwSecondsRemaining) (This)->lpVtbl->ResetInitializerTimeout(This,dwSecondsRemaining)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IProcessInitControl_ResetInitializerTimeout_Proxy(IProcessInitControl *This,DWORD dwSecondsRemaining);")
cpp_quote("  void __RPC_STUB IProcessInitControl_ResetInitializerTimeout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0091_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0091_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("#ifndef __IInitializeSpy_INTERFACE_DEFINED__")
cpp_quote("#define __IInitializeSpy_INTERFACE_DEFINED__")
cpp_quote("  typedef IInitializeSpy *LPINITIALIZESPY;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IInitializeSpy;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IInitializeSpy : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI PreInitialize(DWORD dwCoInit,DWORD dwCurThreadAptRefs) = 0;")
cpp_quote("    virtual HRESULT WINAPI PostInitialize(HRESULT hrCoInit,DWORD dwCoInit,DWORD dwNewThreadAptRefs) = 0;")
cpp_quote("    virtual HRESULT WINAPI PreUninitialize(DWORD dwCurThreadAptRefs) = 0;")
cpp_quote("    virtual HRESULT WINAPI PostUninitialize(DWORD dwNewThreadAptRefs) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IInitializeSpyVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IInitializeSpy *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IInitializeSpy *This);")
cpp_quote("      ULONG (WINAPI *Release)(IInitializeSpy *This);")
cpp_quote("      HRESULT (WINAPI *PreInitialize)(IInitializeSpy *This,DWORD dwCoInit,DWORD dwCurThreadAptRefs);")
cpp_quote("      HRESULT (WINAPI *PostInitialize)(IInitializeSpy *This,HRESULT hrCoInit,DWORD dwCoInit,DWORD dwNewThreadAptRefs);")
cpp_quote("      HRESULT (WINAPI *PreUninitialize)(IInitializeSpy *This,DWORD dwCurThreadAptRefs);")
cpp_quote("      HRESULT (WINAPI *PostUninitialize)(IInitializeSpy *This,DWORD dwNewThreadAptRefs);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IInitializeSpyVtbl;")
cpp_quote("  struct IInitializeSpy {")
cpp_quote("    CONST_VTBL struct IInitializeSpyVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IInitializeSpy_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IInitializeSpy_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IInitializeSpy_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IInitializeSpy_PreInitialize(This,dwCoInit,dwCurThreadAptRefs) (This)->lpVtbl->PreInitialize(This,dwCoInit,dwCurThreadAptRefs)")
cpp_quote("#define IInitializeSpy_PostInitialize(This,hrCoInit,dwCoInit,dwNewThreadAptRefs) (This)->lpVtbl->PostInitialize(This,hrCoInit,dwCoInit,dwNewThreadAptRefs)")
cpp_quote("#define IInitializeSpy_PreUninitialize(This,dwCurThreadAptRefs) (This)->lpVtbl->PreUninitialize(This,dwCurThreadAptRefs)")
cpp_quote("#define IInitializeSpy_PostUninitialize(This,dwNewThreadAptRefs) (This)->lpVtbl->PostUninitialize(This,dwNewThreadAptRefs)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IInitializeSpy_PreInitialize_Proxy(IInitializeSpy *This,DWORD dwCoInit,DWORD dwCurThreadAptRefs);")
cpp_quote("  void __RPC_STUB IInitializeSpy_PreInitialize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInitializeSpy_PostInitialize_Proxy(IInitializeSpy *This,HRESULT hrCoInit,DWORD dwCoInit,DWORD dwNewThreadAptRefs);")
cpp_quote("  void __RPC_STUB IInitializeSpy_PostInitialize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInitializeSpy_PreUninitialize_Proxy(IInitializeSpy *This,DWORD dwCurThreadAptRefs);")
cpp_quote("  void __RPC_STUB IInitializeSpy_PreUninitialize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IInitializeSpy_PostUninitialize_Proxy(IInitializeSpy *This,DWORD dwNewThreadAptRefs);")
cpp_quote("  void __RPC_STUB IInitializeSpy_PostUninitialize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0092_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_objidl_0092_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("  unsigned long __RPC_API CLIPFORMAT_UserSize(unsigned long *,unsigned long,CLIPFORMAT *);")
cpp_quote("  unsigned char *__RPC_API CLIPFORMAT_UserMarshal(unsigned long *,unsigned char *,CLIPFORMAT *);")
cpp_quote("  unsigned char *__RPC_API CLIPFORMAT_UserUnmarshal(unsigned long *,unsigned char *,CLIPFORMAT *);")
cpp_quote("  void __RPC_API CLIPFORMAT_UserFree(unsigned long *,CLIPFORMAT *);")
cpp_quote("  unsigned long __RPC_API HBITMAP_UserSize(unsigned long *,unsigned long,HBITMAP *);")
cpp_quote("  unsigned char *__RPC_API HBITMAP_UserMarshal(unsigned long *,unsigned char *,HBITMAP *);")
cpp_quote("  unsigned char *__RPC_API HBITMAP_UserUnmarshal(unsigned long *,unsigned char *,HBITMAP *);")
cpp_quote("  void __RPC_API HBITMAP_UserFree(unsigned long *,HBITMAP *);")
cpp_quote("  unsigned long __RPC_API HDC_UserSize(unsigned long *,unsigned long,HDC *);")
cpp_quote("  unsigned char *__RPC_API HDC_UserMarshal(unsigned long *,unsigned char *,HDC *);")
cpp_quote("  unsigned char *__RPC_API HDC_UserUnmarshal(unsigned long *,unsigned char *,HDC *);")
cpp_quote("  void __RPC_API HDC_UserFree(unsigned long *,HDC *);")
cpp_quote("  unsigned long __RPC_API HICON_UserSize(unsigned long *,unsigned long,HICON *);")
cpp_quote("  unsigned char *__RPC_API HICON_UserMarshal(unsigned long *,unsigned char *,HICON *);")
cpp_quote("  unsigned char *__RPC_API HICON_UserUnmarshal(unsigned long *,unsigned char *,HICON *);")
cpp_quote("  void __RPC_API HICON_UserFree(unsigned long *,HICON *);")
cpp_quote("")
cpp_quote("  HRESULT WINAPI IEnumUnknown_Next_Proxy(IEnumUnknown *This,ULONG celt,IUnknown **rgelt,ULONG *pceltFetched);")
cpp_quote("  HRESULT WINAPI IEnumUnknown_Next_Stub(IEnumUnknown *This,ULONG celt,IUnknown **rgelt,ULONG *pceltFetched);")
cpp_quote("  HRESULT WINAPI IBindCtx_SetBindOptions_Proxy(IBindCtx *This,BIND_OPTS *pbindopts);")
cpp_quote("  HRESULT WINAPI IBindCtx_SetBindOptions_Stub(IBindCtx *This,BIND_OPTS2 *pbindopts);")
cpp_quote("  HRESULT WINAPI IBindCtx_GetBindOptions_Proxy(IBindCtx *This,BIND_OPTS *pbindopts);")
cpp_quote("  HRESULT WINAPI IBindCtx_GetBindOptions_Stub(IBindCtx *This,BIND_OPTS2 *pbindopts);")
cpp_quote("  HRESULT WINAPI IEnumMoniker_Next_Proxy(IEnumMoniker *This,ULONG celt,IMoniker **rgelt,ULONG *pceltFetched);")
cpp_quote("  HRESULT WINAPI IEnumMoniker_Next_Stub(IEnumMoniker *This,ULONG celt,IMoniker **rgelt,ULONG *pceltFetched);")
cpp_quote("  WINBOOL WINAPI IRunnableObject_IsRunning_Proxy(IRunnableObject *This);")
cpp_quote("  HRESULT WINAPI IRunnableObject_IsRunning_Stub(IRunnableObject *This);")
cpp_quote("  HRESULT WINAPI IEnumString_Next_Proxy(IEnumString *This,ULONG celt,LPOLESTR *rgelt,ULONG *pceltFetched);")
cpp_quote("  HRESULT WINAPI IEnumString_Next_Stub(IEnumString *This,ULONG celt,LPOLESTR *rgelt,ULONG *pceltFetched);")
cpp_quote("  HRESULT WINAPI ILockBytes_ReadAt_Proxy(ILockBytes *This,ULARGE_INTEGER ulOffset,void *pv,ULONG cb,ULONG *pcbRead);")
cpp_quote("  HRESULT WINAPI ILockBytes_ReadAt_Stub(ILockBytes *This,ULARGE_INTEGER ulOffset,byte *pv,ULONG cb,ULONG *pcbRead);")
cpp_quote("  HRESULT WINAPI ILockBytes_WriteAt_Proxy(ILockBytes *This,ULARGE_INTEGER ulOffset,const void *pv,ULONG cb,ULONG *pcbWritten);")
cpp_quote("  HRESULT WINAPI ILockBytes_WriteAt_Stub(ILockBytes *This,ULARGE_INTEGER ulOffset,const byte *pv,ULONG cb,ULONG *pcbWritten);")
cpp_quote("  void WINAPI IAdviseSink2_OnLinkSrcChange_Proxy(IAdviseSink2 *This,IMoniker *pmk);")
cpp_quote("  HRESULT WINAPI IAdviseSink2_OnLinkSrcChange_Stub(IAdviseSink2 *This,IMoniker *pmk);")
cpp_quote("  HRESULT WINAPI IFillLockBytes_FillAppend_Proxy(IFillLockBytes *This,const void *pv,ULONG cb,ULONG *pcbWritten);")
cpp_quote("  HRESULT WINAPI IFillLockBytes_FillAppend_Stub(IFillLockBytes *This,const byte *pv,ULONG cb,ULONG *pcbWritten);")
cpp_quote("  HRESULT WINAPI IFillLockBytes_FillAt_Proxy(IFillLockBytes *This,ULARGE_INTEGER ulOffset,const void *pv,ULONG cb,ULONG *pcbWritten);")
cpp_quote("  HRESULT WINAPI IFillLockBytes_FillAt_Stub(IFillLockBytes *This,ULARGE_INTEGER ulOffset,const byte *pv,ULONG cb,ULONG *pcbWritten);")
cpp_quote("  void WINAPI AsyncIAdviseSink_Begin_OnDataChange_Proxy(AsyncIAdviseSink *This,FORMATETC *pFormatetc,STGMEDIUM *pStgmed);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Begin_OnDataChange_Stub(AsyncIAdviseSink *This,FORMATETC *pFormatetc,ASYNC_STGMEDIUM *pStgmed);")
cpp_quote("  void WINAPI AsyncIAdviseSink_Finish_OnDataChange_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Finish_OnDataChange_Stub(AsyncIAdviseSink *This);")
cpp_quote("  void WINAPI AsyncIAdviseSink_Begin_OnViewChange_Proxy(AsyncIAdviseSink *This,DWORD dwAspect,LONG lindex);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Begin_OnViewChange_Stub(AsyncIAdviseSink *This,DWORD dwAspect,LONG lindex);")
cpp_quote("  void WINAPI AsyncIAdviseSink_Finish_OnViewChange_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Finish_OnViewChange_Stub(AsyncIAdviseSink *This);")
cpp_quote("  void WINAPI AsyncIAdviseSink_Begin_OnRename_Proxy(AsyncIAdviseSink *This,IMoniker *pmk);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Begin_OnRename_Stub(AsyncIAdviseSink *This,IMoniker *pmk);")
cpp_quote("  void WINAPI AsyncIAdviseSink_Finish_OnRename_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Finish_OnRename_Stub(AsyncIAdviseSink *This);")
cpp_quote("  void WINAPI AsyncIAdviseSink_Begin_OnSave_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Begin_OnSave_Stub(AsyncIAdviseSink *This);")
cpp_quote("  void WINAPI AsyncIAdviseSink_Finish_OnSave_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Finish_OnSave_Stub(AsyncIAdviseSink *This);")
cpp_quote("  void WINAPI AsyncIAdviseSink_Begin_OnClose_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Begin_OnClose_Stub(AsyncIAdviseSink *This);")
cpp_quote("  void WINAPI AsyncIAdviseSink_Finish_OnClose_Proxy(AsyncIAdviseSink *This);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink_Finish_OnClose_Stub(AsyncIAdviseSink *This);")
cpp_quote("  void WINAPI AsyncIAdviseSink2_Begin_OnLinkSrcChange_Proxy(AsyncIAdviseSink2 *This,IMoniker *pmk);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink2_Begin_OnLinkSrcChange_Stub(AsyncIAdviseSink2 *This,IMoniker *pmk);")
cpp_quote("  void WINAPI AsyncIAdviseSink2_Finish_OnLinkSrcChange_Proxy(AsyncIAdviseSink2 *This);")
cpp_quote("  HRESULT WINAPI AsyncIAdviseSink2_Finish_OnLinkSrcChange_Stub(AsyncIAdviseSink2 *This);")
cpp_quote("")
cpp_quote("#if (_WIN32_WINNT >= 0x0601)")
cpp_quote("typedef enum _APTTYPEQUALIFIER {")
cpp_quote("  APTTYPEQUALIFIER_NONE                 = 0,")
cpp_quote("  APTTYPEQUALIFIER_IMPLICIT_MTA         = 1,")
cpp_quote("  APTTYPEQUALIFIER_NA_ON_MTA            = 2,")
cpp_quote("  APTTYPEQUALIFIER_NA_ON_STA            = 3,")
cpp_quote("  APTTYPEQUALIFIER_NA_ON_IMPLICIT_MTA   = 4,")
cpp_quote("  APTTYPEQUALIFIER_NA_ON_MAINSTA        = 5 ")
cpp_quote("} APTTYPEQUALIFIER;")
cpp_quote("#endif /*(_WIN32_WINNT >= 0x0601)*/")
