/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-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 __IEnumUnknown_FWD_DEFINED__")
cpp_quote("#define __IEnumUnknown_FWD_DEFINED__")
cpp_quote("typedef struct IEnumUnknown IEnumUnknown;")
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")
cpp_quote("#ifndef __MIDL_user_allocate_free_DEFINED__")
cpp_quote("#define __MIDL_user_allocate_free_DEFINED__")
cpp_quote("  void *__RPC_API MIDL_user_allocate(size_t);")
cpp_quote("  void __RPC_API MIDL_user_free(void *);")
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")
cpp_quote("")
cpp_quote("#ifndef __IEnumUnknown_INTERFACE_DEFINED__")
cpp_quote("#define __IEnumUnknown_INTERFACE_DEFINED__")
cpp_quote("  typedef IEnumUnknown *LPENUMUNKNOWN;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IEnumUnknown;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IEnumUnknown : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Next(ULONG celt,IUnknown **rgelt,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(IEnumUnknown **ppenum) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IEnumUnknownVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IEnumUnknown *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IEnumUnknown *This);")
cpp_quote("      ULONG (WINAPI *Release)(IEnumUnknown *This);")
cpp_quote("      HRESULT (WINAPI *Next)(IEnumUnknown *This,ULONG celt,IUnknown **rgelt,ULONG *pceltFetched);")
cpp_quote("      HRESULT (WINAPI *Skip)(IEnumUnknown *This,ULONG celt);")
cpp_quote("      HRESULT (WINAPI *Reset)(IEnumUnknown *This);")
cpp_quote("      HRESULT (WINAPI *Clone)(IEnumUnknown *This,IEnumUnknown **ppenum);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IEnumUnknownVtbl;")
cpp_quote("  struct IEnumUnknown {")
cpp_quote("    CONST_VTBL struct IEnumUnknownVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IEnumUnknown_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IEnumUnknown_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IEnumUnknown_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IEnumUnknown_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)")
cpp_quote("#define IEnumUnknown_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)")
cpp_quote("#define IEnumUnknown_Reset(This) (This)->lpVtbl->Reset(This)")
cpp_quote("#define IEnumUnknown_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IEnumUnknown_RemoteNext_Proxy(IEnumUnknown *This,ULONG celt,IUnknown **rgelt,ULONG *pceltFetched);")
cpp_quote("  void __RPC_STUB IEnumUnknown_RemoteNext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumUnknown_Skip_Proxy(IEnumUnknown *This,ULONG celt);")
cpp_quote("  void __RPC_STUB IEnumUnknown_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumUnknown_Reset_Proxy(IEnumUnknown *This);")
cpp_quote("  void __RPC_STUB IEnumUnknown_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumUnknown_Clone_Proxy(IEnumUnknown *This,IEnumUnknown **ppenum);")
cpp_quote("  void __RPC_STUB IEnumUnknown_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")

[
    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)*/")
