home *** CD-ROM | disk | FTP | other *** search
/ BUG 4 / BUGCD1997_05.BIN / aplic / visualj / vjtrial.exe / RCDATA / CABINET / Objidl.idl < prev    next >
Text File  |  1996-05-06  |  63KB  |  2,697 lines

  1. //+-------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright (C) Microsoft Corporation, 1992 - 1996.
  5. //
  6. //  File: objidl.idl
  7. //
  8. //--------------------------------------------------------------------------
  9.  
  10. #ifndef DO_NO_IMPORTS
  11. import "unknwn.idl";
  12. #endif
  13.  
  14. interface IStream;
  15. interface IMoniker;
  16. interface IEnumMoniker;
  17. interface IEnumString;
  18. interface IRunningObjectTable;
  19. interface IStorage;
  20. interface IEnumSTATSTG;
  21. interface IAdviseSink;
  22. interface IBindCtx;
  23. interface IEnumMoniker;
  24. interface IConnectionPointContainer;
  25. interface IConnectionPoint;
  26. interface IEnumConnections;
  27. interface IEnumConnectionPoints;
  28.  
  29. /****************************************************************************
  30.  *  Component Object Interfaces
  31.  ****************************************************************************/
  32.  
  33. [
  34.     local,
  35.     object,
  36.     uuid(00000003-0000-0000-C000-000000000046)
  37. ]
  38.  
  39. interface IMarshal : IUnknown
  40. {
  41.  
  42. cpp_quote("//+-------------------------------------------------------------------------")
  43. cpp_quote("//")
  44. cpp_quote("//  Microsoft Windows")
  45. cpp_quote("//  Copyright (C) Microsoft Corporation, 1992 - 1996.")
  46. cpp_quote("//")
  47. cpp_quote("//--------------------------------------------------------------------------")
  48.  
  49.     typedef [unique] IMarshal *LPMARSHAL;
  50.  
  51.     HRESULT GetUnmarshalClass
  52.     (
  53.         [in] REFIID riid,
  54.         [in, unique] void *pv,
  55.         [in] DWORD dwDestContext,
  56.         [in, unique] void *pvDestContext,
  57.         [in] DWORD mshlflags,
  58.         [out] CLSID *pCid
  59.     );
  60.  
  61.     HRESULT GetMarshalSizeMax
  62.     (
  63.         [in] REFIID riid,
  64.         [in, unique] void *pv,
  65.         [in] DWORD dwDestContext,
  66.         [in, unique] void *pvDestContext,
  67.         [in] DWORD mshlflags,
  68.         [out] DWORD *pSize
  69.     );
  70.  
  71.     HRESULT MarshalInterface
  72.     (
  73.         [in, unique] IStream *pStm,
  74.         [in] REFIID riid,
  75.         [in, unique] void *pv,
  76.         [in] DWORD dwDestContext,
  77.         [in, unique] void *pvDestContext,
  78.         [in] DWORD mshlflags
  79.     );
  80.  
  81.     HRESULT UnmarshalInterface
  82.     (
  83.         [in, unique] IStream *pStm,
  84.         [in] REFIID riid,
  85.         [out] void **ppv
  86.     );
  87.  
  88.     HRESULT ReleaseMarshalData
  89.     (
  90.         [in, unique] IStream *pStm
  91.     );
  92.  
  93.     HRESULT DisconnectObject
  94.     (
  95.         [in] DWORD dwReserved
  96.     );
  97. }
  98.  
  99. [
  100.     local,
  101.     object,
  102.     uuid(00000002-0000-0000-C000-000000000046)
  103. ]
  104.  
  105. interface IMalloc : IUnknown
  106. {
  107.  
  108.     typedef [unique] IMalloc *LPMALLOC;
  109.  
  110.     void *Alloc([in] ULONG cb);
  111.  
  112.     void *Realloc ([in] void *pv,
  113.                    [in] ULONG cb);
  114.  
  115.     void Free([in] void *pv);
  116.  
  117.     ULONG GetSize([in] void *pv);
  118.  
  119.     int DidAlloc(void *pv);
  120.  
  121.     void HeapMinimize(void);
  122. }
  123.  
  124. [
  125.     local,
  126.     object,
  127.     uuid(0000001d-0000-0000-C000-000000000046)
  128. ]
  129.  
  130. interface IMallocSpy : IUnknown
  131. {
  132.  
  133.     typedef [unique] IMallocSpy *LPMALLOCSPY;
  134.  
  135.     ULONG PreAlloc
  136.     (
  137.         [in] ULONG cbRequest
  138.     );
  139.  
  140.     void  *PostAlloc
  141.     (
  142.         [in] void *pActual
  143.     );
  144.  
  145.     void  *PreFree
  146.     (
  147.         [in] void *pRequest,
  148.         [in] BOOL  fSpyed
  149.     );
  150.  
  151.     void  PostFree
  152.     (
  153.         [in] BOOL  fSpyed
  154.     );
  155.  
  156.     ULONG PreRealloc
  157.     (
  158.         [in] void   *pRequest,
  159.         [in] ULONG   cbRequest,
  160.         [out] void **ppNewRequest,
  161.         [in] BOOL    fSpyed
  162.     );
  163.  
  164.     void  *PostRealloc
  165.     (
  166.         [in] void *pActual,
  167.         [in] BOOL  fSpyed
  168.     );
  169.  
  170.     void  *PreGetSize
  171.     (
  172.         [in] void *pRequest,
  173.         [in] BOOL  fSpyed
  174.     );
  175.  
  176.     ULONG PostGetSize
  177.     (
  178.         [in] ULONG cbActual,
  179.         [in] BOOL  fSpyed
  180.     );
  181.  
  182.     void  *PreDidAlloc
  183.     (
  184.         [in] void *pRequest,
  185.         [in] BOOL  fSpyed
  186.     );
  187.  
  188.     int   PostDidAlloc
  189.     (
  190.         [in] void *pRequest,
  191.         [in] BOOL  fSpyed,
  192.         [in] int   fActual
  193.     );
  194.  
  195.     void  PreHeapMinimize(void);
  196.  
  197.     void  PostHeapMinimize(void);
  198. }
  199.  
  200. [
  201.     local,
  202.     object,
  203.     uuid(00000018-0000-0000-C000-000000000046)
  204. ]
  205.  
  206. interface IStdMarshalInfo : IUnknown
  207. {
  208.  
  209.     typedef [unique] IStdMarshalInfo * LPSTDMARSHALINFO;
  210.  
  211.     HRESULT GetClassForHandler
  212.     (
  213.         [in] DWORD dwDestContext,
  214.         [in, unique] void *pvDestContext,
  215.         [out] CLSID *pClsid
  216.     );
  217. }
  218.  
  219. [
  220.     object,
  221.     local,
  222.     uuid(00000019-0000-0000-C000-000000000046)
  223. ]
  224.  
  225. interface IExternalConnection : IUnknown
  226. {
  227.  
  228.     typedef [unique] IExternalConnection* LPEXTERNALCONNECTION;
  229.  
  230.  
  231.     // bit flags for IExternalConnection
  232.     typedef enum tagEXTCONN
  233.     {
  234.         EXTCONN_STRONG      = 0x0001,   // strong connection
  235.         EXTCONN_WEAK        = 0x0002,   // weak connection (table, container)
  236.         EXTCONN_CALLABLE    = 0x0004,   // table .vs. callable
  237.     } EXTCONN;
  238.  
  239.     // *** IExternalConnection methods ***
  240.     DWORD AddConnection
  241.     (
  242.         [in] DWORD extconn,
  243.         [in] DWORD reserved
  244.     );
  245.  
  246.     DWORD ReleaseConnection
  247.     (
  248.         [in] DWORD extconn,
  249.         [in] DWORD reserved,
  250.         [in] BOOL  fLastReleaseCloses
  251.     );
  252. }
  253.  
  254.  
  255. [
  256.     object,
  257.     local,
  258.     uuid(00000020-0000-0000-C000-000000000046)
  259. ]
  260.  
  261. interface IMultiQI : IUnknown
  262. {
  263.     typedef [unique] IMultiQI* LPMULTIQI;
  264.  
  265.     typedef struct tagMULTI_QI
  266.     {
  267.         const IID  *pIID; // pass this one in
  268.         IUnknown   *pItf; // get these out (you must set to NULL before calling)
  269.         HRESULT     hr;
  270.     } MULTI_QI;
  271.  
  272.     HRESULT QueryMultipleInterfaces
  273.     (
  274.         [in]     ULONG      cMQIs,
  275.         [in,out] MULTI_QI  *pMQIs
  276.     );
  277. }
  278.  
  279.  
  280. [
  281.     object,
  282.     uuid(00000100-0000-0000-C000-000000000046),
  283.     pointer_default(unique)
  284. ]
  285.  
  286. interface IEnumUnknown : IUnknown
  287. {
  288.  
  289.     typedef [unique] IEnumUnknown *LPENUMUNKNOWN;
  290.  
  291.     [local]
  292.     HRESULT Next(
  293.         [in] ULONG celt,
  294.         [out] IUnknown **rgelt,
  295.         [out] ULONG *pceltFetched);
  296.  
  297.     [call_as(Next)]
  298.     HRESULT RemoteNext(
  299.         [in] ULONG celt,
  300.         [out, size_is(celt), length_is(*pceltFetched)]
  301.         IUnknown **rgelt,
  302.         [out] ULONG *pceltFetched);
  303.  
  304.     HRESULT Skip(
  305.         [in] ULONG celt);
  306.  
  307.     HRESULT Reset();
  308.  
  309.     HRESULT Clone(
  310.         [out] IEnumUnknown **ppenum);
  311. }
  312.  
  313.  
  314. /****************************************************************************
  315.  *  Binding Interfaces
  316.  ****************************************************************************/
  317.  
  318. [
  319.     object,
  320.     uuid(0000000e-0000-0000-C000-000000000046),
  321.     pointer_default(unique)
  322. ]
  323.  
  324. interface IBindCtx : IUnknown
  325. {
  326.  
  327.     typedef [unique] IBindCtx *LPBC;
  328.  
  329.     typedef [unique] IBindCtx *LPBINDCTX;
  330.  
  331.     typedef struct tagBIND_OPTS {
  332.     DWORD       cbStruct;       //  sizeof(BIND_OPTS)
  333.     DWORD       grfFlags;
  334.     DWORD       grfMode;
  335.     DWORD       dwTickCountDeadline;
  336.     } BIND_OPTS, * LPBIND_OPTS;
  337.  
  338. cpp_quote("#if defined(__cplusplus)")
  339. cpp_quote("    typedef struct tagBIND_OPTS2 : tagBIND_OPTS{")
  340. cpp_quote("    DWORD       dwTrackFlags;")
  341. cpp_quote("    DWORD       dwClassContext;")
  342. cpp_quote("    LCID        locale;")
  343. cpp_quote("    } BIND_OPTS2, * LPBIND_OPTS2;")
  344. cpp_quote("#else")
  345.  
  346.     typedef struct tagBIND_OPTS2 {
  347.     DWORD       cbStruct;       //  sizeof(BIND_OPTS2)
  348.     DWORD       grfFlags;
  349.     DWORD       grfMode;
  350.     DWORD       dwTickCountDeadline;
  351.     DWORD       dwTrackFlags;
  352.     DWORD       dwClassContext;
  353.     LCID        locale;
  354.     } BIND_OPTS2, * LPBIND_OPTS2;
  355.  
  356. cpp_quote("#endif")
  357.  
  358.  
  359.     typedef enum tagBIND_FLAGS
  360.     {
  361.         BIND_MAYBOTHERUSER = 1,
  362.         BIND_JUSTTESTEXISTENCE = 2
  363.     } BIND_FLAGS;
  364.  
  365.     HRESULT RegisterObjectBound
  366.     (
  367.         [in, unique] IUnknown *punk
  368.     );
  369.  
  370.     HRESULT RevokeObjectBound
  371.     (
  372.         [in, unique] IUnknown *punk
  373.     );
  374.  
  375.     HRESULT ReleaseBoundObjects
  376.     (
  377.         void
  378.     );
  379.  
  380.     [local]
  381.     HRESULT SetBindOptions
  382.     (
  383.         [in] BIND_OPTS *pbindopts
  384.     );
  385.  
  386.     [call_as(SetBindOptions)]
  387.     HRESULT RemoteSetBindOptions
  388.     (
  389.         [in] BIND_OPTS2 *pbindopts
  390.     );
  391.  
  392.     [local]
  393.     HRESULT GetBindOptions
  394.     (
  395.         [in, out] BIND_OPTS *pbindopts
  396.     );
  397.  
  398.     [call_as(GetBindOptions)]
  399.     HRESULT RemoteGetBindOptions
  400.     (
  401.         [in, out] BIND_OPTS2 *pbindopts
  402.     );
  403.  
  404.     HRESULT GetRunningObjectTable
  405.     (
  406.         [out] IRunningObjectTable **pprot
  407.     );
  408.  
  409.     HRESULT RegisterObjectParam(
  410.         [in] LPOLESTR pszKey,
  411.         [in, unique] IUnknown *punk
  412.     );
  413.  
  414.     HRESULT GetObjectParam(
  415.         [in] LPOLESTR pszKey,
  416.         [out] IUnknown **ppunk
  417.     );
  418.  
  419.     HRESULT EnumObjectParam
  420.     (
  421.         [out] IEnumString **ppenum
  422.     );
  423.  
  424.     HRESULT RevokeObjectParam
  425.     (
  426.         [in] LPOLESTR pszKey
  427.     );
  428. }
  429.  
  430. [
  431.     object,
  432.     uuid(00000102-0000-0000-C000-000000000046),
  433.     pointer_default(unique)
  434. ]
  435.  
  436. interface IEnumMoniker : IUnknown
  437. {
  438.  
  439.     typedef [unique] IEnumMoniker *LPENUMMONIKER;
  440.  
  441.     [local]
  442.     HRESULT Next(
  443.         [in] ULONG celt,
  444.         [out] IMoniker **rgelt,
  445.         [out] ULONG *pceltFetched);
  446.  
  447.     [call_as(Next)]
  448.     HRESULT RemoteNext(
  449.         [in] ULONG celt,
  450.         [out, size_is(celt), length_is(*pceltFetched)]
  451.         IMoniker **rgelt,
  452.         [out] ULONG *pceltFetched);
  453.  
  454.  
  455.     HRESULT Skip(
  456.         [in] ULONG celt);
  457.  
  458.     HRESULT Reset();
  459.  
  460.     HRESULT Clone(
  461.         [out] IEnumMoniker **ppenum);
  462. }
  463.  
  464. [
  465.     object,
  466.     uuid(00000126-0000-0000-C000-000000000046)
  467. ]
  468. interface IRunnableObject : IUnknown
  469. {
  470.  
  471.     typedef [unique] IRunnableObject *LPRUNNABLEOBJECT;
  472.  
  473.     HRESULT GetRunningClass(
  474.         [out] LPCLSID lpClsid);
  475.  
  476.     HRESULT Run(
  477.         [in] LPBINDCTX pbc);
  478.  
  479.     [local]
  480.     BOOL IsRunning();
  481.  
  482.     [call_as(IsRunning)]
  483.     HRESULT RemoteIsRunning();
  484.  
  485.     HRESULT LockRunning(
  486.         [in] BOOL fLock,
  487.         [in] BOOL fLastUnlockCloses);
  488.  
  489.     HRESULT SetContainedObject(
  490.         [in] BOOL fContained);
  491. }
  492.  
  493. [
  494.     object,
  495.     uuid(00000010-0000-0000-C000-000000000046)
  496. ]
  497.  
  498. interface IRunningObjectTable : IUnknown
  499. {
  500.  
  501.     typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE;
  502.  
  503.     HRESULT Register
  504.     (
  505.         [in] DWORD grfFlags,
  506.         [in, unique] IUnknown *punkObject,
  507.         [in, unique] IMoniker *pmkObjectName,
  508.         [out] DWORD *pdwRegister
  509.     );
  510.  
  511.     HRESULT Revoke
  512.     (
  513.         [in] DWORD dwRegister
  514.     );
  515.  
  516.     HRESULT IsRunning
  517.     (
  518.         [in, unique] IMoniker *pmkObjectName
  519.     );
  520.  
  521.     HRESULT GetObject
  522.     (
  523.         [in, unique] IMoniker *pmkObjectName,
  524.         [out] IUnknown **ppunkObject
  525.     );
  526.  
  527.     HRESULT NoteChangeTime
  528.     (
  529.         [in] DWORD dwRegister,
  530.         [in] FILETIME *pfiletime
  531.     );
  532.  
  533.     HRESULT GetTimeOfLastChange
  534.     (
  535.         [in, unique] IMoniker *pmkObjectName,
  536.         [out] FILETIME *pfiletime
  537.     );
  538.  
  539.     HRESULT EnumRunning
  540.     (
  541.         [out] IEnumMoniker **ppenumMoniker
  542.     );
  543.  
  544. }
  545.  
  546. [
  547.     object,
  548.     uuid(0000010c-0000-0000-C000-000000000046)
  549. ]
  550.  
  551. interface IPersist : IUnknown
  552. {
  553.  
  554.     typedef [unique] IPersist *LPPERSIST;
  555.  
  556.     HRESULT GetClassID
  557.     (
  558.         [out] CLSID *pClassID
  559.     );
  560. }
  561.  
  562. [
  563.     object,
  564.     uuid(00000109-0000-0000-C000-000000000046),
  565.     pointer_default(unique)
  566. ]
  567.  
  568. interface IPersistStream : IPersist
  569. {
  570.  
  571.     typedef [unique] IPersistStream *LPPERSISTSTREAM;
  572.  
  573.     HRESULT IsDirty
  574.     (
  575.         void
  576.     );
  577.  
  578.     HRESULT Load
  579.     (
  580.         [in, unique] IStream *pStm
  581.     );
  582.  
  583.     HRESULT Save
  584.     (
  585.         [in, unique] IStream *pStm,
  586.         [in] BOOL fClearDirty
  587.     );
  588.  
  589.     HRESULT GetSizeMax
  590.     (
  591.         [out] ULARGE_INTEGER *pcbSize
  592.     );
  593.  
  594. }
  595.  
  596. [
  597.     object,
  598.     uuid(0000000f-0000-0000-C000-000000000046),
  599.     pointer_default(unique)
  600. ]
  601.  
  602. interface IMoniker : IPersistStream
  603. {
  604.  
  605.     typedef [unique] IMoniker *LPMONIKER;
  606.  
  607.     // system moniker types; returned from IsSystemMoniker.
  608.     typedef enum tagMKSYS
  609.     {
  610.         MKSYS_NONE = 0,
  611.         MKSYS_GENERICCOMPOSITE = 1,
  612.         MKSYS_FILEMONIKER = 2,
  613.         MKSYS_ANTIMONIKER = 3,
  614.         MKSYS_ITEMMONIKER = 4,
  615.         MKSYS_POINTERMONIKER = 5,
  616.     //  MKSYS_URLMONIKER = 6,
  617.         MKSYS_CLASSMONIKER = 7
  618.     }MKSYS;
  619.  
  620.  
  621.     typedef [v1_enum] enum tagMKREDUCE
  622.     {
  623.         MKRREDUCE_ONE           =   3<<16,
  624.  
  625.         MKRREDUCE_TOUSER        =   2<<16,
  626.         MKRREDUCE_THROUGHUSER   =   1<<16,
  627.         MKRREDUCE_ALL           =   0
  628.     } MKRREDUCE;
  629.  
  630.  
  631.     [local]
  632.     HRESULT BindToObject(
  633.         [in, unique] IBindCtx *pbc,
  634.         [in, unique] IMoniker *pmkToLeft,
  635.         [in] REFIID riidResult,
  636.         [out] void **ppvResult);
  637.  
  638.     [call_as(BindToObject)]
  639.     HRESULT RemoteBindToObject(
  640.         [in, unique] IBindCtx *pbc,
  641.         [in, unique] IMoniker *pmkToLeft,
  642.         [in] REFIID riidResult,
  643.         [out, iid_is(riidResult)] IUnknown **ppvResult);
  644.  
  645.     [local]
  646.     HRESULT BindToStorage(
  647.         [in, unique] IBindCtx *pbc,
  648.         [in, unique] IMoniker *pmkToLeft,
  649.         [in] REFIID riid,
  650.         [out] void **ppvObj);
  651.  
  652.     [call_as(BindToStorage)]
  653.     HRESULT RemoteBindToStorage(
  654.         [in, unique] IBindCtx *pbc,
  655.         [in, unique] IMoniker *pmkToLeft,
  656.         [in] REFIID riid,
  657.         [out, iid_is(riid)] IUnknown **ppvObj);
  658.  
  659.     HRESULT Reduce(
  660.         [in, unique] IBindCtx *pbc,
  661.         [in] DWORD dwReduceHowFar,
  662.         [in, out, unique] IMoniker **ppmkToLeft,
  663.         [out] IMoniker **ppmkReduced);
  664.  
  665.     HRESULT ComposeWith(
  666.         [in, unique] IMoniker *pmkRight,
  667.         [in] BOOL fOnlyIfNotGeneric,
  668.         [out] IMoniker **ppmkComposite);
  669.  
  670.     HRESULT Enum(
  671.         [in] BOOL fForward,
  672.         [out] IEnumMoniker **ppenumMoniker);
  673.  
  674.     HRESULT IsEqual(
  675.         [in, unique] IMoniker *pmkOtherMoniker);
  676.  
  677.     HRESULT Hash(
  678.         [out] DWORD *pdwHash);
  679.  
  680.     HRESULT IsRunning(
  681.         [in, unique] IBindCtx *pbc,
  682.         [in, unique] IMoniker *pmkToLeft,
  683.         [in, unique] IMoniker *pmkNewlyRunning);
  684.  
  685.     HRESULT GetTimeOfLastChange(
  686.         [in, unique] IBindCtx *pbc,
  687.         [in, unique] IMoniker *pmkToLeft,
  688.         [out] FILETIME *pFileTime);
  689.  
  690.     HRESULT Inverse(
  691.         [out] IMoniker **ppmk);
  692.  
  693.     HRESULT CommonPrefixWith(
  694.         [in, unique] IMoniker *pmkOther,
  695.         [out] IMoniker **ppmkPrefix);
  696.  
  697.     HRESULT RelativePathTo(
  698.         [in, unique] IMoniker *pmkOther,
  699.         [out] IMoniker **ppmkRelPath);
  700.  
  701.     HRESULT GetDisplayName(
  702.         [in, unique] IBindCtx *pbc,
  703.         [in, unique] IMoniker *pmkToLeft,
  704.         [out] LPOLESTR *ppszDisplayName);
  705.  
  706.     HRESULT ParseDisplayName(
  707.         [in, unique] IBindCtx *pbc,
  708.         [in, unique] IMoniker *pmkToLeft,
  709.         [in] LPOLESTR pszDisplayName,
  710.         [out] ULONG *pchEaten,
  711.         [out] IMoniker **ppmkOut);
  712.  
  713.     HRESULT IsSystemMoniker(
  714.         [out] DWORD *pdwMksys);
  715.  
  716. }
  717.  
  718. [
  719.     object,
  720.     uuid(f29f6bc0-5021-11ce-aa15-00006901293f),
  721.     pointer_default(unique)
  722. ]
  723.  
  724. interface IROTData : IUnknown
  725. {
  726.     HRESULT GetComparisonData(
  727.         [out, size_is(cbMax)] byte *pbData,
  728.         [in]  ULONG cbMax,
  729.         [out] ULONG *pcbData);
  730. }
  731.  
  732. [
  733.     object,
  734.     uuid(00000101-0000-0000-C000-000000000046),
  735.     pointer_default(unique)
  736. ]
  737.  
  738. interface IEnumString : IUnknown
  739. {
  740.  
  741.     typedef [unique] IEnumString *LPENUMSTRING;
  742.  
  743.     [local]
  744.     HRESULT Next(
  745.         [in] ULONG celt,
  746.         [out] LPOLESTR *rgelt,
  747.         [out] ULONG *pceltFetched);
  748.  
  749.     [call_as(Next)]
  750.     HRESULT RemoteNext(
  751.         [in] ULONG celt,
  752.         [out, size_is(celt), length_is(*pceltFetched)]
  753.         LPOLESTR *rgelt,
  754.         [out] ULONG *pceltFetched);
  755.  
  756.  
  757.     HRESULT Skip(
  758.         [in] ULONG celt);
  759.  
  760.     HRESULT Reset();
  761.  
  762.     HRESULT Clone(
  763.         [out] IEnumString **ppenum);
  764. }
  765.  
  766.  
  767. /****************************************************************************
  768.  *  Structured Storage Interfaces
  769.  ****************************************************************************/
  770.  
  771. [
  772.     object,
  773.     uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),
  774.     pointer_default(unique)
  775. ]
  776. interface ISequentialStream : IUnknown
  777. {
  778.     [local]
  779.     HRESULT Read(
  780.         [out] void *pv,
  781.         [in] ULONG cb,
  782.         [out] ULONG *pcbRead);
  783.  
  784.     [call_as(Read)]
  785.     HRESULT RemoteRead(
  786.         [out, size_is(cb), length_is(*pcbRead)]
  787.         byte *pv,
  788.         [in] ULONG cb,
  789.         [out] ULONG *pcbRead);
  790.  
  791.     [local]
  792.     HRESULT Write(
  793.         [in, size_is(cb)] void const *pv,
  794.         [in] ULONG cb,
  795.         [out] ULONG *pcbWritten);
  796.  
  797.     [call_as(Write)]
  798.     HRESULT RemoteWrite(
  799.         [in, size_is(cb)] byte const *pv,
  800.         [in] ULONG cb,
  801.         [out] ULONG *pcbWritten);
  802. }
  803.  
  804.  
  805. [
  806.     object,
  807.     uuid(0000000c-0000-0000-C000-000000000046),
  808.     pointer_default(unique)
  809. ]
  810.  
  811. interface IStream : ISequentialStream
  812. {
  813.  
  814.     typedef [unique] IStream *LPSTREAM;
  815.  
  816.     /* Storage stat buffer */
  817.  
  818.     typedef struct tagSTATSTG
  819.     {
  820.         LPOLESTR pwcsName;
  821.         DWORD type;
  822.         ULARGE_INTEGER cbSize;
  823.         FILETIME mtime;
  824.         FILETIME ctime;
  825.         FILETIME atime;
  826.         DWORD grfMode;
  827.         DWORD grfLocksSupported;
  828.         CLSID clsid;
  829.         DWORD grfStateBits;
  830.     DWORD reserved;
  831.     } STATSTG;
  832.  
  833.  
  834.     /* Storage element types */
  835.     typedef enum tagSTGTY
  836.     {
  837.         STGTY_STORAGE   = 1,
  838.         STGTY_STREAM    = 2,
  839.         STGTY_LOCKBYTES = 3,
  840.         STGTY_PROPERTY  = 4
  841.     } STGTY;
  842.  
  843.     typedef enum tagSTREAM_SEEK
  844.     {
  845.         STREAM_SEEK_SET = 0,
  846.         STREAM_SEEK_CUR = 1,
  847.         STREAM_SEEK_END = 2
  848.     } STREAM_SEEK;
  849.  
  850.     typedef enum tagLOCKTYPE
  851.     {
  852.         LOCK_WRITE      = 1,
  853.         LOCK_EXCLUSIVE  = 2,
  854.         LOCK_ONLYONCE   = 4
  855.     } LOCKTYPE;
  856.  
  857.     [local]
  858.     HRESULT Seek(
  859.         [in] LARGE_INTEGER dlibMove,
  860.         [in] DWORD dwOrigin,
  861.         [out] ULARGE_INTEGER *plibNewPosition);
  862.  
  863.     [call_as(Seek)]
  864.     HRESULT RemoteSeek(
  865.         [in] LARGE_INTEGER dlibMove,
  866.         [in] DWORD dwOrigin,
  867.         [out] ULARGE_INTEGER *plibNewPosition);
  868.  
  869.     HRESULT SetSize(
  870.         [in] ULARGE_INTEGER libNewSize);
  871.  
  872.     [local]
  873.     HRESULT CopyTo(
  874.         [in, unique] IStream *pstm,
  875.         [in] ULARGE_INTEGER cb,
  876.         [out] ULARGE_INTEGER *pcbRead,
  877.         [out] ULARGE_INTEGER *pcbWritten);
  878.  
  879.     [call_as(CopyTo)]
  880.     HRESULT RemoteCopyTo(
  881.         [in, unique] IStream *pstm,
  882.         [in] ULARGE_INTEGER cb,
  883.         [out] ULARGE_INTEGER *pcbRead,
  884.         [out] ULARGE_INTEGER *pcbWritten);
  885.  
  886.     HRESULT Commit(
  887.         [in] DWORD grfCommitFlags);
  888.  
  889.     HRESULT Revert();
  890.  
  891.     HRESULT LockRegion(
  892.         [in] ULARGE_INTEGER libOffset,
  893.         [in] ULARGE_INTEGER cb,
  894.         [in] DWORD dwLockType);
  895.  
  896.     HRESULT UnlockRegion(
  897.         [in] ULARGE_INTEGER libOffset,
  898.         [in] ULARGE_INTEGER cb,
  899.         [in] DWORD dwLockType);
  900.  
  901.     HRESULT Stat(
  902.         [out] STATSTG *pstatstg,
  903.         [in] DWORD grfStatFlag);
  904.  
  905.     HRESULT Clone(
  906.         [out] IStream **ppstm);
  907.  
  908. }
  909.  
  910. [
  911.     object,
  912.     uuid(0000000d-0000-0000-C000-000000000046),
  913.     pointer_default(unique)
  914. ]
  915.  
  916. interface IEnumSTATSTG : IUnknown
  917. {
  918.  
  919.     typedef [unique] IEnumSTATSTG *LPENUMSTATSTG;
  920.  
  921.     [local]
  922.     HRESULT Next(
  923.         [in] ULONG celt,
  924.         [in] STATSTG *rgelt,
  925.         [out] ULONG *pceltFetched);
  926.  
  927.     [call_as(Next)]
  928.     HRESULT RemoteNext(
  929.         [in] ULONG celt,
  930.         [out, size_is(celt), length_is(*pceltFetched)]
  931.         STATSTG *rgelt,
  932.         [out] ULONG *pceltFetched);
  933.  
  934.     HRESULT Skip(
  935.         [in] ULONG celt);
  936.  
  937.     HRESULT Reset();
  938.  
  939.     HRESULT Clone(
  940.         [out] IEnumSTATSTG **ppenum);
  941. }
  942.  
  943. [
  944.     object,
  945.     uuid(0000000b-0000-0000-C000-000000000046),
  946.     pointer_default(unique)
  947. ]
  948.  
  949. interface IStorage : IUnknown
  950. {
  951.  
  952.     typedef [unique] IStorage * LPSTORAGE;
  953.  
  954.     typedef struct tagRemSNB
  955.     {
  956.         unsigned long ulCntStr;
  957.         unsigned long ulCntChar;
  958.         [size_is(ulCntChar)] OLECHAR rgString[];
  959.     } RemSNB;
  960.  
  961.     typedef [unique] RemSNB * wireSNB;
  962.     typedef [wire_marshal(wireSNB)] OLECHAR **SNB;
  963.  
  964.     HRESULT CreateStream(
  965.         [in, string] const OLECHAR *pwcsName,
  966.         [in] DWORD grfMode,
  967.         [in] DWORD reserved1,
  968.         [in] DWORD reserved2,
  969.         [out] IStream **ppstm);
  970.  
  971.     [local]
  972.     HRESULT OpenStream(
  973.         [in, string] const OLECHAR *pwcsName,
  974.         [in, unique] void *reserved1,
  975.         [in] DWORD grfMode,
  976.         [in] DWORD reserved2,
  977.         [out] IStream **ppstm);
  978.  
  979.     [call_as(OpenStream)]
  980.     HRESULT RemoteOpenStream(
  981.         [in, string] const OLECHAR *pwcsName,
  982.         [in] unsigned long cbReserved1,
  983.         [in, unique, size_is(cbReserved1)] byte *reserved1,
  984.         [in] DWORD grfMode,
  985.         [in] DWORD reserved2,
  986.         [out] IStream **ppstm);
  987.  
  988.     HRESULT CreateStorage(
  989.         [in, string] const OLECHAR *pwcsName,
  990.         [in] DWORD grfMode,
  991.         [in] DWORD dwStgFmt,
  992.         [in] DWORD reserved2,
  993.         [out] IStorage **ppstg);
  994.  
  995.     HRESULT OpenStorage(
  996.         [in, unique, string] const OLECHAR *pwcsName,
  997.         [in, unique] IStorage *pstgPriority,
  998.         [in] DWORD grfMode,
  999.         [in, unique] SNB snbExclude,
  1000.         [in] DWORD reserved,
  1001.         [out] IStorage **ppstg);
  1002.  
  1003.     HRESULT CopyTo(
  1004.         [in] DWORD ciidExclude,
  1005.         [in, unique, size_is(ciidExclude)] IID const *rgiidExclude,
  1006.         [in, unique] SNB snbExclude,
  1007.         [in, unique] IStorage *pstgDest);
  1008.  
  1009.     HRESULT MoveElementTo(
  1010.         [in, string] const OLECHAR * pwcsName,
  1011.         [in, unique] IStorage *pstgDest,
  1012.         [in, string] const OLECHAR *pwcsNewName,
  1013.         [in] DWORD grfFlags);
  1014.  
  1015.     HRESULT Commit(
  1016.         [in] DWORD grfCommitFlags);
  1017.  
  1018.     HRESULT Revert();
  1019.  
  1020.     [local]
  1021.     HRESULT EnumElements(
  1022.         [in] DWORD reserved1,
  1023.         [in, unique, size_is(1)] void *reserved2,
  1024.         [in] DWORD reserved3,
  1025.         [out] IEnumSTATSTG **ppenum);
  1026.  
  1027.  
  1028.     [call_as(EnumElements)]
  1029.     HRESULT RemoteEnumElements(
  1030.         [in] DWORD reserved1,
  1031.         [in] unsigned long cbReserved2,
  1032.         [in, unique, size_is(cbReserved2)] byte *reserved2,
  1033.         [in] DWORD reserved3,
  1034.         [out] IEnumSTATSTG **ppenum);
  1035.  
  1036.     HRESULT DestroyElement(
  1037.         [in, string] const OLECHAR *pwcsName);
  1038.  
  1039.     HRESULT RenameElement(
  1040.         [in, string] const OLECHAR *pwcsOldName,
  1041.         [in, string] const OLECHAR *pwcsNewName);
  1042.  
  1043.     HRESULT SetElementTimes(
  1044.         [in, string] const OLECHAR *pwcsName,
  1045.         [in] FILETIME const *pctime,
  1046.         [in] FILETIME const *patime,
  1047.         [in] FILETIME const *pmtime);
  1048.  
  1049.     HRESULT SetClass(
  1050.         [in] REFCLSID clsid);
  1051.  
  1052.     HRESULT SetStateBits(
  1053.         [in] DWORD grfStateBits,
  1054.         [in] DWORD grfMask);
  1055.  
  1056.     HRESULT Stat(
  1057.         [out] STATSTG *pstatstg,
  1058.         [in] DWORD grfStatFlag);
  1059. }
  1060.  
  1061. [
  1062.     object,
  1063.     uuid(0000010b-0000-0000-C000-000000000046),
  1064.     pointer_default(unique)
  1065. ]
  1066.  
  1067. interface IPersistFile : IPersist
  1068. {
  1069.  
  1070.     typedef [unique] IPersistFile *LPPERSISTFILE;
  1071.  
  1072.     HRESULT IsDirty
  1073.     (
  1074.         void
  1075.     );
  1076.  
  1077.     HRESULT Load
  1078.     (
  1079.         [in] LPCOLESTR pszFileName,
  1080.         [in] DWORD dwMode
  1081.     );
  1082.  
  1083.     HRESULT Save
  1084.     (
  1085.         [in, unique] LPCOLESTR pszFileName,
  1086.         [in] BOOL fRemember
  1087.     );
  1088.  
  1089.     HRESULT SaveCompleted
  1090.     (
  1091.         [in, unique] LPCOLESTR pszFileName
  1092.     );
  1093.  
  1094.     HRESULT GetCurFile
  1095.     (
  1096.         [out] LPOLESTR *ppszFileName
  1097.     );
  1098. }
  1099.  
  1100. [
  1101.     object,
  1102.     uuid(0000010a-0000-0000-C000-000000000046),
  1103.     pointer_default(unique)
  1104. ]
  1105.  
  1106. interface IPersistStorage : IPersist
  1107. {
  1108.  
  1109.     typedef [unique] IPersistStorage *LPPERSISTSTORAGE;
  1110.  
  1111.     HRESULT IsDirty
  1112.     (
  1113.         void
  1114.     );
  1115.  
  1116.     HRESULT InitNew
  1117.     (
  1118.         [in, unique] IStorage *pStg
  1119.     );
  1120.  
  1121.     HRESULT Load
  1122.     (
  1123.         [in, unique] IStorage *pStg
  1124.     );
  1125.  
  1126.     HRESULT Save
  1127.     (
  1128.         [in, unique] IStorage *pStgSave,
  1129.         [in] BOOL fSameAsLoad
  1130.     );
  1131.  
  1132.     HRESULT SaveCompleted
  1133.     (
  1134.         [in, unique] IStorage *pStgNew
  1135.     );
  1136.  
  1137.     HRESULT HandsOffStorage
  1138.     (
  1139.         void
  1140.     );
  1141. }
  1142.  
  1143. [
  1144.     object,
  1145.     uuid(0000000a-0000-0000-C000-000000000046),
  1146.     pointer_default(unique)
  1147. ]
  1148.  
  1149. interface ILockBytes : IUnknown
  1150. {
  1151.  
  1152.     typedef [unique] ILockBytes *LPLOCKBYTES;
  1153.  
  1154.     [local]
  1155.     HRESULT ReadAt(
  1156.         [in] ULARGE_INTEGER ulOffset,
  1157.         [in] void *pv,
  1158.         [in] ULONG cb,
  1159.         [out] ULONG *pcbRead);
  1160.  
  1161.     [call_as(ReadAt)]
  1162.     HRESULT _stdcall RemoteReadAt(
  1163.         [in] ULARGE_INTEGER ulOffset,
  1164.         [out, size_is(cb), length_is(*pcbRead)]
  1165.         byte *pv,
  1166.         [in] ULONG cb,
  1167.         [out] ULONG *pcbRead);
  1168.  
  1169.     [local]
  1170.     HRESULT WriteAt(
  1171.         [in] ULARGE_INTEGER ulOffset,
  1172.         [in] void const *pv,
  1173.         [in] ULONG cb,
  1174.         [out] ULONG *pcbWritten);
  1175.  
  1176.     [call_as(WriteAt)]
  1177.     HRESULT RemoteWriteAt(
  1178.         [in] ULARGE_INTEGER ulOffset,
  1179.         [in, size_is(cb)] byte const *pv,
  1180.         [in] ULONG cb,
  1181.         [out] ULONG *pcbWritten);
  1182.  
  1183.     HRESULT Flush();
  1184.  
  1185.     HRESULT SetSize(
  1186.         [in] ULARGE_INTEGER cb);
  1187.  
  1188.     HRESULT LockRegion(
  1189.         [in] ULARGE_INTEGER libOffset,
  1190.         [in] ULARGE_INTEGER cb,
  1191.         [in] DWORD dwLockType);
  1192.  
  1193.     HRESULT UnlockRegion(
  1194.         [in] ULARGE_INTEGER libOffset,
  1195.         [in] ULARGE_INTEGER cb,
  1196.         [in] DWORD dwLockType);
  1197.  
  1198.     HRESULT Stat(
  1199.         [out] STATSTG *pstatstg,
  1200.         [in] DWORD grfStatFlag);
  1201. }
  1202.  
  1203. [
  1204.     object,
  1205.     uuid(00000103-0000-0000-C000-000000000046),
  1206.     pointer_default(unique)
  1207. ]
  1208.  
  1209. interface IEnumFORMATETC : IUnknown
  1210. {
  1211.  
  1212.     typedef [unique] IEnumFORMATETC *LPENUMFORMATETC;
  1213.  
  1214.  
  1215.     typedef struct tagDVTARGETDEVICE {
  1216.         DWORD tdSize;
  1217.         WORD tdDriverNameOffset;
  1218.         WORD tdDeviceNameOffset;
  1219.         WORD tdPortNameOffset;
  1220.         WORD tdExtDevmodeOffset;
  1221.         [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))]
  1222.         BYTE tdData[];
  1223.     }DVTARGETDEVICE;
  1224.  
  1225.  
  1226.     typedef CLIPFORMAT *LPCLIPFORMAT;
  1227.  
  1228.     typedef struct tagFORMATETC {
  1229.         CLIPFORMAT cfFormat;
  1230.         [unique] DVTARGETDEVICE * ptd;
  1231.         DWORD dwAspect;
  1232.         LONG lindex;
  1233.         DWORD tymed;
  1234.     }FORMATETC, *LPFORMATETC;
  1235.  
  1236.     [local]
  1237.     HRESULT Next(
  1238.         [in] ULONG celt,
  1239.         [out] FORMATETC *rgelt,
  1240.         [out] ULONG *pceltFetched);
  1241.  
  1242.     [call_as(Next)]
  1243.     HRESULT RemoteNext(
  1244.         [in] ULONG celt,
  1245.         [out, size_is(celt), length_is(*pceltFetched )]
  1246.         FORMATETC *rgelt,
  1247.         [out] ULONG *pceltFetched);
  1248.  
  1249.     HRESULT Skip(
  1250.         [in] ULONG celt);
  1251.  
  1252.     HRESULT Reset();
  1253.  
  1254.     HRESULT Clone(
  1255.         [out] IEnumFORMATETC **ppenum);
  1256. }
  1257.  
  1258. [
  1259.     object,
  1260.     uuid(00000105-0000-0000-C000-000000000046),
  1261.     pointer_default(unique)
  1262. ]
  1263.  
  1264. interface IEnumSTATDATA : IUnknown
  1265. {
  1266.  
  1267.     typedef [unique] IEnumSTATDATA *LPENUMSTATDATA;
  1268.  
  1269.     //Advise Flags
  1270.     typedef enum tagADVF
  1271.     {
  1272.         ADVF_NODATA = 1,
  1273.         ADVF_PRIMEFIRST = 2,
  1274.         ADVF_ONLYONCE = 4,
  1275.         ADVF_DATAONSTOP = 64,
  1276.         ADVFCACHE_NOHANDLER = 8,
  1277.         ADVFCACHE_FORCEBUILTIN = 16,
  1278.         ADVFCACHE_ONSAVE = 32
  1279.     } ADVF;
  1280.  
  1281.  
  1282.     // Stats for data; used by several enumerations and by at least one
  1283.     // implementation of IDataAdviseHolder; if a field is not used, it
  1284.     // will be NULL.
  1285.  
  1286.     typedef struct tagSTATDATA
  1287.     {                              // field used by:
  1288.         FORMATETC formatetc;       // EnumAdvise, EnumData (cache), EnumFormats
  1289.         DWORD advf;                // EnumAdvise, EnumData (cache)
  1290.         [unique] IAdviseSink * pAdvSink; // EnumAdvise
  1291.         DWORD dwConnection;        // EnumAdvise
  1292.     } STATDATA;
  1293.     typedef STATDATA *LPSTATDATA;
  1294.  
  1295.     [local]
  1296.     HRESULT Next(
  1297.         [in] ULONG celt,
  1298.         STATDATA *rgelt,
  1299.         [out] ULONG *pceltFetched);
  1300.  
  1301.     [call_as(Next)]
  1302.     HRESULT RemoteNext(
  1303.         [in] ULONG celt,
  1304.         [out, size_is(celt), length_is(*pceltFetched)]
  1305.         STATDATA *rgelt,
  1306.         [out] ULONG *pceltFetched);
  1307.  
  1308.     HRESULT Skip(
  1309.         [in] ULONG celt);
  1310.  
  1311.     HRESULT Reset();
  1312.  
  1313.     HRESULT Clone(
  1314.         [out] IEnumSTATDATA **ppenum);
  1315. }
  1316.  
  1317. [
  1318.     object,
  1319.     uuid(00000012-0000-0000-C000-000000000046),
  1320.     pointer_default(unique)
  1321. ]
  1322.  
  1323. interface IRootStorage : IUnknown
  1324. {
  1325.  
  1326.     typedef [unique] IRootStorage *LPROOTSTORAGE;
  1327.  
  1328.     HRESULT SwitchToFile
  1329.     (
  1330.         [in] LPOLESTR pszFile
  1331.     );
  1332. }
  1333.  
  1334.  
  1335. /****************************************************************************
  1336.  *  Notification Interfaces
  1337.  ****************************************************************************/
  1338.  
  1339. [
  1340.     object,
  1341.     uuid(0000010f-0000-0000-C000-000000000046),
  1342.     pointer_default(unique)
  1343. ]
  1344.  
  1345. interface IAdviseSink : IUnknown
  1346. {
  1347.  
  1348.     typedef IAdviseSink *LPADVISESINK;
  1349.  
  1350.     typedef [v1_enum] enum tagTYMED {
  1351.         TYMED_HGLOBAL = 1,
  1352.         TYMED_FILE = 2,
  1353.         TYMED_ISTREAM = 4,
  1354.         TYMED_ISTORAGE = 8,
  1355.         TYMED_GDI = 16,
  1356.         TYMED_MFPICT = 32,
  1357.         TYMED_ENHMF = 64,
  1358.         TYMED_NULL = 0
  1359.     } TYMED;
  1360.  
  1361.     cpp_quote("#ifndef RC_INVOKED")
  1362.     cpp_quote("#pragma warning(disable:4200)")
  1363.     cpp_quote("#endif")
  1364.  
  1365.     typedef struct tagRemSTGMEDIUM {
  1366.         DWORD tymed;
  1367.         DWORD dwHandleType;
  1368.         unsigned long pData;
  1369.         unsigned long pUnkForRelease;
  1370.         unsigned long cbData;
  1371.         [size_is(cbData)] byte data[];
  1372.     } RemSTGMEDIUM;
  1373.     cpp_quote("#ifndef RC_INVOKED")
  1374.     cpp_quote("#pragma warning(default:4200)")
  1375.     cpp_quote("#endif")
  1376.  
  1377.  
  1378. cpp_quote("#ifdef NONAMELESSUNION")
  1379. cpp_quote("typedef struct tagSTGMEDIUM {")
  1380. cpp_quote("    DWORD tymed;")
  1381. cpp_quote("    union {")
  1382. cpp_quote("        HBITMAP hBitmap;")
  1383. cpp_quote("        HMETAFILEPICT hMetaFilePict;")
  1384. cpp_quote("        HENHMETAFILE hEnhMetaFile;")
  1385. cpp_quote("        HGLOBAL hGlobal;")
  1386. cpp_quote("        LPOLESTR lpszFileName;")
  1387. cpp_quote("        IStream *pstm;")
  1388. cpp_quote("        IStorage *pstg;")
  1389. cpp_quote("        } u;")
  1390. cpp_quote("    IUnknown *pUnkForRelease;")
  1391. cpp_quote("}uSTGMEDIUM;")
  1392. cpp_quote("#else")
  1393.  
  1394.     typedef struct tagSTGMEDIUM {
  1395.     DWORD tymed;
  1396.     [switch_type(DWORD), switch_is((DWORD) tymed)]
  1397.         union
  1398.         {
  1399.         [case(TYMED_GDI)]
  1400.             HBITMAP hBitmap;
  1401.         [case(TYMED_MFPICT)]
  1402.             HMETAFILEPICT hMetaFilePict;
  1403.         [case(TYMED_ENHMF)]
  1404.             HENHMETAFILE hEnhMetaFile;
  1405.         [case(TYMED_HGLOBAL)]
  1406.             HGLOBAL hGlobal;
  1407.         [case(TYMED_FILE)]
  1408.             LPOLESTR lpszFileName;
  1409.         [case(TYMED_ISTREAM)]
  1410.             IStream *pstm;
  1411.         [case(TYMED_ISTORAGE)]
  1412.             IStorage *pstg;
  1413.         [default]
  1414.                 ;
  1415.         };
  1416.         [unique] IUnknown *pUnkForRelease;
  1417.     }uSTGMEDIUM;
  1418.  
  1419. cpp_quote("#endif /* !NONAMELESSUNION */")
  1420.  
  1421.  
  1422. //
  1423. //  wireSTGMEDIUM
  1424. //
  1425. // These flags are #defined (not enumerated) in wingdi.
  1426. // We need to repeat #defines to avoid conflict in the generated file.
  1427. //
  1428.  
  1429. /* Object Definitions for EnumObjects() */
  1430. #define OBJ_PEN             1
  1431. #define OBJ_BRUSH           2
  1432. #define OBJ_DC              3
  1433. #define OBJ_METADC          4
  1434. #define OBJ_PAL             5
  1435. #define OBJ_FONT            6
  1436. #define OBJ_BITMAP          7
  1437. #define OBJ_REGION          8
  1438. #define OBJ_METAFILE        9
  1439. #define OBJ_MEMDC           10
  1440. #define OBJ_EXTPEN          11
  1441. #define OBJ_ENHMETADC       12
  1442. #define OBJ_ENHMETAFILE     13
  1443.  
  1444.     typedef union _GDI_OBJECT switch( DWORD ObjectType ) u
  1445.     {
  1446.         case OBJ_BITMAP:    wireHBITMAP     hBitmap;
  1447.         case OBJ_PAL:       wireHPALETTE    hPalette;
  1448.         default:            wireHGLOBAL     hGeneric;
  1449.     } GDI_OBJECT;
  1450.  
  1451.     typedef struct _userSTGMEDIUM
  1452.     {
  1453.         union _STGMEDIUM_UNION switch( DWORD tymed ) u
  1454.         {
  1455.         case TYMED_NULL:        ;
  1456.         case TYMED_MFPICT:      wireHMETAFILEPICT   hMetaFilePict;
  1457.         case TYMED_ENHMF:       wireHENHMETAFILE    hHEnhMetaFile;
  1458.         case TYMED_GDI:         GDI_OBJECT *        hGdiHandle;
  1459.         case TYMED_HGLOBAL:     wireHGLOBAL         hGlobal;
  1460.         case TYMED_FILE:        LPOLESTR            lpszFileName;
  1461.         case TYMED_ISTREAM:     BYTE_BLOB *         pstm;
  1462.         case TYMED_ISTORAGE:    BYTE_BLOB *         pstg;
  1463.         };
  1464.         IUnknown *              pUnkForRelease;
  1465.     } userSTGMEDIUM;
  1466.  
  1467.     typedef [unique] userSTGMEDIUM  * wireSTGMEDIUM;
  1468.     typedef [wire_marshal( wireSTGMEDIUM )] uSTGMEDIUM STGMEDIUM;
  1469.  
  1470.     typedef [unique] userSTGMEDIUM  * wireASYNC_STGMEDIUM;
  1471.     typedef [wire_marshal( wireASYNC_STGMEDIUM )] STGMEDIUM ASYNC_STGMEDIUM;
  1472.  
  1473.     typedef STGMEDIUM *LPSTGMEDIUM;
  1474.  
  1475.     typedef struct _userFLAG_STGMEDIUM
  1476.     {
  1477.         long                ContextFlags;
  1478.         long                fPassOwnership;
  1479.         userSTGMEDIUM       Stgmed;
  1480.     } userFLAG_STGMEDIUM;
  1481.  
  1482.     typedef [unique] userFLAG_STGMEDIUM  * wireFLAG_STGMEDIUM;
  1483.  
  1484.     typedef [wire_marshal( wireFLAG_STGMEDIUM )]
  1485.         struct _FLAG_STGMEDIUM
  1486.         {
  1487.                 long                ContextFlags;
  1488.                 long                fPassOwnership;
  1489.                 STGMEDIUM           Stgmed;
  1490.         } FLAG_STGMEDIUM;
  1491.  
  1492.  
  1493.     [local]
  1494.     void OnDataChange(
  1495.         [in, unique] FORMATETC *pFormatetc,
  1496.         [in, unique] STGMEDIUM *pStgmed);
  1497.  
  1498.     [call_as(OnDataChange), async]
  1499.     void RemoteOnDataChange(
  1500.         [in, unique] FORMATETC *pFormatetc,
  1501.         [in, unique] ASYNC_STGMEDIUM *pStgmed);
  1502.  
  1503.     [local]
  1504.     void OnViewChange(
  1505.         [in] DWORD dwAspect,
  1506.         [in] LONG lindex);
  1507.  
  1508.     [call_as(OnViewChange), async]
  1509.     void RemoteOnViewChange(
  1510.         [in] DWORD dwAspect,
  1511.         [in] LONG lindex);
  1512.  
  1513.     [local]
  1514.     void OnRename(
  1515.         [in] IMoniker *pmk);
  1516.  
  1517.     [call_as(OnRename), async]
  1518.     void RemoteOnRename(
  1519.         [in] IMoniker *pmk);
  1520.  
  1521.     [local]
  1522.     void OnSave();
  1523.  
  1524.     [call_as(OnSave), async]
  1525.     void RemoteOnSave();
  1526.  
  1527.     [local]
  1528.     void OnClose();
  1529.  
  1530.     [call_as(OnClose)]
  1531.     HRESULT RemoteOnClose();
  1532. }
  1533.  
  1534. [
  1535.     object,
  1536.     uuid(00000125-0000-0000-C000-000000000046),
  1537.     pointer_default(unique)
  1538. ]
  1539.  
  1540. interface IAdviseSink2 : IAdviseSink
  1541. {
  1542.  
  1543.     typedef [unique] IAdviseSink2 *LPADVISESINK2;
  1544.  
  1545.     [local]
  1546.     void OnLinkSrcChange(
  1547.         [in, unique] IMoniker *pmk);
  1548.  
  1549.     [call_as(OnLinkSrcChange), async]
  1550.     void RemoteOnLinkSrcChange(
  1551.         [in, unique] IMoniker *pmk);
  1552. }
  1553.  
  1554. [
  1555.     object,
  1556.     uuid(0000010e-0000-0000-C000-000000000046),
  1557.     pointer_default(unique)
  1558. ]
  1559.  
  1560. interface IDataObject : IUnknown
  1561. {
  1562.  
  1563.     typedef [unique] IDataObject *LPDATAOBJECT;
  1564.  
  1565.     //DATA format DIRection
  1566.     typedef enum tagDATADIR
  1567.     {
  1568.         DATADIR_GET = 1,
  1569.         DATADIR_SET = 2
  1570.     } DATADIR;
  1571.  
  1572.     [local]
  1573.     HRESULT GetData(
  1574.         [in, unique] FORMATETC *pformatetcIn,
  1575.         [out] STGMEDIUM *pmedium);
  1576.  
  1577.     [call_as(GetData)]
  1578.     HRESULT RemoteGetData(
  1579.         [in, unique] FORMATETC *pformatetcIn,
  1580.         [out] STGMEDIUM *pRemoteMedium);
  1581.  
  1582.     [local]
  1583.     HRESULT GetDataHere(
  1584.         [in, unique] FORMATETC *pformatetc,
  1585.         [in, out] STGMEDIUM *pmedium);
  1586.  
  1587.     [call_as(GetDataHere)]
  1588.     HRESULT RemoteGetDataHere(
  1589.         [in, unique] FORMATETC *pformatetc,
  1590.         [in, out] STGMEDIUM *pRemoteMedium);
  1591.  
  1592.     HRESULT QueryGetData(
  1593.         [in, unique] FORMATETC *pformatetc);
  1594.  
  1595.  
  1596.     HRESULT GetCanonicalFormatEtc(
  1597.         [in, unique] FORMATETC *pformatectIn,
  1598.         [out] FORMATETC *pformatetcOut);
  1599.  
  1600.     [local]
  1601.     HRESULT SetData(
  1602.         [in, unique] FORMATETC *pformatetc,
  1603.         [in, unique] STGMEDIUM *pmedium,
  1604.         [in] BOOL fRelease);
  1605.  
  1606.     [call_as(SetData)]
  1607.     HRESULT RemoteSetData(
  1608.         [in, unique] FORMATETC *pformatetc,
  1609.         [in, unique] FLAG_STGMEDIUM *pmedium,
  1610.         [in] BOOL fRelease);
  1611.  
  1612.     HRESULT EnumFormatEtc(
  1613.         [in] DWORD dwDirection,
  1614.         [out] IEnumFORMATETC **ppenumFormatEtc);
  1615.  
  1616.     HRESULT DAdvise(
  1617.         [in] FORMATETC *pformatetc,
  1618.         [in] DWORD advf,
  1619.         [in, unique] IAdviseSink *pAdvSink,
  1620.         [out] DWORD *pdwConnection);
  1621.  
  1622.     HRESULT DUnadvise(
  1623.         [in] DWORD dwConnection);
  1624.  
  1625.     HRESULT EnumDAdvise(
  1626.         [out] IEnumSTATDATA **ppenumAdvise);
  1627.  
  1628. }
  1629.  
  1630. [
  1631.     local,
  1632.     object,
  1633.     uuid(00000110-0000-0000-C000-000000000046)
  1634. ]
  1635.  
  1636. interface IDataAdviseHolder : IUnknown
  1637. {
  1638.  
  1639.     typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER;
  1640.  
  1641.     HRESULT Advise
  1642.     (
  1643.         [in, unique] IDataObject *pDataObject,
  1644.         [in, unique] FORMATETC *pFetc,
  1645.         [in] DWORD advf,
  1646.         [in, unique] IAdviseSink *pAdvise,
  1647.         [out] DWORD *pdwConnection
  1648.     );
  1649.  
  1650.     HRESULT Unadvise
  1651.     (
  1652.         [in] DWORD dwConnection
  1653.     );
  1654.  
  1655.     HRESULT EnumAdvise
  1656.     (
  1657.         [out] IEnumSTATDATA **ppenumAdvise
  1658.     );
  1659.  
  1660.     HRESULT SendOnDataChange
  1661.     (
  1662.         [in, unique] IDataObject *pDataObject,
  1663.         [in] DWORD dwReserved,
  1664.         [in] DWORD advf
  1665.     );
  1666.  
  1667. }
  1668.  
  1669. [
  1670.     local,
  1671.     object,
  1672.     uuid(00000016-0000-0000-C000-000000000046)
  1673. ]
  1674.  
  1675. interface IMessageFilter : IUnknown
  1676. {
  1677.  
  1678.     typedef [unique] IMessageFilter *LPMESSAGEFILTER;
  1679.  
  1680. // call type used by IMessageFilter::HandleIncomingMessage
  1681. typedef enum tagCALLTYPE
  1682. {
  1683.     CALLTYPE_TOPLEVEL = 1,      // toplevel call - no outgoing call
  1684.     CALLTYPE_NESTED   = 2,      // callback on behalf of previous outgoing call - should always handle
  1685.     CALLTYPE_ASYNC    = 3,      // aysnchronous call - can NOT be rejected
  1686.     CALLTYPE_TOPLEVEL_CALLPENDING = 4,  // new toplevel call with new LID
  1687.     CALLTYPE_ASYNC_CALLPENDING    = 5   // async call - can NOT be rejected
  1688. } CALLTYPE;
  1689.  
  1690. // status of server call - returned by IMessageFilter::HandleIncomingCall
  1691. // and passed to  IMessageFilter::RetryRejectedCall
  1692. typedef enum tagSERVERCALL
  1693. {
  1694.     SERVERCALL_ISHANDLED    = 0,
  1695.     SERVERCALL_REJECTED     = 1,
  1696.     SERVERCALL_RETRYLATER   = 2
  1697. } SERVERCALL;
  1698.  
  1699. // Pending type indicates the level of nesting
  1700. typedef enum tagPENDINGTYPE
  1701. {
  1702.     PENDINGTYPE_TOPLEVEL = 1, // toplevel call
  1703.     PENDINGTYPE_NESTED   = 2  // nested call
  1704. } PENDINGTYPE;
  1705.  
  1706. // return values of MessagePending
  1707. typedef enum tagPENDINGMSG
  1708. {
  1709.     PENDINGMSG_CANCELCALL  = 0, // cancel the outgoing call
  1710.     PENDINGMSG_WAITNOPROCESS  = 1, // wait for the return and don't dispatch the message
  1711.     PENDINGMSG_WAITDEFPROCESS = 2  // wait and dispatch the message
  1712.  
  1713. } PENDINGMSG;
  1714.  
  1715. // additional interface information about the incoming call
  1716. typedef struct tagINTERFACEINFO
  1717. {
  1718.     IUnknown    *pUnk;      // the pointer to the object
  1719.     IID         iid;        // interface id
  1720.     WORD        wMethod;    // interface method
  1721. } INTERFACEINFO, *LPINTERFACEINFO;
  1722.  
  1723.     DWORD HandleInComingCall
  1724.     (
  1725.         [in] DWORD dwCallType,
  1726.         [in] HTASK htaskCaller,
  1727.         [in] DWORD dwTickCount,
  1728.         [in] LPINTERFACEINFO lpInterfaceInfo
  1729.     );
  1730.  
  1731.     DWORD RetryRejectedCall
  1732.     (
  1733.         [in] HTASK htaskCallee,
  1734.         [in] DWORD dwTickCount,
  1735.         [in] DWORD dwRejectType
  1736.     );
  1737.  
  1738.     DWORD MessagePending
  1739.     (
  1740.         [in] HTASK htaskCallee,
  1741.         [in] DWORD dwTickCount,
  1742.         [in] DWORD dwPendingType
  1743.     );
  1744. }
  1745.  
  1746.  
  1747. /****************************************************************************
  1748.  *  Object Remoting Interfaces
  1749.  ****************************************************************************/
  1750.  
  1751. [
  1752.     local,
  1753.     object,
  1754.     uuid(D5F56B60-593B-101A-B569-08002B2DBF7A)
  1755. ]
  1756. interface IRpcChannelBuffer : IUnknown
  1757. {
  1758.  
  1759.     typedef unsigned long RPCOLEDATAREP;
  1760.  
  1761.     typedef struct tagRPCOLEMESSAGE
  1762.     {
  1763.         void             *reserved1;
  1764.         RPCOLEDATAREP     dataRepresentation;
  1765.         void             *Buffer;
  1766.         ULONG             cbBuffer;
  1767.         ULONG             iMethod;
  1768.         void             *reserved2[5];
  1769.         ULONG             rpcFlags;
  1770.     } RPCOLEMESSAGE;
  1771.  
  1772.     typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;
  1773.  
  1774.     HRESULT GetBuffer
  1775.     (
  1776.         [in] RPCOLEMESSAGE *pMessage,
  1777.         [in] REFIID riid
  1778.     );
  1779.  
  1780.     HRESULT SendReceive
  1781.     (
  1782.         [in,out] RPCOLEMESSAGE *pMessage,
  1783.         [out] ULONG *pStatus
  1784.     );
  1785.  
  1786.     HRESULT FreeBuffer
  1787.     (
  1788.         [in] RPCOLEMESSAGE *pMessage
  1789.     );
  1790.  
  1791.     HRESULT GetDestCtx
  1792.     (
  1793.         [out] DWORD *pdwDestContext,
  1794.         [out] void **ppvDestContext
  1795.     );
  1796.  
  1797.     HRESULT IsConnected
  1798.     (
  1799.         void
  1800.     );
  1801.  
  1802. }
  1803.  
  1804. [
  1805.     local,
  1806.     object,
  1807.     uuid(D5F56A34-593B-101A-B569-08002B2DBF7A)
  1808. ]
  1809. interface IRpcProxyBuffer : IUnknown
  1810. {
  1811.  
  1812.     HRESULT Connect
  1813.     (
  1814.         [in, unique] IRpcChannelBuffer *pRpcChannelBuffer
  1815.     );
  1816.  
  1817.     void Disconnect
  1818.     (
  1819.         void
  1820.     );
  1821.  
  1822. }
  1823.  
  1824. [
  1825.     local,
  1826.     object,
  1827.     uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A)
  1828. ]
  1829. interface IRpcStubBuffer : IUnknown
  1830. {
  1831.  
  1832.     HRESULT Connect
  1833.     (
  1834.         [in] IUnknown *pUnkServer
  1835.     );
  1836.  
  1837.     void Disconnect();
  1838.  
  1839.     HRESULT Invoke
  1840.     (
  1841.         [in] RPCOLEMESSAGE *_prpcmsg,
  1842.         [in] IRpcChannelBuffer *_pRpcChannelBuffer
  1843.     );
  1844.  
  1845.     IRpcStubBuffer *IsIIDSupported
  1846.     (
  1847.         [in] REFIID riid
  1848.     );
  1849.  
  1850.     ULONG CountRefs
  1851.     (
  1852.         void
  1853.     );
  1854.  
  1855.     HRESULT DebugServerQueryInterface
  1856.     (
  1857.         void **ppv
  1858.     );
  1859.  
  1860.     void DebugServerRelease
  1861.     (
  1862.         void *pv
  1863.     );
  1864.  
  1865. }
  1866.  
  1867.  
  1868.  
  1869. [
  1870.     local,
  1871.     object,
  1872.     uuid(D5F569D0-593B-101A-B569-08002B2DBF7A)
  1873. ]
  1874. interface IPSFactoryBuffer : IUnknown
  1875. {
  1876.  
  1877.     HRESULT CreateProxy
  1878.     (
  1879.         [in] IUnknown *pUnkOuter,
  1880.         [in] REFIID riid,
  1881.         [out] IRpcProxyBuffer **ppProxy,
  1882.     [out] void **ppv
  1883.     );
  1884.  
  1885.     HRESULT CreateStub
  1886.     (
  1887.         [in] REFIID riid,
  1888.         [in, unique] IUnknown *pUnkServer,
  1889.         [out] IRpcStubBuffer **ppStub
  1890.     );
  1891. }
  1892.  
  1893. [
  1894.     local,
  1895.     object,
  1896.     uuid(1008c4a0-7613-11cf-9af1-0020af6e72f4)
  1897. ]
  1898. interface IChannelHook : IUnknown
  1899. {
  1900.     void ClientGetSize(
  1901.         [in]  REFGUID uExtent,
  1902.         [in]  REFIID  riid,
  1903.         [out] ULONG  *pDataSize );
  1904.  
  1905.     void ClientFillBuffer(
  1906.         [in]      REFGUID uExtent,
  1907.         [in]      REFIID  riid,
  1908.         [in, out] ULONG  *pDataSize,
  1909.         [in]      void   *pDataBuffer );
  1910.  
  1911.     void ClientNotify(
  1912.         [in] REFGUID uExtent,
  1913.         [in] REFIID  riid,
  1914.         [in] ULONG   cbDataSize,
  1915.         [in] void   *pDataBuffer,
  1916.         [in] DWORD   lDataRep,
  1917.         [in] HRESULT hrFault );
  1918.  
  1919.     void ServerNotify(
  1920.         [in] REFGUID uExtent,
  1921.         [in] REFIID  riid,
  1922.         [in] ULONG   cbDataSize,
  1923.         [in] void   *pDataBuffer,
  1924.         [in] DWORD   lDataRep );
  1925.  
  1926.     void ServerGetSize(
  1927.         [in]  REFGUID uExtent,
  1928.         [in]  REFIID  riid,
  1929.         [in]  HRESULT hrFault,
  1930.         [out] ULONG  *pDataSize );
  1931.  
  1932.     void ServerFillBuffer(
  1933.         [in]      REFGUID uExtent,
  1934.         [in]      REFIID  riid,
  1935.         [in, out] ULONG  *pDataSize,
  1936.         [in]      void   *pDataBuffer,
  1937.         [in]      HRESULT hrFault );
  1938. };
  1939.  
  1940. /****************************************************************************
  1941.  *  Property Storage Interfaces
  1942.  ****************************************************************************/
  1943.  
  1944. interface IEnumSTATPROPSTG;
  1945. interface IEnumSTATPROPSETSTG;
  1946.  
  1947. [
  1948.     object,
  1949.     uuid(00000138-0000-0000-C000-000000000046),
  1950.     pointer_default(unique)
  1951. ]
  1952.  
  1953. interface IPropertyStorage : IUnknown
  1954. {
  1955.  
  1956.     typedef GUID            FMTID;
  1957.  
  1958.     cpp_quote("#ifdef __cplusplus")
  1959.     cpp_quote("#define REFFMTID const FMTID &")
  1960.     cpp_quote("#else")
  1961.     cpp_quote("#define REFFMTID const FMTID * const")
  1962.     cpp_quote("#endif")
  1963.  
  1964.     cpp_quote("#if 0 // for MIDL processing only!!")
  1965.     typedef const GUID * REFFMTID ;
  1966.     cpp_quote("#endif //if 0: for MIDL processing only!!")
  1967.  
  1968.     const DWORD PROPSETFLAG_DEFAULT = 0;
  1969.     const DWORD PROPSETFLAG_NONSIMPLE = 1;
  1970.     const DWORD PROPSETFLAG_ANSI = 2;
  1971.  
  1972.     typedef [unique] IPropertyStorage * LPPROPERTYSTORAGE;
  1973.  
  1974.     typedef struct tagPROPVARIANT PROPVARIANT;
  1975.  
  1976.     #define TYPEDEF_CA(type, name) \
  1977.         typedef struct tag##name\
  1978.         {\
  1979.             ULONG   cElems;\
  1980.             [size_is( cElems )]\
  1981.             type *  pElems;\
  1982.         } name
  1983.  
  1984.     TYPEDEF_CA(unsigned char,       CAUB);
  1985.     TYPEDEF_CA(short,               CAI);
  1986.     TYPEDEF_CA(USHORT,              CAUI);
  1987.     TYPEDEF_CA(long,                CAL);
  1988.     TYPEDEF_CA(ULONG,               CAUL);
  1989.     TYPEDEF_CA(float,               CAFLT);
  1990.     TYPEDEF_CA(double,              CADBL);
  1991.     TYPEDEF_CA(CY,                  CACY);
  1992.     TYPEDEF_CA(DATE,                CADATE);
  1993.     TYPEDEF_CA(BSTR,                CABSTR);
  1994.     TYPEDEF_CA(VARIANT_BOOL,        CABOOL);
  1995.     TYPEDEF_CA(SCODE,               CASCODE);
  1996.     TYPEDEF_CA(PROPVARIANT,         CAPROPVARIANT);
  1997.     TYPEDEF_CA(LARGE_INTEGER,       CAH);
  1998.     TYPEDEF_CA(ULARGE_INTEGER,      CAUH);
  1999.     TYPEDEF_CA(LPSTR,               CALPSTR);
  2000.     TYPEDEF_CA(LPWSTR,              CALPWSTR);
  2001.     TYPEDEF_CA(FILETIME,            CAFILETIME);
  2002.     TYPEDEF_CA(CLIPDATA,            CACLIPDATA);
  2003.     TYPEDEF_CA(CLSID,               CACLSID);
  2004.  
  2005.     struct tagPROPVARIANT
  2006.     {
  2007.         VARTYPE vt;
  2008.         WORD    wReserved1;
  2009.         WORD    wReserved2;
  2010.         WORD    wReserved3;
  2011.         [switch_is((unsigned short) (vt & 0x1fff))] union
  2012.         {
  2013.             [case(VT_EMPTY, VT_NULL)]
  2014.                 ;
  2015.             [case(VT_UI1)]
  2016.                 UCHAR               bVal;
  2017.             [case(VT_I2)]
  2018.                 short               iVal;
  2019.             [case(VT_UI2)]
  2020.                 USHORT              uiVal;
  2021.             [case(VT_BOOL)]
  2022.                 VARIANT_BOOL        bool;
  2023.             [case(VT_I4)]
  2024.                 long                lVal;
  2025.             [case(VT_UI4)]
  2026.                 ULONG               ulVal;
  2027.             [case(VT_R4)]
  2028.                 float               fltVal;
  2029.             [case(VT_ERROR)]
  2030.                 SCODE               scode;
  2031.             [case(VT_I8)]
  2032.                 LARGE_INTEGER       hVal;
  2033.             [case(VT_UI8)]
  2034.                 ULARGE_INTEGER      uhVal;
  2035.             [case(VT_R8)]
  2036.                 double              dblVal;
  2037.             [case(VT_CY)]
  2038.                 CY                  cyVal;
  2039.             [case(VT_DATE)]
  2040.                 DATE                date;
  2041.             [case(VT_FILETIME)]
  2042.                 FILETIME            filetime;
  2043.             [case(VT_CLSID)]
  2044.                 CLSID *             puuid;
  2045.             [case(VT_BLOB, VT_BLOB_OBJECT)]
  2046.                 BLOB                blob;
  2047.             [case(VT_CF)]
  2048.                 CLIPDATA            *pclipdata;
  2049.             [case(VT_STREAM, VT_STREAMED_OBJECT)]
  2050.                 IStream *           pStream;
  2051.             [case(VT_STORAGE, VT_STORED_OBJECT)]
  2052.                 IStorage *          pStorage;
  2053.             [case(VT_BSTR)]
  2054.                 BSTR                bstrVal;
  2055.             [case(VT_LPSTR)]
  2056.                 LPSTR               pszVal;
  2057.             [case(VT_LPWSTR)]
  2058.                 LPWSTR              pwszVal;
  2059.             [case(VT_UI1|VT_VECTOR)]
  2060.                 CAUB                caub;
  2061.             [case(VT_I2|VT_VECTOR)]
  2062.                 CAI                 cai;
  2063.             [case(VT_UI2|VT_VECTOR)]
  2064.                 CAUI                caui;
  2065.             [case(VT_BOOL|VT_VECTOR)]
  2066.                 CABOOL              cabool;
  2067.             [case(VT_I4|VT_VECTOR)]
  2068.                 CAL                 cal;
  2069.             [case(VT_UI4|VT_VECTOR)]
  2070.                 CAUL                caul;
  2071.             [case(VT_R4|VT_VECTOR)]
  2072.                 CAFLT               caflt;
  2073.             [case(VT_ERROR|VT_VECTOR)]
  2074.                 CASCODE             cascode;
  2075.             [case(VT_I8|VT_VECTOR)]
  2076.                 CAH                 cah;
  2077.             [case(VT_UI8|VT_VECTOR)]
  2078.                 CAUH                cauh;
  2079.             [case(VT_R8|VT_VECTOR)]
  2080.                 CADBL               cadbl;
  2081.             [case(VT_CY|VT_VECTOR)]
  2082.                 CACY                cacy;
  2083.             [case(VT_DATE|VT_VECTOR)]
  2084.                 CADATE              cadate;
  2085.             [case(VT_FILETIME|VT_VECTOR)]
  2086.                 CAFILETIME          cafiletime;
  2087.             [case(VT_CLSID|VT_VECTOR)]
  2088.                 CACLSID             cauuid;
  2089.             [case(VT_CF|VT_VECTOR)]
  2090.                 CACLIPDATA          caclipdata;
  2091.             [case(VT_BSTR|VT_VECTOR)]
  2092.                 CABSTR              cabstr;
  2093.             [case(VT_LPSTR|VT_VECTOR)]
  2094.                 CALPSTR             calpstr;
  2095.             [case(VT_LPWSTR|VT_VECTOR)]
  2096.                 CALPWSTR            calpwstr;
  2097.             [case(VT_VARIANT|VT_VECTOR)]
  2098.                 CAPROPVARIANT       capropvar;
  2099.         };
  2100.     };
  2101.  
  2102.     typedef struct tagPROPVARIANT * LPPROPVARIANT;
  2103.  
  2104.     const PROPID PID_DICTIONARY         = 0x00000000;
  2105.     const PROPID PID_CODEPAGE           = 0x00000001;
  2106.     const PROPID PID_FIRST_NAME_DEFAULT = 0x00000fff;
  2107.     const PROPID PID_LOCALE             = 0x80000000;
  2108.     const PROPID PID_MODIFY_TIME        = 0x80000001;
  2109.     const PROPID PID_SECURITY           = 0x80000002;
  2110.     const PROPID PID_ILLEGAL            = 0xffffffff;
  2111.  
  2112.  
  2113.     const ULONG PRSPEC_INVALID = 0xffffffff;
  2114.     const ULONG PRSPEC_LPWSTR = 0;
  2115.     const ULONG PRSPEC_PROPID = 1;
  2116.  
  2117.     typedef struct tagPROPSPEC
  2118.     {
  2119.  
  2120.         ULONG   ulKind;
  2121.         [switch_is(ulKind)] union
  2122.         {
  2123.             [case(PRSPEC_PROPID)]
  2124.                 PROPID      propid;
  2125.             [case(PRSPEC_LPWSTR)]
  2126.                 LPOLESTR    lpwstr;
  2127.             [default] ;
  2128.         } ;
  2129.  
  2130.     } PROPSPEC;
  2131.  
  2132.     typedef struct tagSTATPROPSTG
  2133.     {
  2134.  
  2135.         LPOLESTR    lpwstrName;
  2136.         PROPID      propid;
  2137.         VARTYPE     vt;
  2138.  
  2139.     } STATPROPSTG;
  2140.  
  2141.     typedef struct tagSTATPROPSETSTG
  2142.     {
  2143.  
  2144.         FMTID       fmtid;
  2145.         CLSID       clsid;
  2146.         DWORD       grfFlags;
  2147.         FILETIME    mtime;
  2148.         FILETIME    ctime;
  2149.         FILETIME    atime;
  2150.  
  2151.     } STATPROPSETSTG;
  2152.  
  2153.     HRESULT ReadMultiple(
  2154.         [in]    ULONG                   cpspec,
  2155.         [in, size_is(cpspec)]
  2156.                 PROPSPEC                rgpspec[],
  2157.         [out, size_is(cpspec)]
  2158.                 PROPVARIANT             rgpropvar[]
  2159.         );
  2160.  
  2161.     HRESULT WriteMultiple(
  2162.         [in]    ULONG                   cpspec,
  2163.         [in, size_is(cpspec)]
  2164.                 PROPSPEC                rgpspec[],
  2165.         [in, size_is(cpspec)]
  2166.                 PROPVARIANT             rgpropvar[],
  2167.         [in]    PROPID                  propidNameFirst
  2168.         );
  2169.  
  2170.     HRESULT DeleteMultiple(
  2171.         [in]    ULONG                   cpspec,
  2172.         [in, size_is(cpspec)]
  2173.                 PROPSPEC                rgpspec[]
  2174.         );
  2175.  
  2176.     HRESULT ReadPropertyNames(
  2177.         [in]    ULONG                   cpropid,
  2178.         [in, size_is(cpropid)]
  2179.                 PROPID                  rgpropid[],
  2180.         [out, size_is(cpropid)]
  2181.                 LPOLESTR                rglpwstrName[]
  2182.         );
  2183.  
  2184.     HRESULT WritePropertyNames(
  2185.         [in]    ULONG                   cpropid,
  2186.         [in, size_is(cpropid)]
  2187.                 PROPID                  rgpropid[],
  2188.         [in, size_is(cpropid)]
  2189.                 LPOLESTR                rglpwstrName[]
  2190.         );
  2191.  
  2192.     HRESULT DeletePropertyNames(
  2193.         [in]    ULONG                   cpropid,
  2194.         [in, size_is(cpropid)]
  2195.                 PROPID                  rgpropid[]
  2196.         );
  2197.  
  2198.     HRESULT Commit(
  2199.         [in]    DWORD                   grfCommitFlags
  2200.         );
  2201.  
  2202.     HRESULT Revert();
  2203.  
  2204.     HRESULT Enum(
  2205.         [out]   IEnumSTATPROPSTG **     ppenum
  2206.         );
  2207.  
  2208.     HRESULT SetTimes(
  2209.         [in]    FILETIME const *        pctime,
  2210.         [in]    FILETIME const *        patime,
  2211.         [in]    FILETIME const *        pmtime
  2212.         );
  2213.  
  2214.     HRESULT SetClass(
  2215.         [in]    REFCLSID                clsid
  2216.         );
  2217.  
  2218.     HRESULT Stat(
  2219.         [out]   STATPROPSETSTG *        pstatpsstg
  2220.         );
  2221. }
  2222.  
  2223.  
  2224. [
  2225.     object,
  2226.     uuid(0000013A-0000-0000-C000-000000000046),
  2227.     pointer_default(unique)
  2228. ]
  2229.  
  2230. interface IPropertySetStorage : IUnknown
  2231. {
  2232.  
  2233.     typedef [unique] IPropertySetStorage * LPPROPERTYSETSTORAGE;
  2234.  
  2235.     HRESULT Create(
  2236.         [in]    REFFMTID                rfmtid,
  2237.         [in, unique]
  2238.                 CLSID *                 pclsid,
  2239.         [in]    DWORD                   grfFlags,
  2240.         [in]    DWORD                   grfMode,
  2241.         [out]   IPropertyStorage **     ppprstg
  2242.         );
  2243.  
  2244.     HRESULT Open(
  2245.         [in]    REFFMTID                rfmtid,
  2246.         [in]    DWORD                   grfMode,
  2247.         [out]   IPropertyStorage **     ppprstg
  2248.         );
  2249.  
  2250.     HRESULT Delete(
  2251.         [in]    REFFMTID                rfmtid
  2252.         );
  2253.  
  2254.     HRESULT Enum(
  2255.         [out]   IEnumSTATPROPSETSTG **  ppenum
  2256.         );
  2257.  
  2258. }
  2259.  
  2260.  
  2261. [
  2262.     object,
  2263.     uuid(00000139-0000-0000-C000-000000000046),
  2264.     pointer_default(unique)
  2265. ]
  2266.  
  2267. interface IEnumSTATPROPSTG : IUnknown
  2268. {
  2269.  
  2270.     typedef [unique] IEnumSTATPROPSTG * LPENUMSTATPROPSTG;
  2271.  
  2272.     [local]
  2273.     HRESULT Next(
  2274.         [in]    ULONG                   celt,
  2275.         [in]    STATPROPSTG *           rgelt,
  2276.         [out]   ULONG *                 pceltFetched
  2277.         );
  2278.  
  2279.     [call_as(Next)]
  2280.     HRESULT RemoteNext(
  2281.         [in]    ULONG                   celt,
  2282.         [out, size_is(celt), length_is(*pceltFetched)]
  2283.                 STATPROPSTG *           rgelt,
  2284.         [out]   ULONG *                 pceltFetched
  2285.         );
  2286.  
  2287.     HRESULT Skip(
  2288.         [in]    ULONG                   celt
  2289.         );
  2290.  
  2291.     HRESULT Reset();
  2292.  
  2293.     HRESULT Clone(
  2294.         [out]   IEnumSTATPROPSTG **     ppenum
  2295.         );
  2296. }
  2297.  
  2298.  
  2299. [
  2300.     object,
  2301.     uuid(0000013B-0000-0000-C000-000000000046),
  2302.     pointer_default(unique)
  2303. ]
  2304.  
  2305. interface IEnumSTATPROPSETSTG : IUnknown
  2306. {
  2307.  
  2308.     typedef [unique] IEnumSTATPROPSETSTG * LPENUMSTATPROPSETSTG;
  2309.  
  2310.     [local]
  2311.     HRESULT Next(
  2312.         [in]    ULONG                   celt,
  2313.         [in]    STATPROPSETSTG *        rgelt,
  2314.         [out]   ULONG *                 pceltFetched
  2315.         );
  2316.  
  2317.     [call_as(Next)]
  2318.     HRESULT RemoteNext(
  2319.         [in]    ULONG                   celt,
  2320.         [out, size_is(celt), length_is(*pceltFetched)]
  2321.                 STATPROPSETSTG *        rgelt,
  2322.         [out]   ULONG *                 pceltFetched
  2323.         );
  2324.  
  2325.     HRESULT Skip(
  2326.         [in]    ULONG                   celt
  2327.         );
  2328.  
  2329.     HRESULT Reset();
  2330.  
  2331.     HRESULT Clone(
  2332.         [out]   IEnumSTATPROPSETSTG **  ppenum
  2333.         );
  2334. }
  2335.  
  2336. cpp_quote("WINOLEAPI PropVariantCopy ( PROPVARIANT * pvarDest, const PROPVARIANT * pvarSrc );")
  2337. cpp_quote("WINOLEAPI PropVariantClear ( PROPVARIANT * pvar );")
  2338. cpp_quote("#   ifdef __cplusplus")
  2339. cpp_quote("inline void PropVariantInit ( PROPVARIANT * pvar )")
  2340. cpp_quote("{")
  2341. cpp_quote("    memset ( pvar, 0, sizeof(PROPVARIANT) );")
  2342. cpp_quote("}")
  2343. cpp_quote("#   else")
  2344. cpp_quote("#   define PropVariantInit(pvar) memset ( pvar, 0, sizeof(PROPVARIANT) )")
  2345. cpp_quote("#   endif")
  2346. cpp_quote("WINOLEAPI FreePropVariantArray ( ULONG cVariants, PROPVARIANT * rgvars );")
  2347.  
  2348.  
  2349. /****************************************************************************
  2350.  *  Connection Point Interfaces
  2351.  ****************************************************************************/
  2352. [
  2353.     object,
  2354.     uuid(B196B286-BAB4-101A-B69C-00AA00341D07),
  2355.     pointer_default(unique)
  2356. ]
  2357. interface IConnectionPoint : IUnknown
  2358. {
  2359.     typedef IConnectionPoint * PCONNECTIONPOINT;
  2360.     typedef IConnectionPoint * LPCONNECTIONPOINT;
  2361.  
  2362.     HRESULT GetConnectionInterface
  2363.     (
  2364.         [out]           IID * piid
  2365.     );
  2366.  
  2367.     HRESULT GetConnectionPointContainer
  2368.     (
  2369.         [out]           IConnectionPointContainer ** ppCPC
  2370.     );
  2371.  
  2372.     HRESULT Advise
  2373.     (
  2374.         [in]    IUnknown * pUnkSink,
  2375.         [out]   DWORD *    pdwCookie
  2376.     );
  2377.  
  2378.     HRESULT Unadvise
  2379.     (
  2380.         [in]    DWORD dwCookie
  2381.     );
  2382.  
  2383.     HRESULT EnumConnections
  2384.     (
  2385.         [out]   IEnumConnections ** ppEnum
  2386.     );
  2387. }
  2388.  
  2389. [
  2390.     object,
  2391.     uuid(B196B284-BAB4-101A-B69C-00AA00341D07),
  2392.     pointer_default(unique)
  2393. ]
  2394. interface IConnectionPointContainer : IUnknown
  2395. {
  2396.     typedef IConnectionPointContainer * PCONNECTIONPOINTCONTAINER;
  2397.     typedef IConnectionPointContainer * LPCONNECTIONPOINTCONTAINER;
  2398.  
  2399.     HRESULT EnumConnectionPoints
  2400.     (
  2401.         [out]   IEnumConnectionPoints ** ppEnum
  2402.     );
  2403.  
  2404.     HRESULT FindConnectionPoint
  2405.     (
  2406.         [in]    REFIID riid,
  2407.         [out]   IConnectionPoint ** ppCP
  2408.     );
  2409. }
  2410.  
  2411.  
  2412. [
  2413.     object,
  2414.     uuid(B196B287-BAB4-101A-B69C-00AA00341D07),
  2415.     pointer_default(unique)
  2416. ]
  2417. interface IEnumConnections : IUnknown
  2418. {
  2419.     typedef IEnumConnections * PENUMCONNECTIONS;
  2420.     typedef IEnumConnections * LPENUMCONNECTIONS;
  2421.  
  2422.     typedef struct tagCONNECTDATA
  2423.     {
  2424.         IUnknown *  pUnk;
  2425.         DWORD       dwCookie;
  2426.     } CONNECTDATA;
  2427.  
  2428.     typedef struct tagCONNECTDATA * PCONNECTDATA;
  2429.     typedef struct tagCONNECTDATA * LPCONNECTDATA;
  2430.  
  2431.     [local]
  2432.     HRESULT Next(
  2433.         [in]    ULONG           cConnections,
  2434.         [out]   CONNECTDATA *   rgcd,
  2435.         [out]   ULONG *         lpcFetched
  2436.     );
  2437.  
  2438.     [call_as(Next)]
  2439.     HRESULT RemoteNext(
  2440.         [in]                            ULONG           cConnections,
  2441.         [out,
  2442.          size_is(cConnections),
  2443.          length_is(*lpcFetched)]        CONNECTDATA *   rgcd,
  2444.         [out]                           ULONG *         lpcFetched
  2445.     );
  2446.  
  2447.     HRESULT Skip
  2448.     (
  2449.         [in]    ULONG cConnections
  2450.     );
  2451.  
  2452.     HRESULT Reset
  2453.     (
  2454.         void
  2455.     );
  2456.  
  2457.     HRESULT Clone
  2458.     (
  2459.         [out]   IEnumConnections ** ppEnum
  2460.     );
  2461. }
  2462.  
  2463.  
  2464. [
  2465.     object,
  2466.     uuid(B196B285-BAB4-101A-B69C-00AA00341D07),
  2467.     pointer_default(unique)
  2468. ]
  2469. interface IEnumConnectionPoints : IUnknown
  2470. {
  2471.     typedef IEnumConnectionPoints * PENUMCONNECTIONPOINTS;
  2472.     typedef IEnumConnectionPoints * LPENUMCONNECTIONPOINTS;
  2473.  
  2474.     [local]
  2475.     HRESULT Next(
  2476.         [in]    ULONG               cConnections,
  2477.         [out]   IConnectionPoint ** rgpcn,
  2478.         [out]   ULONG *             lpcFetched
  2479.     );
  2480.  
  2481.     [call_as(Next)]
  2482.     HRESULT RemoteNext(
  2483.         [in]                        ULONG               cConnections,
  2484.         [out,
  2485.          size_is(cConnections),
  2486.          length_is(*lpcFetched)]    IConnectionPoint ** rgpcn,
  2487.         [out]                       ULONG *             lpcFetched
  2488.     );
  2489.  
  2490.     HRESULT Skip
  2491.     (
  2492.         [in]    ULONG   cConnections
  2493.     );
  2494.  
  2495.     HRESULT Reset
  2496.     (
  2497.         void
  2498.     );
  2499.  
  2500.     HRESULT Clone
  2501.     (
  2502.         [out]   IEnumConnectionPoints **    ppEnum
  2503.     );
  2504. }
  2505.  
  2506.  
  2507.  
  2508. [
  2509.     local,
  2510.     object,
  2511.     uuid(0000013D-0000-0000-C000-000000000046)
  2512. ]
  2513. interface IClientSecurity : IUnknown
  2514. {
  2515.  
  2516.     typedef struct tagSOLE_AUTHENTICATION_SERVICE
  2517.     {
  2518.         DWORD    dwAuthnSvc;
  2519.         DWORD    dwAuthzSvc;
  2520.         OLECHAR *pPrincipalName;
  2521.         HRESULT  hr;
  2522.     } SOLE_AUTHENTICATION_SERVICE;
  2523.  
  2524.     typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;
  2525.  
  2526.     typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES
  2527.     {
  2528.         EOAC_NONE        = 0x0,
  2529.         EOAC_MUTUAL_AUTH = 0x1,
  2530.         EOAC_SECURE_REFS = 0x2
  2531.     } EOLE_AUTHENTICATION_CAPABILITIES;
  2532.  
  2533.     HRESULT QueryBlanket
  2534.     (
  2535.         [in]  IUnknown                *pProxy,
  2536.         [out] DWORD                   *pAuthnSvc,
  2537.         [out] DWORD                   *pAuthzSvc,
  2538.         [out] OLECHAR                **pServerPrincName,
  2539.         [out] DWORD                   *pAuthnLevel,
  2540.         [out] DWORD                   *pImpLevel,
  2541.         [out] void                   **pAuthInfo,
  2542.         [out] DWORD                   *pCapabilites
  2543.     );
  2544.  
  2545.     HRESULT SetBlanket
  2546.     (
  2547.         [in] IUnknown                 *pProxy,
  2548.         [in] DWORD                     AuthnSvc,
  2549.         [in] DWORD                     AuthzSvc,
  2550.         [in] OLECHAR                  *pServerPrincName,
  2551.         [in] DWORD                     AuthnLevel,
  2552.         [in] DWORD                     ImpLevel,
  2553.         [in] void                     *pAuthInfo,
  2554.         [in] DWORD                     Capabilities
  2555.     );
  2556.  
  2557.     HRESULT CopyProxy
  2558.     (
  2559.         [in]  IUnknown  *pProxy,
  2560.         [out] IUnknown **ppCopy
  2561.     );
  2562. }
  2563.  
  2564. [
  2565.     local,
  2566.     object,
  2567.     uuid(0000013E-0000-0000-C000-000000000046)
  2568. ]
  2569. interface IServerSecurity : IUnknown
  2570. {
  2571.     HRESULT QueryBlanket
  2572.     (
  2573.         [out] DWORD    *pAuthnSvc,
  2574.         [out] DWORD    *pAuthzSvc,
  2575.         [out] OLECHAR **pServerPrincName,
  2576.         [out] DWORD    *pAuthnLevel,
  2577.         [out] DWORD    *pImpLevel,
  2578.         [out] void    **pPrivs,
  2579.         [out] DWORD    *pCapabilities
  2580.     );
  2581.  
  2582.     HRESULT ImpersonateClient();
  2583.  
  2584.     HRESULT RevertToSelf();
  2585.  
  2586.     BOOL IsImpersonating();
  2587. }
  2588.  
  2589. [
  2590.     object,
  2591.     uuid(00000140-0000-0000-C000-000000000046)
  2592. ]
  2593.  
  2594. interface IClassActivator : IUnknown
  2595. {
  2596.     HRESULT GetClassObject(
  2597.         [in] REFCLSID rclsid,
  2598.         [in] DWORD dwClassContext,
  2599.         [in] LCID locale,
  2600.         [in] REFIID riid,
  2601.         [out, iid_is(riid)] void **ppv);
  2602. }
  2603.  
  2604.  
  2605. [
  2606.     local,
  2607.     object,
  2608.     uuid(99caf010-415e-11cf-8814-00aa00b569f5),
  2609.     pointer_default(unique)
  2610. ]
  2611.  
  2612. interface IFillLockBytes: IUnknown
  2613. {
  2614.  
  2615.     HRESULT FillAppend
  2616.     (
  2617.         [in] void const *pv,
  2618.         [in] ULONG cb,
  2619.         [out] ULONG *pcbWritten
  2620.     );
  2621.  
  2622.     HRESULT FillAt
  2623.     (
  2624.         [in] ULARGE_INTEGER ulOffset,
  2625.         [in] void const *pv,
  2626.         [in] ULONG cb,
  2627.         [out] ULONG *pcbWritten
  2628.     );
  2629.  
  2630.     HRESULT SetFillSize
  2631.     (
  2632.         [in] ULARGE_INTEGER ulSize
  2633.     );
  2634.  
  2635.     HRESULT Terminate
  2636.     (
  2637.         [in] BOOL bCanceled
  2638.     );
  2639. }
  2640.  
  2641.  
  2642. [
  2643.     local,
  2644.     object,
  2645.     uuid(a9d758a0-4617-11cf-95fc-00aa00680db4),
  2646.     pointer_default(unique)
  2647. ]
  2648.  
  2649. interface IProgressNotify: IUnknown
  2650. {
  2651.  
  2652.  
  2653.     HRESULT OnProgress (
  2654.     [in]        DWORD           dwProgressCurrent,
  2655.     [in]        DWORD           dwProgressMaximum,
  2656.     [in]        BOOL            fAccurate,
  2657.     [in]        BOOL            fOwner
  2658.     );
  2659.  
  2660. }
  2661.  
  2662. [
  2663.     local,
  2664.     object,
  2665.     uuid(0e6d4d90-6738-11cf-9608-00aa00680db4),
  2666.     pointer_default(unique)
  2667. ]
  2668.  
  2669.  
  2670. interface ILayoutStorage: IUnknown
  2671. {
  2672.  
  2673.  
  2674.     typedef struct tagStorageLayout 
  2675.     {    DWORD             LayoutType;
  2676.         OLECHAR            *pwcsElementName;
  2677.         LARGE_INTEGER   cOffset;
  2678.         LARGE_INTEGER    cBytes;
  2679.     } StorageLayout;
  2680.  
  2681.  
  2682.     HRESULT __stdcall LayoutScript(
  2683.     [in]    StorageLayout    *pStorageLayout,
  2684.     [in]    DWORD            nEntries,
  2685.     [in]    DWORD            glfInterleavedFlag);
  2686.  
  2687.     HRESULT __stdcall BeginMonitor(void);
  2688.  
  2689.     HRESULT __stdcall EndMonitor(void);
  2690.  
  2691.     HRESULT __stdcall ReLayoutDocfile(
  2692.     [in]    OLECHAR            *pwcsNewDfName);
  2693.  
  2694.  
  2695. }
  2696.  
  2697.