Attached is objidl.idl. Instructions for applying: - Put objidl.idl into include/ - Generate include/objidl.h from it - Delete following obsoleted files from include/wine: obj_channel.h obj_clientserver.h obj_dataobject.h obj_marshal.h obj_misc.h obj_moniker.h obj_propertystorage.h obj_storage.h - Try to compile, I don't think any files still include one of the above files, but if any does, that should be simple to fix anyway I'll try to get rid of obj_base.h in a separate patch once this is accepted.
/* * Copyright 2002 Ove Kaaven */ import "unknwn.idl"; interface IStream; interface IStream16; interface IEnumString; interface IRunningObjectTable; interface IMoniker; interface IAdviseSink; interface IAsyncManager; /* FIXME: COSERVERINFO should be moved here from wtypes.idl */ /******************** Fundamentals ********************/ [ local, object, uuid(00000003-0000-0000-C000-000000000046) ] interface IMarshal : IUnknown { typedef [unique] IMarshal *LPMARSHAL; HRESULT GetUnmarshalClass( [in] REFIID riid, [in, unique] void *pv, [in] DWORD dwDestContext, [in, unique] void *pvDestContext, [in] DWORD mshlflags, [out] CLSID *pCid); HRESULT GetMarshalSizeMax( [in] REFIID riid, [in, unique] void *pv, [in] DWORD dwDestContext, [in, unique] void *pvDestContext, [in] DWORD mshlflags, [out] DWORD *pSize); HRESULT MarshalInterface( [in, unique] IStream *pStm, [in] REFIID riid, [in, unique] void *pv, [in] DWORD dwDestContext, [in, unique] void *pvDestContext, [in] DWORD mshlflags); HRESULT UnmarshalInterface( [in, unique] IStream *pStm, [in] REFIID riid, [out] void **ppv); HRESULT ReleaseMarshalData( [in, unique] IStream *pStm); HRESULT DisconnectObject( [in] DWORD dwReserved); } [ local, object, uuid(00000018-0000-0000-C000-000000000046) ] interface IStdMarshalInfo : IUnknown { typedef [unique] IStdMarshalInfo *LPSTDMARSHALINFO; HRESULT GetClassForHandler( [in] DWORD dwDestContext, [in, unique] void *pvDestContext, [out] CLSID *pClsid); } [ local, object, uuid(00000019-0000-0000-C000-000000000046) ] interface IExternalConnection : IUnknown { typedef [unique] IExternalConnection *LPEXTERNALCONNECTION; typedef enum tagEXTCONN { EXTCONN_STRONG = 0x0001, EXTCONN_WEAK = 0x0002, EXTCONN_CALLABLE = 0x0004 } EXTCONN; DWORD AddConnection( [in] DWORD extconn, [in] DWORD reserved); DWORD ReleaseConnection( [in] DWORD extconn, [in] DWORD reserved, [in] BOOL fLastReleaseCloses); } [ local, object, uuid(00000020-0000-0000-C000-000000000046) ] interface IMultiQI : IUnknown { typedef [unique] IMultiQI *LPMULTIQI; typedef struct tagMULTI_QI { const IID *pIID; IUnknown *pItf; HRESULT hr; } MULTI_QI; HRESULT QueryMultipleInterfaces( [in] ULONG cMQIs, [in, out] MULTI_QI *pMQIs); } [ local, object, uuid(00000002-0000-0000-C000-000000000046) ] interface IMalloc : IUnknown { typedef [unique] IMalloc *LPMALLOC; LPVOID Alloc( [in] ULONG cb); LPVOID Realloc( [in] LPVOID pv, [in] ULONG cb); void Free( [in] LPVOID pv); ULONG GetSize( [in] LPVOID pv); int DidAlloc(LPVOID pv); void HeapMinimize(); } [ local, object, uuid(0000001d-0000-0000-C000-000000000046) ] interface IMallocSpy : IUnknown { typedef [unique] IMallocSpy *LPMALLOCSPY; ULONG PreAlloc( [in] ULONG cbRequest); LPVOID PostAlloc( [in] LPVOID pActual); LPVOID PreFree( [in] LPVOID pRequest, [in] BOOL fSpyed); void PostFree( [in] BOOL fSpyed); ULONG PreRealloc( [in] LPVOID pRequest, [in] ULONG cbRequest, [out] LPVOID *ppNewRequest, [in] BOOL fSpyed); LPVOID PostRealloc( [in] LPVOID pActual, [in] BOOL fSpyed); LPVOID PreGetSize( [in] LPVOID pRequest, [in] BOOL fSpyed); ULONG PostGetSize( [in] ULONG cbActual, [in] BOOL fSpyed); LPVOID PreDidAlloc( [in] LPVOID pRequest, [in] BOOL fSpyed); int PostDidAlloc( [in] LPVOID pRequest, [in] BOOL fSpyed, [in] int fActual); void PreHeapMinimize(); void PostHeapMinimize(); } [ object, uuid(00000100-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumUnknown : IUnknown { typedef [unique] IEnumUnknown *LPENUMUNKNOWN; [local] HRESULT Next( [in] ULONG celt, [out] IUnknown **rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IUnknown **rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumUnknown **ppenum); } [ object, uuid(00000022-0000-0000-C000-000000000046), version(1.0), pointer_default(unique) ] interface ISurrogate : IUnknown { typedef [unique] ISurrogate *LPSURROGATE; HRESULT LoadDllServer( [in] REFCLSID Clsid); HRESULT FreeSurrogate(); } [ local, object, uuid(00000146-0000-0000-C000-000000000046) ] interface IGlobalInterfaceTable : IUnknown { typedef [unique] IGlobalInterfaceTable *LPGLOBALINTERFACETABLE; HRESULT RegisterInterfaceInGlobal( [in] IUnknown *pUnk, [in] REFIID riid, [out] DWORD *pdwCookie); HRESULT RevokeInterfaceFromGlobal( [in] DWORD dwCookie); HRESULT GetInterfaceFromGlobal( [in] DWORD dwCookie, [in] REFIID riid, [out, iid_is(riid)] void **ppv); } /******************** Monikers ********************/ [ object, uuid(0000000e-0000-0000-C000-000000000046), pointer_default(unique) ] interface IBindCtx : IUnknown { typedef [unique] IBindCtx *LPBINDCTX; typedef [unique] IBindCtx *LPBC; typedef struct tagBIND_OPTS { DWORD cbStruct; DWORD grfFlags; DWORD grfMode; DWORD dwTickCountDeadline; } BIND_OPTS, *LPBIND_OPTS; /* FIXME: C++ crap */ typedef struct tagBIND_OPTS2 { DWORD cbStruct; DWORD grfFlags; DWORD grfMode; DWORD dwTickCountDeadline; DWORD dwTrackFlags; DWORD dwClassContext; LCID locale; COSERVERINFO *pServerInfo; } BIND_OPTS2, *LPBIND_OPTS2; 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, [out, size_is(celt), length_is(*pceltFetched)] IMoniker **rgelt, [out] 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); } [ object, uuid(00000126-0000-0000-C000-000000000046) ] interface IRunnableObject : IUnknown { typedef [unique] IRunnableObject *LPRUNNABLEOBJECT; HRESULT GetRunningClass( [out] LPCLSID lpClsid); HRESULT Run( [in] LPBINDCTX pbc); [local] BOOL IsRunning(); [call_as(IsRunning)] HRESULT RemoteIsRunning(); HRESULT LockRunning( [in] BOOL fLock, [in] BOOL fLastUnlockCloses); HRESULT SetContainedObject( [in] BOOL fContained); } /* GetObject is defined in wingdi.h as WINELIB_NAME_AW(GetObject), * which resolves to a compilation failure if __WINE__ is defined, * but GetObject is used as a valid method name below, so we have * to undefine it if __WINE__ is defined */ cpp_quote("#ifdef __WINE__") cpp_quote("#undef GetObject") 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; 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); } [ object, uuid(f29f6bc0-5021-11ce-aa15-00006901293f), pointer_default(unique) ] interface IROTData : IUnknown { HRESULT GetComparisonData( [out, size_is(cbMax)] byte *pbData, [in] ULONG cbMax, [out] ULONG *pcbData); } [ object, uuid(00000101-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumString : IUnknown { typedef [unique] IEnumString *LPENUMSTRING; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] LPOLESTR *rgelt, [out] 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(00000140-0000-0000-C000-000000000046) ] interface IClassActivator : IUnknown { HRESULT GetClassObject( [in] REFCLSID rclsid, [in] DWORD dwClassContext, [in] LCID locale, [in] REFIID riid, [out, iid_is(riid)] void **ppv); } /******************** Storage ********************/ [ object, uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d), pointer_default(unique) ] interface ISequentialStream : IUnknown { [local] HRESULT Read( [out, size_is(cb), length_is(*pcbRead)] void *pv, [in] ULONG cb, [out] 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( [in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten); [call_as(Write)] HRESULT RemoteWrite( [in, size_is(cb)] const byte *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; /* these are defined in Linux's fcntl.h, * undefine them to avoid conflicts */ cpp_quote("#undef LOCK_MAND") cpp_quote("#undef LOCK_READ") cpp_quote("#undef LOCK_WRITE") cpp_quote("#undef LOCK_RW") typedef enum tagLOCKTYPE { LOCK_WRITE = 1, LOCK_EXCLUSIVE = 2, LOCK_ONLYONCE = 4 } LOCKTYPE; [local] HRESULT Seek( [in] LARGE_INTEGER dlibMove, [in] DWORD dwOrigin, [out] 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, [out] ULARGE_INTEGER *pcbRead, [out] 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, pointer_default(unique) ] interface IStream16 : ISequentialStream { typedef [unique] IStream16 *LPSTREAM16; typedef struct tagSTATSTG16 { LPOLESTR16 pwcsName; DWORD type; ULARGE_INTEGER cbSize; FILETIME mtime; FILETIME ctime; FILETIME atime; DWORD grfMode; DWORD grfLocksSupported; CLSID clsid; DWORD grfStateBits; DWORD reserved; } STATSTG16; [local] HRESULT Seek( [in] LARGE_INTEGER dlibMove, [in] DWORD dwOrigin, [out] 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] IStream16 *pstm, [in] ULARGE_INTEGER cb, [out] ULARGE_INTEGER *pcbRead, [out] ULARGE_INTEGER *pcbWritten); [call_as(CopyTo)] HRESULT RemoteCopyTo( [in, unique] IStream16 *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] IStream16 **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); } [ object, pointer_default(unique) ] interface IStorage16 : IUnknown { typedef [unique] IStorage16 *LPSTORAGE16; typedef struct tagRemSNB16 { unsigned long ulCntStr; unsigned long ulCntChar; [size_is(ulCntChar)] OLECHAR16 rgString[]; } RemSNB16; typedef [unique] RemSNB16 *wireSNB16; typedef [wire_marshal(wireSNB16)] OLECHAR16 **SNB16; HRESULT CreateStream( [in] LPCOLESTR16 pwcsName, [in] DWORD grfMode, [in] DWORD reserved1, [in] DWORD reserved2, [out] IStream16 **ppstm); [local] HRESULT OpenStream( [in] LPCOLESTR16 pwcsName, [in, unique] void *reserved1, [in] DWORD grfMode, [in] DWORD reserved2, [out] IStream16 **ppstm); [call_as(OpenStream)] HRESULT RemoteOpenStream( [in] LPCOLESTR16 pwcsName, [in] unsigned long cbReserved1, [in, unique, size_is(cbReserved1)] byte *reserved1, [in] DWORD grfMode, [in] DWORD reserved2, [out] IStream16 **ppstm); HRESULT CreateStorage( [in] LPCOLESTR16 pwcsName, [in] DWORD grfMode, [in] DWORD dwStgFmt, [in] DWORD reserved2, [out] IStorage16 **ppstg); HRESULT OpenStorage( [in, unique] LPCOLESTR16 pwcsName, [in, unique] IStorage16 *pstgPriority, [in] DWORD grfMode, [in, unique] SNB16 snbExclude, [in] DWORD reserved, [out] IStorage16 **ppstg); HRESULT CopyTo( [in] DWORD ciidExclude, [in, unique, size_is(ciidExclude)] const IID *rgiidExclude, [in, unique] SNB16 snbExclude, [in, unique] IStorage16 *pstgDest); HRESULT MoveElementTo( [in] LPCOLESTR16 pwcsName, [in, unique] IStorage16 *pstgDest, [in] LPCOLESTR16 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] LPCOLESTR16 pwcsName); HRESULT RenameElement( [in] LPCOLESTR16 pwcsOldName, [in] LPCOLESTR16 pwcsNewName); HRESULT SetElementTimes( [in, unique] LPCOLESTR16 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); } [ object, uuid(0000010b-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPersistFile : IPersist { typedef [unique] IPersistFile *LPPERSISTFILE; HRESULT IsDirty(); HRESULT Load( [in] LPCOLESTR pszFileName, [in] DWORD dwMode); HRESULT Save( [in, unique] LPCOLESTR pszFileName, [in] BOOL fRemember); HRESULT SaveCompleted( [in, unique] LPCOLESTR pszFileName); HRESULT GetCurFile( [out] LPOLESTR *ppszFileName); } [ object, uuid(0000010a-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPersistStorage : IPersist { typedef [unique] IPersistStorage *LPPERSISTSTORAGE; HRESULT IsDirty(); HRESULT InitNew( [in, unique] IStorage *pStg); HRESULT Load( [in, unique] IStorage *pStg); HRESULT Save( [in, unique] IStorage *pStgSave, [in] BOOL fSameAsLoad); HRESULT SaveCompleted( [in, unique] IStorage *pStgNew); HRESULT HandsOffStorage(); } [ object, uuid(00000012-0000-0000-C000-000000000046), pointer_default(unique) ] interface IRootStorage : IUnknown { typedef [unique] IRootStorage *LPROOTSTORAGE; HRESULT SwitchToFile( [in] LPOLESTR pszFile); } [ object, uuid(0000000a-0000-0000-C000-000000000046), pointer_default(unique) ] interface ILockBytes : IUnknown { typedef [unique] ILockBytes *LPLOCKBYTES; [local] HRESULT ReadAt( [in] ULARGE_INTEGER ulOffset, [out, size_is(cb), length_is(*pcbRead)] void *pv, [in] ULONG cb, [out] ULONG *pcbRead); [call_as(ReadAt)] HRESULT RemoteReadAt( [in] ULARGE_INTEGER ulOffset, [out, size_is(cb), length_is(*pcbRead)] byte *pv, [in] ULONG cb, [out] ULONG *pcbRead); [local] HRESULT WriteAt( [in] ULARGE_INTEGER ulOffset, [in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten); [call_as(WriteAt)] HRESULT RemoteWriteAt( [in] ULARGE_INTEGER ulOffset, [in, size_is(cb)] const byte *pv, [in] ULONG cb, [out] ULONG *pcbWritten); HRESULT Flush(); HRESULT SetSize( [in] ULARGE_INTEGER cb); 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); } [ object, uuid(99caf010-415e-11cf-8814-00aa00b569f5), pointer_default(unique) ] interface IFillLockBytes : IUnknown { [local] HRESULT FillAppend( [in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten); [call_as(FillAppend)] HRESULT RemoteFillAppend( [in, size_is(cb)] const byte *pv, [in] ULONG cb, [out] ULONG *pcbWritten); [local] HRESULT FillAt( [in] ULARGE_INTEGER ulOffset, [in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten); [call_as(FillAt)] HRESULT RemoteFillAt( [in] ULARGE_INTEGER ulOffset, [in, size_is(cb)] const byte *pv, [in] ULONG cb, [out] ULONG *pcbWritten); HRESULT SetFillSize( [in] ULARGE_INTEGER ulSize); HRESULT Terminate( [in] BOOL bCanceled); } [ object, uuid(a9d758a0-4617-11cf-95fc-00aa00680db4), pointer_default(unique) ] interface IProgressNotify : IUnknown { HRESULT OnProgress( [in] DWORD dwProgressCurrent, [in] DWORD dwProgressMaximum, [in] BOOL fAccurate, [in] BOOL fOwner); } [ local, object, uuid(0e6d4d90-6738-11cf-9608-00aa00680db4), pointer_default(unique) ] interface ILayoutStorage : IUnknown { typedef struct tagStorageLayout { DWORD LayoutType; OLECHAR *pwcsElementName; LARGE_INTEGER cOffset; LARGE_INTEGER cBytes; } StorageLayout; HRESULT LayoutScript( [in] StorageLayout *pStorageLayout, [in] DWORD nEntries, [in] DWORD glfInterleavedFlag); HRESULT BeginMonitor(); HRESULT EndMonitor(); HRESULT ReLayoutDocfile( [in] OLECHAR *pwcsNewDfName); HRESULT ReLayoutDocfileOnILockBytes( [in] ILockBytes *pILockBytes); } /******************** Data Object ********************/ [ 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, *LPSTATDATA; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATDATA *rgelt, [out] 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); } [ object, uuid(0000010f-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: C/C++ nameless union version */ 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] ; }; [unique] IUnknown *pUnkForRelease; } uSTGMEDIUM; /* copied from wingdi.h */ #define OBJ_PEN 1 #define OBJ_BRUSH 2 #define OBJ_DC 3 #define OBJ_METADC 4 #define OBJ_PAL 5 #define OBJ_FONT 6 #define OBJ_BITMAP 7 #define OBJ_REGION 8 #define OBJ_METAFILE 9 #define OBJ_MEMDC 10 #define OBJ_EXTPEN 11 #define OBJ_ENHMETADC 12 #define OBJ_ENHMETAFILE 13 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; }; 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); [call_as(OnDataChange), async] HRESULT RemoteOnDataChange( [in] IAsyncManager **ppIAM, [in, unique] FORMATETC *pFormatetc, [in, unique] ASYNC_STGMEDIUM *pStgmed); [local] void OnViewChange( [in] DWORD dwAspect, [in] LONG lindex); [call_as(OnViewChange), async] HRESULT RemoteOnViewChange( [in] IAsyncManager **ppIAM, [in] DWORD dwAspect, [in] LONG lindex); [local] void OnRename( [in] IMoniker *pmk); [call_as(OnRename), async] HRESULT RemoteOnRename( [in] IAsyncManager **ppIAM, [in] IMoniker *pmk); [local] void OnSave(); [call_as(OnSave), async] HRESULT RemoteOnSave( [in] IAsyncManager **ppIAM); [local] void OnClose(); [call_as(OnClose)] HRESULT RemoteOnClose(); } [ object, uuid(00000125-0000-0000-C000-000000000046), pointer_default(unique) ] interface IAdviseSink2 : IAdviseSink { typedef [unique] IAdviseSink2 *LPADVISESINK2; [local] void OnLinkSrcChange( [in, unique] IMoniker *pmk); [call_as(OnLinkSrcChange), async] HRESULT RemoteOnLinkSrcChange( [in] IAsyncManager **ppIAM, [in, unique] IMoniker *pmk); } [ 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); } [ local, object, uuid(00000110-0000-0000-C000-000000000046) ] interface IDataAdviseHolder : IUnknown { typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER; HRESULT Advise( [in, unique] IDataObject *pDataObject, [in, unique] FORMATETC *pFetc, [in] DWORD advf, [in, unique] IAdviseSink *pAdvise, [out] DWORD *pdwConnection); HRESULT Unadvise( [in] DWORD dwConnection); HRESULT EnumAdvise( [out] IEnumSTATDATA **ppenumAdvise); HRESULT SendOnDataChange( [in, unique] IDataObject *pDataObject, [in] DWORD dwReserved, [in] DWORD advf); } /******************** Remoting ********************/ [ local, object, uuid(00000016-0000-0000-C000-000000000046) ] interface IMessageFilter : IUnknown { typedef [unique] IMessageFilter *LPMESSAGEFILTER; typedef enum tagCALLTYPE { CALLTYPE_TOPLEVEL = 1, CALLTYPE_NESTED = 2, CALLTYPE_ASYNC = 3, CALLTYPE_TOPLEVEL_CALLPENDING = 4, CALLTYPE_ASYNC_CALLPENDING = 5 } CALLTYPE; typedef enum tagSERVERCALL { SERVERCALL_ISHANDLED = 0, SERVERCALL_REJECTED = 1, SERVERCALL_RETRYLATER = 2 } SERVERCALL; typedef enum tagPENDINGTYPE { PENDINGTYPE_TOPLEVEL = 1, PENDINGTYPE_NESTED = 2 } PENDINGTYPE; typedef enum tagPENDINGMSG { PENDINGMSG_CANCELCALL = 0, PENDINGMSG_WAITNOPROCESS = 1, PENDINGMSG_WAITDEFPROCESS = 2 } PENDINGMSG; typedef struct tagINTERFACEINFO { IUnknown *pUnk; IID iid; WORD wMethod; } INTERFACEINFO, *LPINTERFACEINFO; DWORD HandleInComingCall( [in] DWORD dwCallType, [in] HTASK htaskCaller, [in] DWORD dwTickCount, [in] LPINTERFACEINFO lpInterfaceInfo); DWORD RetryRejectedCall( [in] HTASK htaskCallee, [in] DWORD dwTickCount, [in] DWORD dwRejectType); DWORD MessagePending( [in] HTASK htaskCallee, [in] DWORD dwTickCount, [in] DWORD dwPendingType); } [ local, object, uuid(D5F56B60-593B-101A-B569-08002B2DBF7A) ] interface IRpcChannelBuffer : IUnknown { typedef [unique] IRpcChannelBuffer *LPRPCCHANNELBUFFER; typedef unsigned long RPCOLEDATAREP; typedef struct tagRPCOLEMESSAGE { void *reserved1; RPCOLEDATAREP dataRepresentation; void *Buffer; ULONG cbBuffer; ULONG iMethod; void *reserved2[5]; ULONG rpcFlags; } RPCOLEMESSAGE; typedef RPCOLEMESSAGE *PRPCOLEMESSAGE; HRESULT GetBuffer( [in] RPCOLEMESSAGE *pMessage, [in] REFIID riid); HRESULT SendReceive( [in,out] RPCOLEMESSAGE *pMessage, [out] ULONG *pStatus); HRESULT FreeBuffer( [in] RPCOLEMESSAGE *pMessage); HRESULT GetDestCtx( [out] DWORD *pdwDestContext, [out] void **ppvDestContext); HRESULT IsConnected(); } [ local, object, uuid(594f31d0-7f19-11d0-b194-00a0c90dc8bf) ] interface IRpcChannelBuffer2 : IRpcChannelBuffer { typedef [unique] IRpcChannelBuffer2 *LPRPCCHANNELBUFFER2; HRESULT GetProtocolVersion( [in,out] DWORD *pdwVersion); } [ local, object, uuid(25B15600-0115-11d0-BF0D-00AA00B8DFD2) ] interface IRpcChannelBuffer3 : IRpcChannelBuffer2 { typedef [unique] IRpcChannelBuffer3 *LPRPCCHANNELBUFFER3; HRESULT Send( [in,out] RPCOLEMESSAGE *pMsg, [out] ULONG *pulStatus); HRESULT Receive( [in,out] RPCOLEMESSAGE *pMsg, [in] ULONG ulSize, [out] ULONG *pulStatus); HRESULT Cancel( [in] RPCOLEMESSAGE *pMsg); HRESULT GetCallContext( [in] RPCOLEMESSAGE *pMsg, [in] REFIID riid, [out] void **pInterface); HRESULT GetDestCtxEx( [in] RPCOLEMESSAGE *pMsg, [out] DWORD *pdwDestContext, [out] void **ppvDestContext); HRESULT GetState( [in] RPCOLEMESSAGE *pMsg, [out] DWORD *pState); HRESULT RegisterAsync( [in] RPCOLEMESSAGE *pMsg, [in] IAsyncManager *pAsyncMgr); } [ local, object, uuid(D5F56A34-593B-101A-B569-08002B2DBF7A) ] interface IRpcProxyBuffer : IUnknown { typedef [unique] IRpcProxyBuffer *LPRPCPROXYBUFFER; HRESULT Connect( [in, unique] IRpcChannelBuffer *pRpcChannelBuffer); void Disconnect(); } [ local, object, uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A) ] interface IRpcStubBuffer : IUnknown { typedef [unique] IRpcStubBuffer *LPRPCSTUBBUFFER; HRESULT Connect( [in] IUnknown *pUnkServer); void Disconnect(); HRESULT Invoke( [in] RPCOLEMESSAGE *_prpcmsg, [in] IRpcChannelBuffer *_pRpcChannelBuffer); IRpcStubBuffer *IsIIDSupported( [in] REFIID riid); ULONG CountRefs(); HRESULT DebugServerQueryInterface( void **ppv); void DebugServerRelease( void *pv); } [ local, object, uuid(D5F569D0-593B-101A-B569-08002B2DBF7A) ] interface IPSFactoryBuffer : IUnknown { typedef [unique] IPSFactoryBuffer *LPPSFACTORYBUFFER; HRESULT CreateProxy( [in] IUnknown *pUnkOuter, [in] REFIID riid, [out] IRpcProxyBuffer **ppProxy, [out] void **ppv); HRESULT CreateStub( [in] REFIID riid, [in, unique] IUnknown *pUnkServer, [out] IRpcStubBuffer **ppStub); } [ local, object, uuid(1008c4a0-7613-11cf-9af1-0020af6e72f4) ] interface IChannelHook : IUnknown { typedef [unique] IChannelHook *LPCHANNELHOOK; typedef struct SChannelHookCallInfo { IID iid; DWORD cbSize; GUID uCausality; DWORD dwServerPid; DWORD iMethod; void *pObject; } SChannelHookCallInfo; void ClientGetSize( [in] REFGUID uExtent, [in] REFIID riid, [out] ULONG *pDataSize); void ClientFillBuffer( [in] REFGUID uExtent, [in] REFIID riid, [in, out] ULONG *pDataSize, [in] void *pDataBuffer); void ClientNotify( [in] REFGUID uExtent, [in] REFIID riid, [in] ULONG cbDataSize, [in] void *pDataBuffer, [in] DWORD lDataRep, [in] HRESULT hrFault); void ServerNotify( [in] REFGUID uExtent, [in] REFIID riid, [in] ULONG cbDataSize, [in] void *pDataBuffer, [in] DWORD lDataRep); void ServerGetSize( [in] REFGUID uExtent, [in] REFIID riid, [in] HRESULT hrFault, [out] ULONG *pDataSize); void ServerFillBuffer( [in] REFGUID uExtent, [in] REFIID riid, [in, out] ULONG *pDataSize, [in] void *pDataBuffer, [in] HRESULT hrFault ); } /******************** Property Storage ********************/ interface IEnumSTATPROPSTG; interface IEnumSTATPROPSETSTG; [ object, uuid(00000138-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPropertyStorage : IUnknown { typedef [unique] IPropertyStorage *LPPROPERTYSTORAGE; extern const FMTID FMTID_SummaryInformation; extern const FMTID FMTID_DocSummaryInformation; extern const FMTID FMTID_UserDefinedProperties; const DWORD PROPSETFLAG_DEFAULT = 0; const DWORD PROPSETFLAG_NONSIMPLE = 1; const DWORD PROPSETFLAG_ANSI = 2; const DWORD PROPSETFLAG_UNBUFFERED = 4; typedef struct tagPROPVARIANT PROPVARIANT; #define TYPEDEF_CA(type, name) \ typedef struct tag##name { \ ULONG cElems; \ [size_is(cElems)] \ type *pElems; \ } name TYPEDEF_CA(unsigned char, CAUB); TYPEDEF_CA(short, CAI); TYPEDEF_CA(USHORT, CAUI); TYPEDEF_CA(long, CAL); TYPEDEF_CA(ULONG, CAUL); TYPEDEF_CA(float, CAFLT); TYPEDEF_CA(double, CADBL); TYPEDEF_CA(CY, CACY); TYPEDEF_CA(DATE, CADATE); TYPEDEF_CA(BSTR, CABSTR); TYPEDEF_CA(BSTRBLOB, CABSTRBLOB); TYPEDEF_CA(VARIANT_BOOL, CABOOL); TYPEDEF_CA(SCODE, CASCODE); TYPEDEF_CA(PROPVARIANT, CAPROPVARIANT); TYPEDEF_CA(LARGE_INTEGER, CAH); TYPEDEF_CA(ULARGE_INTEGER, CAUH); TYPEDEF_CA(LPSTR, CALPSTR); TYPEDEF_CA(LPWSTR, CALPWSTR); TYPEDEF_CA(FILETIME, CAFILETIME); TYPEDEF_CA(CLIPDATA, CACLIPDATA); TYPEDEF_CA(CLSID, CACLSID); struct tagPROPVARIANT { VARTYPE vt; WORD wReserved1; WORD wReserved2; WORD wReserved3; [switch_is(vt & 0x1fff)] union { [case(VT_EMPTY, VT_NULL)] ; [case(VT_UI1)] UCHAR bVal; [case(VT_I2)] short iVal; [case(VT_UI2)] USHORT uiVal; [case(VT_BOOL)] VARIANT_BOOL boolVal; #if 0 /* illegal in C++ */ [case(VT_ILLEGAL)] _VARIANT_BOOL bool; #endif [case(VT_I4)] long lVal; [case(VT_UI4)] ULONG ulVal; [case(VT_R4)] float fltVal; [case(VT_ERROR)] SCODE scode; [case(VT_I8)] LARGE_INTEGER hVal; [case(VT_UI8)] ULARGE_INTEGER uhVal; [case(VT_R8)] double dblVal; [case(VT_CY)] CY cyVal; [case(VT_DATE)] DATE date; [case(VT_FILETIME)] FILETIME filetime; [case(VT_CLSID)] CLSID *puuid; [case(VT_BLOB, VT_BLOB_OBJECT)] BLOB blob; [case(VT_CF)] CLIPDATA *pclipdata; [case(VT_STREAM, VT_STREAMED_OBJECT)] IStream *pStream; [case(VT_STORAGE, VT_STORED_OBJECT)] IStorage *pStorage; [case(VT_BSTR)] BSTR bstrVal; [case(VT_BSTR_BLOB)] BSTRBLOB bstrblobVal; [case(VT_LPSTR)] LPSTR pszVal; [case(VT_LPWSTR)] LPWSTR pwszVal; [case(VT_UI1|VT_VECTOR)] CAUB caub; [case(VT_I2|VT_VECTOR)] CAI cai; [case(VT_UI2|VT_VECTOR)] CAUI caui; [case(VT_BOOL|VT_VECTOR)] CABOOL cabool; [case(VT_I4|VT_VECTOR)] CAL cal; [case(VT_UI4|VT_VECTOR)] CAUL caul; [case(VT_R4|VT_VECTOR)] CAFLT caflt; [case(VT_ERROR|VT_VECTOR)] CASCODE cascode; [case(VT_I8|VT_VECTOR)] CAH cah; [case(VT_UI8|VT_VECTOR)] CAUH cauh; [case(VT_R8|VT_VECTOR)] CADBL cadbl; [case(VT_CY|VT_VECTOR)] CACY cacy; [case(VT_DATE|VT_VECTOR)] CADATE cadate; [case(VT_FILETIME|VT_VECTOR)] CAFILETIME cafiletime; [case(VT_CLSID|VT_VECTOR)] CACLSID cauuid; [case(VT_CF|VT_VECTOR)] CACLIPDATA caclipdata; [case(VT_BSTR|VT_VECTOR)] CABSTR cabstr; [case(VT_BSTR_BLOB|VT_VECTOR)] CABSTRBLOB cabstrblob; [case(VT_LPSTR|VT_VECTOR)] CALPSTR calpstr; [case(VT_LPWSTR|VT_VECTOR)] CALPWSTR calpwstr; [case(VT_VARIANT|VT_VECTOR)] CAPROPVARIANT capropvar; }; }; typedef struct tagPROPVARIANT *LPPROPVARIANT; /* FIXME: bunches of property IDs */ const ULONG PRSPEC_INVALID = 0xffffffff; const ULONG PRSPEC_LPWSTR = 0; const ULONG PRSPEC_PROPID = 1; typedef struct tagPROPSPEC { ULONG ulKind; [switch_is(ulKind)] union { [case(PRSPEC_PROPID)] PROPID propid; [case(PRSPEC_LPWSTR)] LPOLESTR lpwstr; [default] ; }; } PROPSPEC; typedef struct tagSTATPROPSTG { LPOLESTR lpwstrName; PROPID propid; VARTYPE vt; } STATPROPSTG; /* FIXME: macros */ typedef struct tagSTATPROPSETSTG { FMTID fmtid; CLSID clsid; DWORD grfFlags; FILETIME mtime; FILETIME ctime; FILETIME atime; DWORD dwOSVersion; } STATPROPSETSTG; HRESULT ReadMultiple( [in] ULONG cpspec, [in, size_is(cpspec)] const PROPSPEC rgpspec[], [out, size_is(cpspec)] PROPVARIANT rgpropvar[]); HRESULT WriteMultiple( [in] ULONG cpspec, [in, size_is(cpspec)] const PROPSPEC rgpspec[], [in, size_is(cpspec)] const PROPVARIANT rgpropvar[], [in] PROPID propidNameFirst); HRESULT DeleteMultiple( [in] ULONG cpspec, [in, size_is(cpspec)] const PROPSPEC rgpspec[]); HRESULT ReadPropertyNames( [in] ULONG cpropid, [in, size_is(cpropid)] const PROPID rgpropid[], [out, size_is(cpropid)] LPOLESTR rglpwstrName[]); HRESULT WritePropertyNames( [in] ULONG cpropid, [in, size_is(cpropid)] const PROPID rgpropid[], [in, size_is(cpropid)] const LPOLESTR rglpwstrName[]); HRESULT DeletePropertyNames( [in] ULONG cpropid, [in, size_is(cpropid)] const PROPID rgpropid[]); HRESULT Commit( [in] DWORD grfCommitFlags); HRESULT Revert(); HRESULT Enum( [out] IEnumSTATPROPSTG **ppenum); HRESULT SetTimes( [in] const FILETIME *pctime, [in] const FILETIME *patime, [in] const FILETIME *pmtime); HRESULT SetClass( [in] REFCLSID clsid); HRESULT Stat( [out] STATPROPSETSTG *statpsstg); } [ object, uuid(0000013A-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPropertySetStorage : IUnknown { typedef [unique] IPropertySetStorage *LPPROPERTYSETSTORAGE; HRESULT Create( [in] REFFMTID rfmtid, [in, unique] const CLSID *pclsid, [in] DWORD grfFlags, [in] DWORD grfMode, [out] IPropertyStorage **ppprstg); HRESULT Open( [in] REFFMTID rfmtid, [in] DWORD grfMode, [out] IPropertyStorage **ppprstg); HRESULT Delete( [in] REFFMTID rfmtid); HRESULT Enum( [out] IEnumSTATPROPSETSTG **ppenum); } [ object, uuid(00000139-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumSTATPROPSTG : IUnknown { typedef [unique] IEnumSTATPROPSTG *LPENUMSTATPROPSTG; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSTG *rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSTG *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumSTATPROPSTG **ppenum); } [ object, uuid(0000013B-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumSTATPROPSETSTG : IUnknown { typedef [unique] IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG; [local] HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSETSTG *rgelt, [out] ULONG *pceltFetched); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSETSTG *rgelt, [out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(); HRESULT Clone( [out] IEnumSTATPROPSETSTG **ppenum); } /******************** Connection Points ********************/ /* FIXME */ /******************** DCOM ********************/ [ local, object, uuid(0000013D-0000-0000-C000-000000000046) ] interface IClientSecurity : IUnknown { typedef struct tagSOLE_AUTHENTICATION_SERVICE { DWORD dwAuthnSvc; DWORD dwAuthzSvc; OLECHAR *pPrincipalName; HRESULT hr; } SOLE_AUTHENTICATION_SERVICE; typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE; typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES { EOAC_NONE = 0x0, EOAC_MUTUAL_AUTH = 0x1, EOAC_CLOAKING = 0x10, EOAC_SECURE_REFS = 0x2, EOAC_ACCESS_CONTROL = 0x4, EOAC_APPID = 0x8 } EOLE_AUTHENTICATION_CAPABILITIES; HRESULT QueryBlanket( [in] IUnknown *pProxy, [out] DWORD *pAuthnSvc, [out] DWORD *pAuthzSvc, [out] OLECHAR **pServerPrincName, [out] DWORD *pAuthnLevel, [out] DWORD *pImpLevel, [out] void **pAuthInfo, [out] DWORD *pCapabilites); HRESULT SetBlanket( [in] IUnknown *pProxy, [in] DWORD AuthnSvc, [in] DWORD AuthzSvc, [in] OLECHAR *pServerPrincName, [in] DWORD AuthnLevel, [in] DWORD ImpLevel, [in] void *pAuthInfo, [in] DWORD Capabilities); HRESULT CopyProxy( [in] IUnknown *pProxy, [out] IUnknown **ppCopy); } [ local, object, uuid(0000013E-0000-0000-C000-000000000046) ] interface IServerSecurity : IUnknown { HRESULT QueryBlanket( [out] DWORD *pAuthnSvc, [out] DWORD *pAuthzSvc, [out] OLECHAR **pServerPrincName, [out] DWORD *pAuthnLevel, [out] DWORD *pImpLevel, [out] void **pPrivs, [out] DWORD *pCapabilities); HRESULT ImpersonateClient(); HRESULT RevertToSelf(); BOOL IsImpersonating(); } [ local, object, uuid(00000024-0000-0000-C000-000000000046) ] interface IAsyncSetup : IUnknown { HRESULT GetAsyncManager( [in] REFIID riid, [in] IUnknown *pOuter, [in] DWORD dwFlags, [out] IUnknown **ppInner, [out] IAsyncManager **ppAsyncMgr); } [ local, object, uuid(0000002A-0000-0000-C000-000000000046) ] interface IAsyncManager : IUnknown { typedef enum tagDCOM_CALL_STATE { DCOM_NONE = 0, DCOM_CALL_COMPLETE = 1, DCOM_CALL_CANCELED = 2 } DCOM_CALL_STATE; HRESULT CompleteCall( [in] HRESULT Result); HRESULT GetCallContext( [in] REFIID riid, [out] void **pInterface); HRESULT GetState( [out] ULONG *pulStateFlags); }