home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / sdk / winh / objidl.idl < prev    next >
Encoding:
Text File  |  1995-07-11  |  37.5 KB  |  1,746 lines

  1. //+-------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright (C) Microsoft Corporation, 1992 - 1995.
  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.  
  25. /****************************************************************************
  26.  *  Component Object Interfaces
  27.  ****************************************************************************/
  28.  
  29. [
  30.     local,
  31.     object,
  32.     uuid(00000003-0000-0000-C000-000000000046)
  33. ]
  34.  
  35. interface IMarshal : IUnknown
  36. {
  37.  
  38. cpp_quote("//+-------------------------------------------------------------------------")
  39. cpp_quote("//")
  40. cpp_quote("//  Microsoft Windows")
  41. cpp_quote("//  Copyright (C) Microsoft Corporation, 1992 - 1995.")
  42. cpp_quote("//")
  43. cpp_quote("//--------------------------------------------------------------------------")
  44.  
  45.     typedef [unique] IMarshal *LPMARSHAL;
  46.  
  47.     HRESULT GetUnmarshalClass
  48.     (
  49.         [in] REFIID riid,
  50.         [in, unique] void *pv,
  51.         [in] DWORD dwDestContext,
  52.         [in, unique] void *pvDestContext,
  53.         [in] DWORD mshlflags,
  54.         [out] CLSID *pCid
  55.     );
  56.  
  57.     HRESULT GetMarshalSizeMax
  58.     (
  59.         [in] REFIID riid,
  60.         [in, unique] void *pv,
  61.         [in] DWORD dwDestContext,
  62.         [in, unique] void *pvDestContext,
  63.         [in] DWORD mshlflags,
  64.         [out] DWORD *pSize
  65.     );
  66.  
  67.     HRESULT MarshalInterface
  68.     (
  69.         [in, unique] IStream *pStm,
  70.         [in] REFIID riid,
  71.         [in, unique] void *pv,
  72.         [in] DWORD dwDestContext,
  73.         [in, unique] void *pvDestContext,
  74.         [in] DWORD mshlflags
  75.     );
  76.  
  77.     HRESULT UnmarshalInterface
  78.     (
  79.         [in, unique] IStream *pStm,
  80.         [in] REFIID riid,
  81.         [out] void **ppv
  82.     );
  83.  
  84.     HRESULT ReleaseMarshalData
  85.     (
  86.         [in, unique] IStream *pStm
  87.     );
  88.  
  89.     HRESULT DisconnectObject
  90.     (
  91.         [in] DWORD dwReserved
  92.     );
  93. }
  94.  
  95. [
  96.     local,
  97.     object,
  98.     uuid(00000002-0000-0000-C000-000000000046)
  99. ]
  100.  
  101. interface IMalloc : IUnknown
  102. {
  103.  
  104.     typedef [unique] IMalloc *LPMALLOC;
  105.  
  106.     void *Alloc([in] ULONG cb);
  107.  
  108.     void *Realloc ([in] void *pv,
  109.                    [in] ULONG cb);
  110.  
  111.     void Free([in] void *pv);
  112.  
  113.     ULONG GetSize([in] void *pv);
  114.  
  115.     int DidAlloc(void *pv);
  116.  
  117.     void HeapMinimize(void);
  118. }
  119.  
  120. [
  121.     local,
  122.     object,
  123.     uuid(0000001d-0000-0000-C000-000000000046)
  124. ]
  125.  
  126. interface IMallocSpy : IUnknown
  127. {
  128.  
  129.     typedef [unique] IMallocSpy *LPMALLOCSPY;
  130.  
  131.     ULONG PreAlloc
  132.     (
  133.         [in] ULONG cbRequest
  134.     );
  135.  
  136.     void  *PostAlloc
  137.     (
  138.         [in] void *pActual
  139.     );
  140.  
  141.     void  *PreFree
  142.     (
  143.         [in] void *pRequest,
  144.         [in] BOOL  fSpyed
  145.     );
  146.  
  147.     void  PostFree
  148.     (
  149.         [in] BOOL  fSpyed
  150.     );
  151.  
  152.     ULONG PreRealloc
  153.     (
  154.         [in] void   *pRequest,
  155.         [in] ULONG   cbRequest,
  156.         [out] void **ppNewRequest,
  157.         [in] BOOL    fSpyed
  158.     );
  159.  
  160.     void  *PostRealloc
  161.     (
  162.         [in] void *pActual,
  163.         [in] BOOL  fSpyed
  164.     );
  165.  
  166.     void  *PreGetSize
  167.     (
  168.         [in] void *pRequest,
  169.         [in] BOOL  fSpyed
  170.     );
  171.  
  172.     ULONG PostGetSize
  173.     (
  174.         [in] ULONG cbActual,
  175.         [in] BOOL  fSpyed
  176.     );
  177.  
  178.     void  *PreDidAlloc
  179.     (
  180.         [in] void *pRequest,
  181.         [in] BOOL  fSpyed
  182.     );
  183.  
  184.     int   PostDidAlloc
  185.     (
  186.         [in] void *pRequest,
  187.         [in] BOOL  fSpyed,
  188.         [in] int   fActual
  189.     );
  190.  
  191.     void  PreHeapMinimize(void);
  192.  
  193.     void  PostHeapMinimize(void);
  194. }
  195.  
  196. [
  197.     local,
  198.     object,
  199.     uuid(00000018-0000-0000-C000-000000000046)
  200. ]
  201.  
  202. interface IStdMarshalInfo : IUnknown
  203. {
  204.  
  205.     typedef [unique] IStdMarshalInfo * LPSTDMARSHALINFO;
  206.  
  207.     HRESULT GetClassForHandler
  208.     (
  209.         [in] DWORD dwDestContext,
  210.         [in, unique] void *pvDestContext,
  211.         [out] CLSID *pClsid
  212.     );
  213. }
  214.  
  215. [
  216.     object,
  217.     local,
  218.     uuid(00000019-0000-0000-C000-000000000046)
  219. ]
  220.  
  221. interface IExternalConnection : IUnknown
  222. {
  223.  
  224.     typedef [unique] IExternalConnection* LPEXTERNALCONNECTION;
  225.  
  226.  
  227.     // bit flags for IExternalConnection
  228.     typedef enum tagEXTCONN
  229.     {
  230.         EXTCONN_STRONG      = 0x0001,   // strong connection
  231.         EXTCONN_WEAK        = 0x0002,   // weak connection (table, container)
  232.         EXTCONN_CALLABLE    = 0x0004,   // table .vs. callable
  233.     } EXTCONN;
  234.  
  235.     // *** IExternalConnection methods ***
  236.     DWORD AddConnection
  237.     (
  238.         [in] DWORD extconn,
  239.         [in] DWORD reserved
  240.     );
  241.  
  242.     DWORD ReleaseConnection
  243.     (
  244.         [in] DWORD extconn,
  245.         [in] DWORD reserved,
  246.         [in] BOOL  fLastReleaseCloses
  247.     );
  248. }
  249.  
  250.  
  251. [
  252.     object,
  253.     uuid(00000100-0000-0000-C000-000000000046),
  254.     pointer_default(unique)
  255. ]
  256.  
  257. interface IEnumUnknown : IUnknown
  258. {
  259.  
  260.     typedef [unique] IEnumUnknown *LPENUMUNKNOWN;
  261.  
  262.     [local]
  263.     HRESULT __stdcall Next(
  264.         [in] ULONG celt,
  265.         [out] IUnknown **rgelt,
  266.         [out] ULONG *pceltFetched);
  267.  
  268.     [call_as(Next)]
  269.     HRESULT __stdcall RemoteNext(
  270.         [in] ULONG celt,
  271.         [out, size_is(celt), length_is(*pceltFetched)]
  272.         IUnknown **rgelt,
  273.         [out] ULONG *pceltFetched);
  274.  
  275.     HRESULT Skip(
  276.         [in] ULONG celt);
  277.  
  278.     HRESULT Reset();
  279.  
  280.     HRESULT Clone(
  281.         [out] IEnumUnknown **ppenum);
  282. }
  283.  
  284.  
  285. /****************************************************************************
  286.  *  Binding Interfaces
  287.  ****************************************************************************/
  288.  
  289. [
  290.     object,
  291.     uuid(0000000e-0000-0000-C000-000000000046),
  292.     pointer_default(unique)
  293. ]
  294.  
  295. interface IBindCtx : IUnknown
  296. {
  297.  
  298.     typedef [unique] IBindCtx *LPBC;
  299.  
  300.     typedef [unique] IBindCtx *LPBINDCTX;
  301.  
  302.     typedef struct tagBIND_OPTS {
  303.     DWORD       cbStruct;       //  sizeof(BIND_OPTS)
  304.     DWORD       grfFlags;
  305.     DWORD       grfMode;
  306.     DWORD       dwTickCountDeadline;
  307.     } BIND_OPTS, * LPBIND_OPTS;
  308.  
  309.  
  310.     typedef enum tagBIND_FLAGS
  311.     {
  312.         BIND_MAYBOTHERUSER = 1,
  313.         BIND_JUSTTESTEXISTENCE = 2
  314.     } BIND_FLAGS;
  315.  
  316.     HRESULT RegisterObjectBound
  317.     (
  318.         [in, unique] IUnknown *punk
  319.     );
  320.  
  321.     HRESULT RevokeObjectBound
  322.     (
  323.         [in, unique] IUnknown *punk
  324.     );
  325.  
  326.     HRESULT ReleaseBoundObjects
  327.     (
  328.         void
  329.     );
  330.  
  331.     HRESULT SetBindOptions
  332.     (
  333.         [in] BIND_OPTS *pbindopts
  334.     );
  335.  
  336.     HRESULT GetBindOptions
  337.     (
  338.         [in,out] BIND_OPTS *pbindopts
  339.     );
  340.  
  341.     HRESULT GetRunningObjectTable
  342.     (
  343.         [out] IRunningObjectTable **pprot
  344.     );
  345.  
  346.     HRESULT RegisterObjectParam(
  347.         [in] LPOLESTR pszKey,
  348.         [in, unique] IUnknown *punk
  349.     );
  350.  
  351.     HRESULT GetObjectParam(
  352.         [in] LPOLESTR pszKey,
  353.         [out] IUnknown **ppunk
  354.     );
  355.  
  356.     HRESULT EnumObjectParam
  357.     (
  358.         [out] IEnumString **ppenum
  359.     );
  360.  
  361.     HRESULT RevokeObjectParam
  362.     (
  363.         [in] LPOLESTR pszKey
  364.     );
  365. }
  366.  
  367. [
  368.     object,
  369.     uuid(00000102-0000-0000-C000-000000000046),
  370.     pointer_default(unique)
  371. ]
  372.  
  373. interface IEnumMoniker : IUnknown
  374. {
  375.  
  376.     typedef [unique] IEnumMoniker *LPENUMMONIKER;
  377.  
  378.     [local]
  379.     HRESULT __stdcall Next(
  380.         [in] ULONG celt,
  381.         [out] IMoniker **rgelt,
  382.         [out] ULONG *pceltFetched);
  383.  
  384.     [call_as(Next)]
  385.     HRESULT __stdcall RemoteNext(
  386.         [in] ULONG celt,
  387.         [out, size_is(celt), length_is(*pceltFetched)]
  388.         IMoniker **rgelt,
  389.         [out] ULONG *pceltFetched);
  390.  
  391.  
  392.     HRESULT Skip(
  393.         [in] ULONG celt);
  394.  
  395.     HRESULT Reset();
  396.  
  397.     HRESULT Clone(
  398.         [out] IEnumMoniker **ppenum);
  399. }
  400.  
  401. [
  402.     local,
  403.     object,
  404.     uuid(00000126-0000-0000-C000-000000000046)
  405. ]
  406. interface IRunnableObject : IUnknown
  407. {
  408.  
  409.     typedef [unique] IRunnableObject *LPRUNNABLEOBJECT;
  410.  
  411.     HRESULT GetRunningClass(
  412.         [out] LPCLSID lpClsid);
  413.  
  414.     HRESULT Run(
  415.         [in] LPBINDCTX pbc);
  416.  
  417.     BOOL IsRunning();
  418.  
  419.     HRESULT LockRunning(
  420.         [in] BOOL fLock,
  421.         [in] BOOL fLastUnlockCloses);
  422.  
  423.     HRESULT SetContainedObject(
  424.         [in] BOOL fContained);
  425. }
  426.  
  427. [
  428.     object,
  429.     uuid(00000010-0000-0000-C000-000000000046)
  430. ]
  431.  
  432. interface IRunningObjectTable : IUnknown
  433. {
  434.  
  435.     typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE;
  436.  
  437.     HRESULT Register
  438.     (
  439.         [in] DWORD grfFlags,
  440.         [in, unique] IUnknown *punkObject,
  441.         [in, unique] IMoniker *pmkObjectName,
  442.         [out] DWORD *pdwRegister
  443.     );
  444.  
  445.     HRESULT Revoke
  446.     (
  447.         [in] DWORD dwRegister
  448.     );
  449.  
  450.     HRESULT IsRunning
  451.     (
  452.         [in, unique] IMoniker *pmkObjectName
  453.     );
  454.  
  455.     HRESULT GetObject
  456.     (
  457.         [in, unique] IMoniker *pmkObjectName,
  458.         [out] IUnknown **ppunkObject
  459.     );
  460.  
  461.     HRESULT NoteChangeTime
  462.     (
  463.         [in] DWORD dwRegister,
  464.         [in] FILETIME *pfiletime
  465.     );
  466.  
  467.     HRESULT GetTimeOfLastChange
  468.     (
  469.         [in, unique] IMoniker *pmkObjectName,
  470.         [out] FILETIME *pfiletime
  471.     );
  472.  
  473.     HRESULT EnumRunning
  474.     (
  475.         [out] IEnumMoniker **ppenumMoniker
  476.     );
  477.  
  478. }
  479.  
  480. [
  481.     object,
  482.     uuid(0000010c-0000-0000-C000-000000000046)
  483. ]
  484.  
  485. interface IPersist : IUnknown
  486. {
  487.  
  488.     typedef [unique] IPersist *LPPERSIST;
  489.  
  490.     HRESULT GetClassID
  491.     (
  492.         [out] CLSID *pClassID
  493.     );
  494. }
  495.  
  496. [
  497.     object,
  498.     uuid(00000109-0000-0000-C000-000000000046),
  499.     pointer_default(unique)
  500. ]
  501.  
  502. interface IPersistStream : IPersist
  503. {
  504.  
  505.     typedef [unique] IPersistStream *LPPERSISTSTREAM;
  506.  
  507.     HRESULT IsDirty
  508.     (
  509.         void
  510.     );
  511.  
  512.     HRESULT Load
  513.     (
  514.         [in, unique] IStream *pStm
  515.     );
  516.  
  517.     HRESULT Save
  518.     (
  519.         [in, unique] IStream *pStm,
  520.         [in] BOOL fClearDirty
  521.     );
  522.  
  523.     HRESULT GetSizeMax
  524.     (
  525.         [out] ULARGE_INTEGER *pcbSize
  526.     );
  527.  
  528. }
  529.  
  530. [
  531.     object,
  532.     uuid(0000000f-0000-0000-C000-000000000046),
  533.     pointer_default(unique)
  534. ]
  535.  
  536. interface IMoniker : IPersistStream
  537. {
  538.  
  539.     typedef [unique] IMoniker *LPMONIKER;
  540.  
  541.     // system moniker types; returned from IsSystemMoniker.
  542.     typedef enum tagMKSYS
  543.     {
  544.         MKSYS_NONE = 0,
  545.         MKSYS_GENERICCOMPOSITE = 1,
  546.         MKSYS_FILEMONIKER = 2,
  547.         MKSYS_ANTIMONIKER = 3,
  548.         MKSYS_ITEMMONIKER = 4,
  549.         MKSYS_POINTERMONIKER = 5
  550.     }MKSYS;
  551.  
  552.  
  553.     typedef [v1_enum] enum tagMKREDUCE
  554.     {
  555.         MKRREDUCE_ONE           =   3<<16,
  556.  
  557.         MKRREDUCE_TOUSER        =   2<<16,
  558.         MKRREDUCE_THROUGHUSER   =   1<<16,
  559.         MKRREDUCE_ALL           =   0
  560.     } MKRREDUCE;
  561.  
  562.  
  563.     [local]
  564.     HRESULT __stdcall BindToObject(
  565.         [in, unique] IBindCtx *pbc,
  566.         [in, unique] IMoniker *pmkToLeft,
  567.         [in] REFIID riidResult,
  568.         [out] void **ppvResult);
  569.  
  570.     [call_as(BindToObject)]
  571.     HRESULT __stdcall RemoteBindToObject(
  572.         [in, unique] IBindCtx *pbc,
  573.         [in, unique] IMoniker *pmkToLeft,
  574.         [in] REFIID riidResult,
  575.         [out, iid_is(riidResult)] IUnknown **ppvResult);
  576.  
  577.     [local]
  578.     HRESULT __stdcall BindToStorage(
  579.         [in, unique] IBindCtx *pbc,
  580.         [in, unique] IMoniker *pmkToLeft,
  581.         [in] REFIID riid,
  582.         [out] void **ppvObj);
  583.  
  584.     [call_as(BindToStorage)]
  585.     HRESULT __stdcall RemoteBindToStorage(
  586.         [in, unique] IBindCtx *pbc,
  587.         [in, unique] IMoniker *pmkToLeft,
  588.         [in] REFIID riid,
  589.         [out, iid_is(riid)] IUnknown **ppvObj);
  590.  
  591.     HRESULT Reduce(
  592.         [in, unique] IBindCtx *pbc,
  593.         [in] DWORD dwReduceHowFar,
  594.         [in, out, unique] IMoniker **ppmkToLeft,
  595.         [out] IMoniker **ppmkReduced);
  596.  
  597.     HRESULT ComposeWith(
  598.         [in, unique] IMoniker *pmkRight,
  599.         [in] BOOL fOnlyIfNotGeneric,
  600.         [out] IMoniker **ppmkComposite);
  601.  
  602.     HRESULT Enum(
  603.         [in] BOOL fForward,
  604.         [out] IEnumMoniker **ppenumMoniker);
  605.  
  606.     HRESULT IsEqual(
  607.         [in, unique] IMoniker *pmkOtherMoniker);
  608.  
  609.     HRESULT Hash(
  610.         [out] DWORD *pdwHash);
  611.  
  612.     HRESULT IsRunning(
  613.         [in, unique] IBindCtx *pbc,
  614.         [in, unique] IMoniker *pmkToLeft,
  615.         [in, unique] IMoniker *pmkNewlyRunning);
  616.  
  617.     HRESULT GetTimeOfLastChange(
  618.         [in, unique] IBindCtx *pbc,
  619.         [in, unique] IMoniker *pmkToLeft,
  620.         [out] FILETIME *pFileTime);
  621.  
  622.     HRESULT Inverse(
  623.         [out] IMoniker **ppmk);
  624.  
  625.     HRESULT CommonPrefixWith(
  626.         [in, unique] IMoniker *pmkOther,
  627.         [out] IMoniker **ppmkPrefix);
  628.  
  629.     HRESULT RelativePathTo(
  630.         [in, unique] IMoniker *pmkOther,
  631.         [out] IMoniker **ppmkRelPath);
  632.  
  633.     HRESULT GetDisplayName(
  634.         [in, unique] IBindCtx *pbc,
  635.         [in, unique] IMoniker *pmkToLeft,
  636.         [out] LPOLESTR *ppszDisplayName);
  637.  
  638.     HRESULT ParseDisplayName(
  639.         [in, unique] IBindCtx *pbc,
  640.         [in, unique] IMoniker *pmkToLeft,
  641.         [in] LPOLESTR pszDisplayName,
  642.         [out] ULONG *pchEaten,
  643.         [out] IMoniker **ppmkOut);
  644.  
  645.     HRESULT IsSystemMoniker(
  646.         [out] DWORD *pdwMksys);
  647.  
  648. }
  649.  
  650. [
  651.     object,
  652.     uuid(f29f6bc0-5021-11ce-aa15-00006901293f),
  653.     pointer_default(unique)
  654. ]
  655.  
  656. interface IROTData : IUnknown
  657. {
  658.     HRESULT GetComparisonData(
  659.         [out, size_is(cbMax)] byte *pbData,
  660.         [in]  ULONG cbMax,
  661.         [out] ULONG *pcbData);
  662. }
  663.  
  664. [
  665.     object,
  666.     uuid(00000101-0000-0000-C000-000000000046),
  667.     pointer_default(unique)
  668. ]
  669.  
  670. interface IEnumString : IUnknown
  671. {
  672.  
  673.     typedef [unique] IEnumString *LPENUMSTRING;
  674.  
  675.     [local]
  676.     HRESULT __stdcall Next(
  677.         [in] ULONG celt,
  678.         [out] LPOLESTR *rgelt,
  679.         [out] ULONG *pceltFetched);
  680.  
  681.     [call_as(Next)]
  682.     HRESULT __stdcall RemoteNext(
  683.         [in] ULONG celt,
  684.         [out, size_is(celt), length_is(*pceltFetched)]
  685.         LPOLESTR *rgelt,
  686.         [out] ULONG *pceltFetched);
  687.  
  688.  
  689.     HRESULT Skip(
  690.         [in] ULONG celt);
  691.  
  692.     HRESULT Reset();
  693.  
  694.     HRESULT Clone(
  695.         [out] IEnumString **ppenum);
  696. }
  697.  
  698.  
  699. /****************************************************************************
  700.  *  Structured Storage Interfaces
  701.  ****************************************************************************/
  702.  
  703. [
  704.     object,
  705.     uuid(0000000c-0000-0000-C000-000000000046),
  706.     pointer_default(unique)
  707. ]
  708.  
  709. interface IStream : IUnknown
  710. {
  711.  
  712.     typedef [unique] IStream *LPSTREAM;
  713.  
  714.     /* Storage stat buffer */
  715.  
  716.     typedef struct tagSTATSTG
  717.     {
  718.         LPOLESTR pwcsName;
  719.         DWORD type;
  720.         ULARGE_INTEGER cbSize;
  721.         FILETIME mtime;
  722.         FILETIME ctime;
  723.         FILETIME atime;
  724.         DWORD grfMode;
  725.         DWORD grfLocksSupported;
  726.         CLSID clsid;
  727.         DWORD grfStateBits;
  728.     DWORD reserved;
  729.     } STATSTG;
  730.  
  731.  
  732.     /* Storage element types */
  733.     typedef enum tagSTGTY
  734.     {
  735.         STGTY_STORAGE   = 1,
  736.         STGTY_STREAM    = 2,
  737.         STGTY_LOCKBYTES = 3,
  738.         STGTY_PROPERTY  = 4
  739.     } STGTY;
  740.  
  741.     typedef enum tagSTREAM_SEEK
  742.     {
  743.         STREAM_SEEK_SET = 0,
  744.         STREAM_SEEK_CUR = 1,
  745.         STREAM_SEEK_END = 2
  746.     } STREAM_SEEK;
  747.  
  748.     typedef enum tagLOCKTYPE
  749.     {
  750.         LOCK_WRITE      = 1,
  751.         LOCK_EXCLUSIVE  = 2,
  752.         LOCK_ONLYONCE   = 4
  753.     } LOCKTYPE;
  754.  
  755.     [local]
  756.     HRESULT __stdcall Read(
  757.         [out] void *pv,
  758.         [in] ULONG cb,
  759.         [out] ULONG *pcbRead);
  760.  
  761.     [call_as(Read)]
  762.     HRESULT __stdcall RemoteRead(
  763.         [out, size_is(cb), length_is(*pcbRead)]
  764.         byte *pv,
  765.         [in] ULONG cb,
  766.         [out] ULONG *pcbRead);
  767.  
  768.     [local]
  769.     HRESULT __stdcall Write(
  770.         [in, size_is(cb)] void const *pv,
  771.         [in] ULONG cb,
  772.         [out] ULONG *pcbWritten);
  773.  
  774.     [call_as(Write)]
  775.     HRESULT __stdcall RemoteWrite(
  776.         [in, size_is(cb)] byte const *pv,
  777.         [in] ULONG cb,
  778.         [out] ULONG *pcbWritten);
  779.  
  780.     [local]
  781.     HRESULT __stdcall Seek(
  782.         [in] LARGE_INTEGER dlibMove,
  783.         [in] DWORD dwOrigin,
  784.         [out] ULARGE_INTEGER *plibNewPosition);
  785.  
  786.     [call_as(Seek)]
  787.     HRESULT __stdcall RemoteSeek(
  788.         [in] LARGE_INTEGER dlibMove,
  789.         [in] DWORD dwOrigin,
  790.         [out] ULARGE_INTEGER *plibNewPosition);
  791.  
  792.     HRESULT SetSize(
  793.         [in] ULARGE_INTEGER libNewSize);
  794.  
  795.     [local]
  796.     HRESULT __stdcall CopyTo(
  797.         [in, unique] IStream *pstm,
  798.         [in] ULARGE_INTEGER cb,
  799.         [out] ULARGE_INTEGER *pcbRead,
  800.         [out] ULARGE_INTEGER *pcbWritten);
  801.  
  802.     [call_as(CopyTo)]
  803.     HRESULT __stdcall RemoteCopyTo(
  804.         [in, unique] IStream *pstm,
  805.         [in] ULARGE_INTEGER cb,
  806.         [out] ULARGE_INTEGER *pcbRead,
  807.         [out] ULARGE_INTEGER *pcbWritten);
  808.  
  809.     HRESULT Commit(
  810.         [in] DWORD grfCommitFlags);
  811.  
  812.     HRESULT Revert();
  813.  
  814.     HRESULT LockRegion(
  815.         [in] ULARGE_INTEGER libOffset,
  816.         [in] ULARGE_INTEGER cb,
  817.         [in] DWORD dwLockType);
  818.  
  819.     HRESULT UnlockRegion(
  820.         [in] ULARGE_INTEGER libOffset,
  821.         [in] ULARGE_INTEGER cb,
  822.         [in] DWORD dwLockType);
  823.  
  824.     HRESULT Stat(
  825.         [out] STATSTG *pstatstg,
  826.         [in] DWORD grfStatFlag);
  827.  
  828.     HRESULT Clone(
  829.         [out] IStream **ppstm);
  830.  
  831. }
  832.  
  833. [
  834.     object,
  835.     uuid(0000000d-0000-0000-C000-000000000046),
  836.     pointer_default(unique)
  837. ]
  838.  
  839. interface IEnumSTATSTG : IUnknown
  840. {
  841.  
  842.     typedef [unique] IEnumSTATSTG *LPENUMSTATSTG;
  843.  
  844.     [local]
  845.     HRESULT __stdcall Next(
  846.         [in] ULONG celt,
  847.         [in] STATSTG *rgelt,
  848.         [out] ULONG *pceltFetched);
  849.  
  850.     [call_as(Next)]
  851.     HRESULT __stdcall RemoteNext(
  852.         [in] ULONG celt,
  853.         [out, size_is(celt), length_is(*pceltFetched)]
  854.         STATSTG *rgelt,
  855.         [out] ULONG *pceltFetched);
  856.  
  857.     HRESULT Skip(
  858.         [in] ULONG celt);
  859.  
  860.     HRESULT Reset();
  861.  
  862.     HRESULT Clone(
  863.         [out] IEnumSTATSTG **ppenum);
  864. }
  865.  
  866. [
  867.     object,
  868.     uuid(0000000b-0000-0000-C000-000000000046),
  869.     pointer_default(unique)
  870. ]
  871.  
  872. interface IStorage : IUnknown
  873. {
  874.  
  875.     typedef [unique] IStorage * LPSTORAGE;
  876.  
  877.     typedef struct tagRemSNB
  878.     {
  879.         unsigned long ulCntStr;
  880.         unsigned long ulCntChar;
  881.         [size_is(ulCntChar)] OLECHAR rgString[];
  882.     } RemSNB;
  883.  
  884.     typedef [transmit_as(RemSNB)] OLECHAR **SNB;
  885.  
  886.     HRESULT CreateStream(
  887.         [in, string] const OLECHAR *pwcsName,
  888.         [in] DWORD grfMode,
  889.         [in] DWORD reserved1,
  890.         [in] DWORD reserved2,
  891.         [out] IStream **ppstm);
  892.  
  893.     [local]
  894.     HRESULT __stdcall OpenStream(
  895.         [in, string] const OLECHAR *pwcsName,
  896.         [in, unique] void *reserved1,
  897.         [in] DWORD grfMode,
  898.         [in] DWORD reserved2,
  899.         [out] IStream **ppstm);
  900.  
  901.     [call_as(OpenStream)]
  902.     HRESULT __stdcall RemoteOpenStream(
  903.         [in, string] const OLECHAR *pwcsName,
  904.         [in] unsigned long cbReserved1,
  905.         [in, unique, size_is(cbReserved1)] byte *reserved1,
  906.         [in] DWORD grfMode,
  907.         [in] DWORD reserved2,
  908.         [out] IStream **ppstm);
  909.  
  910.     HRESULT CreateStorage(
  911.         [in, string] const OLECHAR *pwcsName,
  912.         [in] DWORD grfMode,
  913.         [in] DWORD dwStgFmt,
  914.         [in] DWORD reserved2,
  915.         [out] IStorage **ppstg);
  916.  
  917.     HRESULT OpenStorage(
  918.         [in, unique, string] const OLECHAR *pwcsName,
  919.         [in, unique] IStorage *pstgPriority,
  920.         [in] DWORD grfMode,
  921.         [in, unique] SNB snbExclude,
  922.         [in] DWORD reserved,
  923.         [out] IStorage **ppstg);
  924.  
  925.     HRESULT CopyTo(
  926.         [in] DWORD ciidExclude,
  927.         [in, unique, size_is(ciidExclude)] IID const *rgiidExclude,
  928.         [in, unique] SNB snbExclude,
  929.         [in, unique] IStorage *pstgDest);
  930.  
  931.     HRESULT MoveElementTo(
  932.         [in, string] const OLECHAR * pwcsName,
  933.         [in, unique] IStorage *pstgDest,
  934.         [in, string] const OLECHAR *pwcsNewName,
  935.         [in] DWORD grfFlags);
  936.  
  937.     HRESULT Commit(
  938.         [in] DWORD grfCommitFlags);
  939.  
  940.     HRESULT Revert();
  941.  
  942.     [local]
  943.     HRESULT __stdcall EnumElements(
  944.         [in] DWORD reserved1,
  945.         [in, unique, size_is(1)] void *reserved2,
  946.         [in] DWORD reserved3,
  947.         [out] IEnumSTATSTG **ppenum);
  948.  
  949.  
  950.     [call_as(EnumElements)]
  951.     HRESULT __stdcall RemoteEnumElements(
  952.         [in] DWORD reserved1,
  953.         [in] unsigned long cbReserved2,
  954.         [in, unique, size_is(cbReserved2)] byte *reserved2,
  955.         [in] DWORD reserved3,
  956.         [out] IEnumSTATSTG **ppenum);
  957.  
  958.     HRESULT DestroyElement(
  959.         [in, string] const OLECHAR *pwcsName);
  960.  
  961.     HRESULT RenameElement(
  962.         [in, string] const OLECHAR *pwcsOldName,
  963.         [in, string] const OLECHAR *pwcsNewName);
  964.  
  965.     HRESULT SetElementTimes(
  966.         [in, string] const OLECHAR *pwcsName,
  967.         [in] FILETIME const *pctime,
  968.         [in] FILETIME const *patime,
  969.         [in] FILETIME const *pmtime);
  970.  
  971.     HRESULT SetClass(
  972.         [in] REFCLSID clsid);
  973.  
  974.     HRESULT SetStateBits(
  975.         [in] DWORD grfStateBits,
  976.         [in] DWORD grfMask);
  977.  
  978.     HRESULT Stat(
  979.         [out] STATSTG *pstatstg,
  980.         [in] DWORD grfStatFlag);
  981. }
  982.  
  983. [
  984.     object,
  985.     uuid(0000010b-0000-0000-C000-000000000046),
  986.     pointer_default(unique)
  987. ]
  988.  
  989. interface IPersistFile : IPersist
  990. {
  991.  
  992.     typedef [unique] IPersistFile *LPPERSISTFILE;
  993.  
  994.     HRESULT IsDirty
  995.     (
  996.         void
  997.     );
  998.  
  999.     HRESULT Load
  1000.     (
  1001.         [in] LPCOLESTR pszFileName,
  1002.         [in] DWORD dwMode
  1003.     );
  1004.  
  1005.     HRESULT Save
  1006.     (
  1007.         [in, unique] LPCOLESTR pszFileName,
  1008.         [in] BOOL fRemember
  1009.     );
  1010.  
  1011.     HRESULT SaveCompleted
  1012.     (
  1013.         [in, unique] LPCOLESTR pszFileName
  1014.     );
  1015.  
  1016.     HRESULT GetCurFile
  1017.     (
  1018.         [out] LPOLESTR *ppszFileName
  1019.     );
  1020. }
  1021.  
  1022. [
  1023.     object,
  1024.     uuid(0000010a-0000-0000-C000-000000000046),
  1025.     pointer_default(unique)
  1026. ]
  1027.  
  1028. interface IPersistStorage : IPersist
  1029. {
  1030.  
  1031.     typedef [unique] IPersistStorage *LPPERSISTSTORAGE;
  1032.  
  1033.     HRESULT IsDirty
  1034.     (
  1035.         void
  1036.     );
  1037.  
  1038.     HRESULT InitNew
  1039.     (
  1040.         [in, unique] IStorage *pStg
  1041.     );
  1042.  
  1043.     HRESULT Load
  1044.     (
  1045.         [in, unique] IStorage *pStg
  1046.     );
  1047.  
  1048.     HRESULT Save
  1049.     (
  1050.         [in, unique] IStorage *pStgSave,
  1051.         [in] BOOL fSameAsLoad
  1052.     );
  1053.  
  1054.     HRESULT SaveCompleted
  1055.     (
  1056.         [in, unique] IStorage *pStgNew
  1057.     );
  1058.  
  1059.     HRESULT HandsOffStorage
  1060.     (
  1061.         void
  1062.     );
  1063. }
  1064.  
  1065. [
  1066.     object,
  1067.     uuid(0000000a-0000-0000-C000-000000000046),
  1068.     pointer_default(unique)
  1069. ]
  1070.  
  1071. interface ILockBytes : IUnknown
  1072. {
  1073.  
  1074.     typedef [unique] ILockBytes *LPLOCKBYTES;
  1075.  
  1076.     [local]
  1077.     HRESULT __stdcall ReadAt(
  1078.         [in] ULARGE_INTEGER ulOffset,
  1079.         [in] void *pv,
  1080.         [in] ULONG cb,
  1081.         [out] ULONG *pcbRead);
  1082.  
  1083.     [call_as(ReadAt)]
  1084.     HRESULT _stdcall RemoteReadAt(
  1085.         [in] ULARGE_INTEGER ulOffset,
  1086.         [out, size_is(cb), length_is(*pcbRead)]
  1087.         byte *pv,
  1088.         [in] ULONG cb,
  1089.         [out] ULONG *pcbRead);
  1090.  
  1091.     [local]
  1092.     HRESULT __stdcall WriteAt(
  1093.         [in] ULARGE_INTEGER ulOffset,
  1094.         [in] void const *pv,
  1095.         [in] ULONG cb,
  1096.         [out] ULONG *pcbWritten);
  1097.  
  1098.     [call_as(WriteAt)]
  1099.     HRESULT __stdcall RemoteWriteAt(
  1100.         [in] ULARGE_INTEGER ulOffset,
  1101.         [in, size_is(cb)] byte const *pv,
  1102.         [in] ULONG cb,
  1103.         [out] ULONG *pcbWritten);
  1104.  
  1105.     HRESULT Flush();
  1106.  
  1107.     HRESULT SetSize(
  1108.         [in] ULARGE_INTEGER cb);
  1109.  
  1110.     HRESULT LockRegion(
  1111.         [in] ULARGE_INTEGER libOffset,
  1112.         [in] ULARGE_INTEGER cb,
  1113.         [in] DWORD dwLockType);
  1114.  
  1115.     HRESULT UnlockRegion(
  1116.         [in] ULARGE_INTEGER libOffset,
  1117.         [in] ULARGE_INTEGER cb,
  1118.         [in] DWORD dwLockType);
  1119.  
  1120.     HRESULT Stat(
  1121.         [out] STATSTG *pstatstg,
  1122.         [in] DWORD grfStatFlag);
  1123. }
  1124.  
  1125. [
  1126.     object,
  1127.     uuid(00000103-0000-0000-C000-000000000046),
  1128.     pointer_default(unique)
  1129. ]
  1130.  
  1131. interface IEnumFORMATETC : IUnknown
  1132. {
  1133.  
  1134.     typedef [unique] IEnumFORMATETC *LPENUMFORMATETC;
  1135.  
  1136.  
  1137.     typedef struct tagDVTARGETDEVICE {
  1138.         DWORD tdSize;
  1139.         WORD tdDriverNameOffset;
  1140.         WORD tdDeviceNameOffset;
  1141.         WORD tdPortNameOffset;
  1142.         WORD tdExtDevmodeOffset;
  1143.         [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))]
  1144.         BYTE tdData[];
  1145.     }DVTARGETDEVICE;
  1146.  
  1147.  
  1148.     typedef WORD CLIPFORMAT;
  1149.     typedef CLIPFORMAT *LPCLIPFORMAT;
  1150.  
  1151.     typedef struct tagFORMATETC {
  1152.         CLIPFORMAT cfFormat;
  1153.         [unique] DVTARGETDEVICE * ptd;
  1154.         DWORD dwAspect;
  1155.         LONG lindex;
  1156.         DWORD tymed;
  1157.     }FORMATETC, *LPFORMATETC;
  1158.  
  1159.     [local]
  1160.     HRESULT __stdcall Next(
  1161.         [in] ULONG celt,
  1162.         [out] FORMATETC *rgelt,
  1163.         [out] ULONG *pceltFetched);
  1164.  
  1165.     [call_as(Next)]
  1166.     HRESULT __stdcall RemoteNext(
  1167.         [in] ULONG celt,
  1168.         [out, size_is(celt), length_is(*pceltFetched )]
  1169.         FORMATETC *rgelt,
  1170.         [out] ULONG *pceltFetched);
  1171.  
  1172.     HRESULT Skip(
  1173.         [in] ULONG celt);
  1174.  
  1175.     HRESULT Reset();
  1176.  
  1177.     HRESULT Clone(
  1178.         [out] IEnumFORMATETC **ppenum);
  1179. }
  1180.  
  1181. [
  1182.     object,
  1183.     uuid(00000105-0000-0000-C000-000000000046),
  1184.     pointer_default(unique)
  1185. ]
  1186.  
  1187. interface IEnumSTATDATA : IUnknown
  1188. {
  1189.  
  1190.     typedef [unique] IEnumSTATDATA *LPENUMSTATDATA;
  1191.  
  1192.     //Advise Flags
  1193.     typedef enum tagADVF
  1194.     {
  1195.         ADVF_NODATA = 1,
  1196.         ADVF_PRIMEFIRST = 2,
  1197.         ADVF_ONLYONCE = 4,
  1198.         ADVF_DATAONSTOP = 64,
  1199.         ADVFCACHE_NOHANDLER = 8,
  1200.         ADVFCACHE_FORCEBUILTIN = 16,
  1201.         ADVFCACHE_ONSAVE = 32
  1202.     } ADVF;
  1203.  
  1204.  
  1205.     // Stats for data; used by several enumerations and by at least one
  1206.     // implementation of IDataAdviseHolder; if a field is not used, it
  1207.     // will be NULL.
  1208.  
  1209.     typedef struct tagSTATDATA
  1210.     {                              // field used by:
  1211.         FORMATETC formatetc;       // EnumAdvise, EnumData (cache), EnumFormats
  1212.         DWORD advf;                // EnumAdvise, EnumData (cache)
  1213.         [unique] IAdviseSink * pAdvSink; // EnumAdvise
  1214.         DWORD dwConnection;        // EnumAdvise
  1215.     } STATDATA;
  1216.     typedef STATDATA *LPSTATDATA;
  1217.  
  1218.     [local]
  1219.     HRESULT __stdcall Next(
  1220.         [in] ULONG celt,
  1221.         STATDATA *rgelt,
  1222.         [out] ULONG *pceltFetched);
  1223.  
  1224.     [call_as(Next)]
  1225.     HRESULT __stdcall RemoteNext(
  1226.         [in] ULONG celt,
  1227.         [out, size_is(celt), length_is(*pceltFetched)]
  1228.         STATDATA *rgelt,
  1229.         [out] ULONG *pceltFetched);
  1230.  
  1231.     HRESULT Skip(
  1232.         [in] ULONG celt);
  1233.  
  1234.     HRESULT Reset();
  1235.  
  1236.     HRESULT Clone(
  1237.         [out] IEnumSTATDATA **ppenum);
  1238. }
  1239.  
  1240. [
  1241.     object,
  1242.     uuid(00000012-0000-0000-C000-000000000046),
  1243.     pointer_default(unique)
  1244. ]
  1245.  
  1246. interface IRootStorage : IUnknown
  1247. {
  1248.  
  1249.     typedef [unique] IRootStorage *LPROOTSTORAGE;
  1250.  
  1251.     HRESULT SwitchToFile
  1252.     (
  1253.         [in, string] LPOLESTR pszFile
  1254.     );
  1255. }
  1256.  
  1257.  
  1258. /****************************************************************************
  1259.  *  Notification Interfaces
  1260.  ****************************************************************************/
  1261.  
  1262. [
  1263.     object,
  1264.     uuid(0000010f-0000-0000-C000-000000000046),
  1265.     pointer_default(unique)
  1266. ]
  1267.  
  1268. interface IAdviseSink : IUnknown
  1269. {
  1270.  
  1271.     typedef IAdviseSink *LPADVISESINK;
  1272.  
  1273.     typedef [v1_enum] enum tagTYMED {
  1274.         TYMED_HGLOBAL = 1,
  1275.         TYMED_FILE = 2,
  1276.         TYMED_ISTREAM = 4,
  1277.         TYMED_ISTORAGE = 8,
  1278.         TYMED_GDI = 16,
  1279.         TYMED_MFPICT = 32,
  1280.         TYMED_ENHMF = 64,
  1281.         TYMED_NULL = 0
  1282.     } TYMED;
  1283.  
  1284.     cpp_quote("#ifndef RC_INVOKED")
  1285.     cpp_quote("#pragma warning(disable:4200)")
  1286.     cpp_quote("#endif")
  1287.  
  1288.     typedef struct tagRemSTGMEDIUM {
  1289.         DWORD tymed;
  1290.         DWORD dwHandleType;
  1291.         unsigned long pData;
  1292.         unsigned long pUnkForRelease;
  1293.         unsigned long cbData;
  1294.         [size_is(cbData)] byte data[];
  1295.     } RemSTGMEDIUM;
  1296.     cpp_quote("#ifndef RC_INVOKED")
  1297.     cpp_quote("#pragma warning(default:4200)")
  1298.     cpp_quote("#endif")
  1299.  
  1300.  
  1301. cpp_quote("#ifdef NONAMELESSUNION")
  1302. cpp_quote("typedef struct tagSTGMEDIUM {")
  1303. cpp_quote("    DWORD tymed;")
  1304. cpp_quote("    union {")
  1305. cpp_quote("        HBITMAP hBitmap;")
  1306. cpp_quote("        HMETAFILEPICT hMetaFilePict;")
  1307. cpp_quote("        HENHMETAFILE hEnhMetaFile;")
  1308. cpp_quote("        HGLOBAL hGlobal;")
  1309. cpp_quote("        LPOLESTR lpszFileName;")
  1310. cpp_quote("        IStream *pstm;")
  1311. cpp_quote("        IStorage *pstg;")
  1312. cpp_quote("        } u;")
  1313. cpp_quote("    IUnknown *pUnkForRelease;")
  1314. cpp_quote("}STGMEDIUM;")
  1315. cpp_quote("#else")
  1316.  
  1317.     typedef struct tagSTGMEDIUM {
  1318.     DWORD tymed;
  1319.     [switch_type(DWORD), switch_is((DWORD) tymed)]
  1320.         union
  1321.         {
  1322.         [case(TYMED_GDI)]
  1323.             HBITMAP hBitmap;
  1324.         [case(TYMED_MFPICT)]
  1325.             HMETAFILEPICT hMetaFilePict;
  1326.         [case(TYMED_ENHMF)]
  1327.             HENHMETAFILE hEnhMetaFile;
  1328.         [case(TYMED_HGLOBAL)]
  1329.             HGLOBAL hGlobal;
  1330.         [case(TYMED_FILE)]
  1331.             LPOLESTR lpszFileName;
  1332.         [case(TYMED_ISTREAM)]
  1333.             IStream *pstm;
  1334.         [case(TYMED_ISTORAGE)]
  1335.             IStorage *pstg;
  1336.         [default]
  1337.                 ;
  1338.         };
  1339.         [unique] IUnknown *pUnkForRelease;
  1340.     }STGMEDIUM;
  1341.  
  1342. cpp_quote("#endif /* !NONAMELESSUNION */")
  1343.  
  1344.     typedef STGMEDIUM *LPSTGMEDIUM;
  1345.  
  1346.  
  1347.     [local]
  1348.     void __stdcall OnDataChange(
  1349.         [in, unique] FORMATETC *pFormatetc,
  1350.         [in, unique] STGMEDIUM *pStgmed);
  1351.  
  1352.     [call_as(OnDataChange), async]
  1353.     void __stdcall RemoteOnDataChange(
  1354.         [in, unique] FORMATETC *pFormatetc,
  1355.         [in, unique] RemSTGMEDIUM *pStgmed);
  1356.  
  1357.     [local]
  1358.     void __stdcall OnViewChange(
  1359.         [in] DWORD dwAspect,
  1360.         [in] LONG lindex);
  1361.  
  1362.     [call_as(OnViewChange), async]
  1363.     void __stdcall RemoteOnViewChange(
  1364.         [in] DWORD dwAspect,
  1365.         [in] LONG lindex);
  1366.  
  1367.     [local]
  1368.     void __stdcall OnRename(
  1369.         [in] IMoniker *pmk);
  1370.  
  1371.     [call_as(OnRename), async]
  1372.     void __stdcall RemoteOnRename(
  1373.         [in] IMoniker *pmk);
  1374.  
  1375.     [local]
  1376.     void __stdcall OnSave();
  1377.  
  1378.     [call_as(OnSave), async]
  1379.     void __stdcall RemoteOnSave();
  1380.  
  1381.     [local]
  1382.     void __stdcall OnClose();
  1383.  
  1384.     [call_as(OnClose)]
  1385.     HRESULT __stdcall RemoteOnClose();
  1386. }
  1387.  
  1388. [
  1389.     object,
  1390.     uuid(00000125-0000-0000-C000-000000000046),
  1391.     pointer_default(unique)
  1392. ]
  1393.  
  1394. interface IAdviseSink2 : IAdviseSink
  1395. {
  1396.  
  1397.     typedef [unique] IAdviseSink2 *LPADVISESINK2;
  1398.  
  1399.     [local]
  1400.     void __stdcall OnLinkSrcChange(
  1401.         [in, unique] IMoniker *pmk);
  1402.  
  1403.     [call_as(OnLinkSrcChange), async]
  1404.     void __stdcall RemoteOnLinkSrcChange(
  1405.         [in, unique] IMoniker *pmk);
  1406. }
  1407.  
  1408. [
  1409.     object,
  1410.     uuid(0000010e-0000-0000-C000-000000000046),
  1411.     pointer_default(unique)
  1412. ]
  1413.  
  1414. interface IDataObject : IUnknown
  1415. {
  1416.  
  1417.     typedef [unique] IDataObject *LPDATAOBJECT;
  1418.  
  1419.     //DATA format DIRection
  1420.     typedef enum tagDATADIR
  1421.     {
  1422.         DATADIR_GET = 1,
  1423.         DATADIR_SET = 2
  1424.     } DATADIR;
  1425.  
  1426.     [local]
  1427.     HRESULT __stdcall GetData(
  1428.         [in, unique] FORMATETC *pformatetcIn,
  1429.         [out] STGMEDIUM *pmedium);
  1430.  
  1431.     [call_as(GetData)]
  1432.     HRESULT __stdcall RemoteGetData(
  1433.         [in, unique] FORMATETC *pformatetcIn,
  1434.         [out] RemSTGMEDIUM **ppRemoteMedium);
  1435.  
  1436.     [local]
  1437.     HRESULT __stdcall GetDataHere(
  1438.         [in, unique] FORMATETC *pformatetc,
  1439.         [in, out] STGMEDIUM *pmedium);
  1440.  
  1441.     [call_as(GetDataHere)]
  1442.     HRESULT __stdcall RemoteGetDataHere(
  1443.         [in, unique] FORMATETC *pformatetc,
  1444.         [in, out] RemSTGMEDIUM **ppRemoteMedium);
  1445.  
  1446.     HRESULT QueryGetData(
  1447.         [in, unique] FORMATETC *pformatetc);
  1448.  
  1449.  
  1450.     HRESULT GetCanonicalFormatEtc(
  1451.         [in, unique] FORMATETC *pformatectIn,
  1452.         [out] FORMATETC *pformatetcOut);
  1453.  
  1454.     [local]
  1455.     HRESULT __stdcall SetData(
  1456.         [in, unique] FORMATETC *pformatetc,
  1457.         [in, unique] STGMEDIUM *pmedium,
  1458.         [in] BOOL fRelease);
  1459.  
  1460.     [call_as(SetData)]
  1461.     HRESULT __stdcall RemoteSetData(
  1462.         [in, unique] FORMATETC *pformatetc,
  1463.         [in, unique] RemSTGMEDIUM *pmedium,
  1464.         [in] BOOL fRelease);
  1465.  
  1466.     HRESULT EnumFormatEtc(
  1467.         [in] DWORD dwDirection,
  1468.         [out] IEnumFORMATETC **ppenumFormatEtc);
  1469.  
  1470.     HRESULT DAdvise(
  1471.         [in] FORMATETC *pformatetc,
  1472.         [in] DWORD advf,
  1473.         [in, unique] IAdviseSink *pAdvSink,
  1474.         [out] DWORD *pdwConnection);
  1475.  
  1476.     HRESULT DUnadvise(
  1477.         [in] DWORD dwConnection);
  1478.  
  1479.     HRESULT EnumDAdvise(
  1480.         [out] IEnumSTATDATA **ppenumAdvise);
  1481.  
  1482. }
  1483.  
  1484. [
  1485.     local,
  1486.     object,
  1487.     uuid(00000110-0000-0000-C000-000000000046)
  1488. ]
  1489.  
  1490. interface IDataAdviseHolder : IUnknown
  1491. {
  1492.  
  1493.     typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER;
  1494.  
  1495.     HRESULT Advise
  1496.     (
  1497.         [in, unique] IDataObject *pDataObject,
  1498.         [in, unique] FORMATETC *pFetc,
  1499.         [in] DWORD advf,
  1500.         [in, unique] IAdviseSink *pAdvise,
  1501.         [out] DWORD *pdwConnection
  1502.     );
  1503.  
  1504.     HRESULT Unadvise
  1505.     (
  1506.         [in] DWORD dwConnection
  1507.     );
  1508.  
  1509.     HRESULT EnumAdvise
  1510.     (
  1511.         [out] IEnumSTATDATA **ppenumAdvise
  1512.     );
  1513.  
  1514.     HRESULT SendOnDataChange
  1515.     (
  1516.         [in, unique] IDataObject *pDataObject,
  1517.         [in] DWORD dwReserved,
  1518.         [in] DWORD advf
  1519.     );
  1520.  
  1521. }
  1522.  
  1523. [
  1524.     local,
  1525.     object,
  1526.     uuid(00000016-0000-0000-C000-000000000046)
  1527. ]
  1528.  
  1529. interface IMessageFilter : IUnknown
  1530. {
  1531.  
  1532.     typedef [unique] IMessageFilter *LPMESSAGEFILTER;
  1533.  
  1534. // call type used by IMessageFilter::HandleIncomingMessage
  1535. typedef enum tagCALLTYPE
  1536. {
  1537.     CALLTYPE_TOPLEVEL = 1,      // toplevel call - no outgoing call
  1538.     CALLTYPE_NESTED   = 2,      // callback on behalf of previous outgoing call - should always handle
  1539.     CALLTYPE_ASYNC    = 3,      // aysnchronous call - can NOT be rejected
  1540.     CALLTYPE_TOPLEVEL_CALLPENDING = 4,  // new toplevel call with new LID
  1541.     CALLTYPE_ASYNC_CALLPENDING    = 5   // async call - can NOT be rejected
  1542. } CALLTYPE;
  1543.  
  1544. // status of server call - returned by IMessageFilter::HandleIncomingCall
  1545. // and passed to  IMessageFilter::RetryRejectedCall
  1546. typedef enum tagSERVERCALL
  1547. {
  1548.     SERVERCALL_ISHANDLED    = 0,
  1549.     SERVERCALL_REJECTED     = 1,
  1550.     SERVERCALL_RETRYLATER   = 2
  1551. } SERVERCALL;
  1552.  
  1553. // Pending type indicates the level of nesting
  1554. typedef enum tagPENDINGTYPE
  1555. {
  1556.     PENDINGTYPE_TOPLEVEL = 1, // toplevel call
  1557.     PENDINGTYPE_NESTED   = 2  // nested call
  1558. } PENDINGTYPE;
  1559.  
  1560. // return values of MessagePending
  1561. typedef enum tagPENDINGMSG
  1562. {
  1563.     PENDINGMSG_CANCELCALL  = 0, // cancel the outgoing call
  1564.     PENDINGMSG_WAITNOPROCESS  = 1, // wait for the return and don't dispatch the message
  1565.     PENDINGMSG_WAITDEFPROCESS = 2  // wait and dispatch the message
  1566.  
  1567. } PENDINGMSG;
  1568.  
  1569. // additional interface information about the incoming call
  1570. typedef struct tagINTERFACEINFO
  1571. {
  1572.     IUnknown    *pUnk;      // the pointer to the object
  1573.     IID         iid;        // interface id
  1574.     WORD        wMethod;    // interface method
  1575. } INTERFACEINFO, *LPINTERFACEINFO;
  1576.  
  1577.     DWORD HandleInComingCall
  1578.     (
  1579.         [in] DWORD dwCallType,
  1580.         [in] HTASK htaskCaller,
  1581.         [in] DWORD dwTickCount,
  1582.         [in] LPINTERFACEINFO lpInterfaceInfo
  1583.     );
  1584.  
  1585.     DWORD RetryRejectedCall
  1586.     (
  1587.         [in] HTASK htaskCallee,
  1588.         [in] DWORD dwTickCount,
  1589.         [in] DWORD dwRejectType
  1590.     );
  1591.  
  1592.     DWORD MessagePending
  1593.     (
  1594.         [in] HTASK htaskCallee,
  1595.         [in] DWORD dwTickCount,
  1596.         [in] DWORD dwPendingType
  1597.     );
  1598. }
  1599.  
  1600.  
  1601. /****************************************************************************
  1602.  *  Object Remoting Interfaces
  1603.  ****************************************************************************/
  1604.  
  1605. [
  1606.     local,
  1607.     object,
  1608.     uuid(D5F56B60-593B-101A-B569-08002B2DBF7A)
  1609. ]
  1610. interface IRpcChannelBuffer : IUnknown
  1611. {
  1612.  
  1613.     typedef unsigned long RPCOLEDATAREP;
  1614.  
  1615.     typedef struct tagRPCOLEMESSAGE
  1616.     {
  1617.         void             *reserved1;
  1618.         RPCOLEDATAREP     dataRepresentation;
  1619.         void             *Buffer;
  1620.         ULONG             cbBuffer;
  1621.         ULONG             iMethod;
  1622.         void             *reserved2[5];
  1623.         ULONG             rpcFlags;
  1624.     } RPCOLEMESSAGE;
  1625.  
  1626.     typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;
  1627.  
  1628.     HRESULT GetBuffer
  1629.     (
  1630.         [in] RPCOLEMESSAGE *pMessage,
  1631.         [in] REFIID riid
  1632.     );
  1633.  
  1634.     HRESULT SendReceive
  1635.     (
  1636.         [in,out] RPCOLEMESSAGE *pMessage,
  1637.         [out] ULONG *pStatus
  1638.     );
  1639.  
  1640.     HRESULT FreeBuffer
  1641.     (
  1642.         [in] RPCOLEMESSAGE *pMessage
  1643.     );
  1644.  
  1645.     HRESULT GetDestCtx
  1646.     (
  1647.         [out] DWORD *pdwDestContext,
  1648.         [out] void **ppvDestContext
  1649.     );
  1650.  
  1651.     HRESULT IsConnected
  1652.     (
  1653.         void
  1654.     );
  1655.  
  1656. }
  1657.  
  1658. [
  1659.     local,
  1660.     object,
  1661.     uuid(D5F56A34-593B-101A-B569-08002B2DBF7A)
  1662. ]
  1663. interface IRpcProxyBuffer : IUnknown
  1664. {
  1665.  
  1666.     HRESULT Connect
  1667.     (
  1668.         [in, unique] IRpcChannelBuffer *pRpcChannelBuffer
  1669.     );
  1670.  
  1671.     void Disconnect
  1672.     (
  1673.         void
  1674.     );
  1675.  
  1676. }
  1677.  
  1678. [
  1679.     local,
  1680.     object,
  1681.     uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A)
  1682. ]
  1683. interface IRpcStubBuffer : IUnknown
  1684. {
  1685.  
  1686.     HRESULT Connect
  1687.     (
  1688.         [in] IUnknown *pUnkServer
  1689.     );
  1690.  
  1691.     void Disconnect();
  1692.  
  1693.     HRESULT Invoke
  1694.     (
  1695.         [in] RPCOLEMESSAGE *_prpcmsg,
  1696.         [in] IRpcChannelBuffer *_pRpcChannelBuffer
  1697.     );
  1698.  
  1699.     IRpcStubBuffer *IsIIDSupported
  1700.     (
  1701.         [in] REFIID riid
  1702.     );
  1703.  
  1704.     ULONG CountRefs
  1705.     (
  1706.         void
  1707.     );
  1708.  
  1709.     HRESULT DebugServerQueryInterface
  1710.     (
  1711.         void **ppv
  1712.     );
  1713.  
  1714.     void DebugServerRelease
  1715.     (
  1716.         void *pv
  1717.     );
  1718.  
  1719. }
  1720.  
  1721.  
  1722.  
  1723. [
  1724.     local,
  1725.     object,
  1726.     uuid(D5F569D0-593B-101A-B569-08002B2DBF7A)
  1727. ]
  1728. interface IPSFactoryBuffer : IUnknown
  1729. {
  1730.  
  1731.     HRESULT CreateProxy
  1732.     (
  1733.         [in] IUnknown *pUnkOuter,
  1734.         [in] REFIID riid,
  1735.         [out] IRpcProxyBuffer **ppProxy,
  1736.     [out] void **ppv
  1737.     );
  1738.  
  1739.     HRESULT CreateStub
  1740.     (
  1741.         [in] REFIID riid,
  1742.         [in, unique] IUnknown *pUnkServer,
  1743.         [out] IRpcStubBuffer **ppStub
  1744.     );
  1745. }
  1746.