home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / objidl.idl < prev    next >
Text File  |  1998-04-25  |  93KB  |  3,771 lines

  1. //+-------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright (C) Microsoft Corporation, 1992-1997.
  5. //
  6. //  File: objidl.idl
  7. //
  8. //--------------------------------------------------------------------------
  9.  
  10. cpp_quote("//+-------------------------------------------------------------------------")
  11. cpp_quote("//")
  12. cpp_quote("//  Microsoft Windows")
  13. cpp_quote("//  Copyright (C) Microsoft Corporation, 1992-1997.")
  14. cpp_quote("//")
  15. cpp_quote("//--------------------------------------------------------------------------")
  16.  
  17. cpp_quote("#if ( _MSC_VER >= 800 )")
  18. cpp_quote("#pragma warning(disable:4201)")
  19. cpp_quote("#endif")
  20.  
  21. #ifndef DO_NO_IMPORTS
  22. import "unknwn.idl";
  23. import "wtypes.idl";
  24. #endif
  25.  
  26. interface IStream;
  27. interface IMoniker;
  28. interface IEnumMoniker;
  29. interface IEnumString;
  30. interface IRunningObjectTable;
  31. interface IStorage;
  32. interface IEnumSTATSTG;
  33. interface IAdviseSink;
  34. interface IBindCtx;
  35. interface IEnumMoniker;
  36. interface IAsyncManager;
  37.  
  38. typedef enum _SRVINFO
  39. {
  40.     SRVINFO_F_COSERVERINFO = 0,
  41.     SRVINFO_F_COSERVERINFO2 = 1
  42. } SRVINFO;
  43.  
  44. typedef struct _COSERVERINFO
  45. {
  46.     DWORD             dwReserved1;
  47.     LPWSTR            pwszName;
  48.     COAUTHINFO *      pAuthInfo;
  49.     DWORD             dwReserved2;
  50. } COSERVERINFO;
  51.  
  52. typedef struct _COSERVERINFO2 {
  53.     DWORD           dwFlags;
  54.     LPWSTR          pwszName;
  55.     COAUTHINFO*     pAuthInfo;
  56.     IUnknown**      ppCall;
  57.     LPWSTR          pwszCodeURL;
  58.     DWORD           dwFileVersionMS;
  59.     DWORD           dwFileVersionLS;
  60.     LPWSTR          pwszContentType;
  61. } COSERVERINFO2;
  62.  
  63.  
  64. /****************************************************************************
  65.  *  Component Object Interfaces
  66.  ****************************************************************************/
  67.  
  68. [
  69.     local,
  70.     object,
  71.     uuid(00000003-0000-0000-C000-000000000046)
  72. ]
  73.  
  74. interface IMarshal : IUnknown
  75. {
  76.  
  77.     typedef [unique] IMarshal *LPMARSHAL;
  78.  
  79.     HRESULT GetUnmarshalClass
  80.     (
  81.         [in] REFIID riid,
  82.         [in, unique] void *pv,
  83.         [in] DWORD dwDestContext,
  84.         [in, unique] void *pvDestContext,
  85.         [in] DWORD mshlflags,
  86.         [out] CLSID *pCid
  87.     );
  88.  
  89.     HRESULT GetMarshalSizeMax
  90.     (
  91.         [in] REFIID riid,
  92.         [in, unique] void *pv,
  93.         [in] DWORD dwDestContext,
  94.         [in, unique] void *pvDestContext,
  95.         [in] DWORD mshlflags,
  96.         [out] DWORD *pSize
  97.     );
  98.  
  99.     HRESULT MarshalInterface
  100.     (
  101.         [in, unique] IStream *pStm,
  102.         [in] REFIID riid,
  103.         [in, unique] void *pv,
  104.         [in] DWORD dwDestContext,
  105.         [in, unique] void *pvDestContext,
  106.         [in] DWORD mshlflags
  107.     );
  108.  
  109.     HRESULT UnmarshalInterface
  110.     (
  111.         [in, unique] IStream *pStm,
  112.         [in] REFIID riid,
  113.         [out] void **ppv
  114.     );
  115.  
  116.     HRESULT ReleaseMarshalData
  117.     (
  118.         [in, unique] IStream *pStm
  119.     );
  120.  
  121.     HRESULT DisconnectObject
  122.     (
  123.         [in] DWORD dwReserved
  124.     );
  125. }
  126.  
  127. [
  128.     local,
  129.     object,
  130.     uuid(00000002-0000-0000-C000-000000000046)
  131. ]
  132.  
  133. interface IMalloc : IUnknown
  134. {
  135.  
  136.     typedef [unique] IMalloc *LPMALLOC;
  137.  
  138.     void *Alloc([in] ULONG cb);
  139.  
  140.     void *Realloc ([in] void *pv,
  141.                    [in] ULONG cb);
  142.  
  143.     void Free([in] void *pv);
  144.  
  145.     ULONG GetSize([in] void *pv);
  146.  
  147.     int DidAlloc(void *pv);
  148.  
  149.     void HeapMinimize(void);
  150. }
  151.  
  152. [
  153.     local,
  154.     object,
  155.     uuid(0000001d-0000-0000-C000-000000000046)
  156. ]
  157.  
  158. interface IMallocSpy : IUnknown
  159. {
  160.  
  161.     typedef [unique] IMallocSpy *LPMALLOCSPY;
  162.  
  163.     ULONG PreAlloc
  164.     (
  165.         [in] ULONG cbRequest
  166.     );
  167.  
  168.     void  *PostAlloc
  169.     (
  170.         [in] void *pActual
  171.     );
  172.  
  173.     void  *PreFree
  174.     (
  175.         [in] void *pRequest,
  176.         [in] BOOL  fSpyed
  177.     );
  178.  
  179.     void  PostFree
  180.     (
  181.         [in] BOOL  fSpyed
  182.     );
  183.  
  184.     ULONG PreRealloc
  185.     (
  186.         [in] void   *pRequest,
  187.         [in] ULONG   cbRequest,
  188.         [out] void **ppNewRequest,
  189.         [in] BOOL    fSpyed
  190.     );
  191.  
  192.     void  *PostRealloc
  193.     (
  194.         [in] void *pActual,
  195.         [in] BOOL  fSpyed
  196.     );
  197.  
  198.     void  *PreGetSize
  199.     (
  200.         [in] void *pRequest,
  201.         [in] BOOL  fSpyed
  202.     );
  203.  
  204.     ULONG PostGetSize
  205.     (
  206.         [in] ULONG cbActual,
  207.         [in] BOOL  fSpyed
  208.     );
  209.  
  210.     void  *PreDidAlloc
  211.     (
  212.         [in] void *pRequest,
  213.         [in] BOOL  fSpyed
  214.     );
  215.  
  216.     int   PostDidAlloc
  217.     (
  218.         [in] void *pRequest,
  219.         [in] BOOL  fSpyed,
  220.         [in] int   fActual
  221.     );
  222.  
  223.     void  PreHeapMinimize(void);
  224.  
  225.     void  PostHeapMinimize(void);
  226. }
  227.  
  228. [
  229.     local,
  230.     object,
  231.     uuid(00000018-0000-0000-C000-000000000046)
  232. ]
  233.  
  234. interface IStdMarshalInfo : IUnknown
  235. {
  236.  
  237.     typedef [unique] IStdMarshalInfo * LPSTDMARSHALINFO;
  238.  
  239.     HRESULT GetClassForHandler
  240.     (
  241.         [in] DWORD dwDestContext,
  242.         [in, unique] void *pvDestContext,
  243.         [out] CLSID *pClsid
  244.     );
  245. }
  246.  
  247. [
  248.     object,
  249.     local,
  250.     uuid(00000019-0000-0000-C000-000000000046)
  251. ]
  252.  
  253. interface IExternalConnection : IUnknown
  254. {
  255.  
  256.     typedef [unique] IExternalConnection* LPEXTERNALCONNECTION;
  257.  
  258.  
  259.     // bit flags for IExternalConnection
  260.     typedef enum tagEXTCONN
  261.     {
  262.         EXTCONN_STRONG      = 0x0001,   // strong connection
  263.         EXTCONN_WEAK        = 0x0002,   // weak connection (table, container)
  264.         EXTCONN_CALLABLE    = 0x0004,   // table .vs. callable
  265.     } EXTCONN;
  266.  
  267.     // *** IExternalConnection methods ***
  268.     DWORD AddConnection
  269.     (
  270.         [in] DWORD extconn,
  271.         [in] DWORD reserved
  272.     );
  273.  
  274.     DWORD ReleaseConnection
  275.     (
  276.         [in] DWORD extconn,
  277.         [in] DWORD reserved,
  278.         [in] BOOL  fLastReleaseCloses
  279.     );
  280. }
  281.  
  282.  
  283. [
  284.     object,
  285.     local,
  286.     uuid(00000020-0000-0000-C000-000000000046)
  287. ]
  288.  
  289. interface IMultiQI : IUnknown
  290. {
  291.     typedef [unique] IMultiQI* LPMULTIQI;
  292.  
  293.     typedef struct tagMULTI_QI
  294.     {
  295.         const IID  *pIID; // pass this one in
  296.         IUnknown   *pItf; // get these out (you must set to NULL before calling)
  297.         HRESULT     hr;
  298.     } MULTI_QI;
  299.  
  300.     HRESULT QueryMultipleInterfaces
  301.     (
  302.         [in]     ULONG      cMQIs,
  303.         [in,out] MULTI_QI  *pMQIs
  304.     );
  305. }
  306.  
  307.  
  308. [
  309.     object,
  310.     uuid(00000100-0000-0000-C000-000000000046),
  311.     pointer_default(unique)
  312. ]
  313.  
  314. interface IEnumUnknown : IUnknown
  315. {
  316.  
  317.     typedef [unique] IEnumUnknown *LPENUMUNKNOWN;
  318.  
  319.     [local]
  320.     HRESULT Next(
  321.         [in] ULONG celt,
  322.         [out] IUnknown **rgelt,
  323.         [out] ULONG *pceltFetched);
  324.  
  325.     [call_as(Next)]
  326.     HRESULT RemoteNext(
  327.         [in] ULONG celt,
  328.         [out, size_is(celt), length_is(*pceltFetched)]
  329.         IUnknown **rgelt,
  330.         [out] ULONG *pceltFetched);
  331.  
  332.     HRESULT Skip(
  333.         [in] ULONG celt);
  334.  
  335.     HRESULT Reset();
  336.  
  337.     HRESULT Clone(
  338.         [out] IEnumUnknown **ppenum);
  339. }
  340.  
  341.  
  342. /****************************************************************************
  343.  *  Binding Interfaces
  344.  ****************************************************************************/
  345.  
  346. [
  347.     object,
  348.     uuid(0000000e-0000-0000-C000-000000000046),
  349.     pointer_default(unique)
  350. ]
  351.  
  352. interface IBindCtx : IUnknown
  353. {
  354.  
  355.     typedef [unique] IBindCtx *LPBC;
  356.  
  357.     typedef [unique] IBindCtx *LPBINDCTX;
  358.  
  359.     typedef struct tagBIND_OPTS {
  360.     DWORD       cbStruct;       //  sizeof(BIND_OPTS)
  361.     DWORD       grfFlags;
  362.     DWORD       grfMode;
  363.     DWORD       dwTickCountDeadline;
  364.     } BIND_OPTS, * LPBIND_OPTS;
  365.  
  366. cpp_quote("#if defined(__cplusplus)")
  367. cpp_quote("    typedef struct tagBIND_OPTS2 : tagBIND_OPTS{")
  368. cpp_quote("    DWORD           dwTrackFlags;")
  369. cpp_quote("    DWORD           dwClassContext;")
  370. cpp_quote("    LCID            locale;")
  371. cpp_quote("    COSERVERINFO *  pServerInfo;")
  372. cpp_quote("    } BIND_OPTS2, * LPBIND_OPTS2;")
  373. cpp_quote("#else")
  374.  
  375.     typedef struct tagBIND_OPTS2 {
  376.     DWORD           cbStruct;       //  sizeof(BIND_OPTS2)
  377.     DWORD           grfFlags;
  378.     DWORD           grfMode;
  379.     DWORD           dwTickCountDeadline;
  380.     DWORD           dwTrackFlags;
  381.     DWORD           dwClassContext;
  382.     LCID            locale;
  383.     COSERVERINFO *  pServerInfo;
  384.     } BIND_OPTS2, * LPBIND_OPTS2;
  385.  
  386. cpp_quote("#endif")
  387.  
  388.  
  389.     typedef enum tagBIND_FLAGS
  390.     {
  391.         BIND_MAYBOTHERUSER = 1,
  392.         BIND_JUSTTESTEXISTENCE = 2
  393.     } BIND_FLAGS;
  394.  
  395.     HRESULT RegisterObjectBound
  396.     (
  397.         [in, unique] IUnknown *punk
  398.     );
  399.  
  400.     HRESULT RevokeObjectBound
  401.     (
  402.         [in, unique] IUnknown *punk
  403.     );
  404.  
  405.     HRESULT ReleaseBoundObjects
  406.     (
  407.         void
  408.     );
  409.  
  410.     [local]
  411.     HRESULT SetBindOptions
  412.     (
  413.         [in] BIND_OPTS *pbindopts
  414.     );
  415.  
  416.     [call_as(SetBindOptions)]
  417.     HRESULT RemoteSetBindOptions
  418.     (
  419.         [in] BIND_OPTS2 *pbindopts
  420.     );
  421.  
  422.     [local]
  423.     HRESULT GetBindOptions
  424.     (
  425.         [in, out] BIND_OPTS *pbindopts
  426.     );
  427.  
  428.     [call_as(GetBindOptions)]
  429.     HRESULT RemoteGetBindOptions
  430.     (
  431.         [in, out] BIND_OPTS2 *pbindopts
  432.     );
  433.  
  434.     HRESULT GetRunningObjectTable
  435.     (
  436.         [out] IRunningObjectTable **pprot
  437.     );
  438.  
  439.     HRESULT RegisterObjectParam(
  440.         [in] LPOLESTR pszKey,
  441.         [in, unique] IUnknown *punk
  442.     );
  443.  
  444.     HRESULT GetObjectParam(
  445.         [in] LPOLESTR pszKey,
  446.         [out] IUnknown **ppunk
  447.     );
  448.  
  449.     HRESULT EnumObjectParam
  450.     (
  451.         [out] IEnumString **ppenum
  452.     );
  453.  
  454.     HRESULT RevokeObjectParam
  455.     (
  456.         [in] LPOLESTR pszKey
  457.     );
  458. }
  459.  
  460. [
  461.     object,
  462.     uuid(00000102-0000-0000-C000-000000000046),
  463.     pointer_default(unique)
  464. ]
  465.  
  466. interface IEnumMoniker : IUnknown
  467. {
  468.  
  469.     typedef [unique] IEnumMoniker *LPENUMMONIKER;
  470.  
  471.     [local]
  472.     HRESULT Next(
  473.         [in] ULONG celt,
  474.         [out, size_is(celt), length_is(*pceltFetched)]
  475.         IMoniker **rgelt,
  476.         [out] ULONG *pceltFetched);
  477.  
  478.     [call_as(Next)]
  479.     HRESULT RemoteNext(
  480.         [in] ULONG celt,
  481.         [out, size_is(celt), length_is(*pceltFetched)]
  482.         IMoniker **rgelt,
  483.         [out] ULONG *pceltFetched);
  484.  
  485.  
  486.     HRESULT Skip(
  487.         [in] ULONG celt);
  488.  
  489.     HRESULT Reset();
  490.  
  491.     HRESULT Clone(
  492.         [out] IEnumMoniker **ppenum);
  493. }
  494.  
  495. [
  496.     object,
  497.     uuid(00000126-0000-0000-C000-000000000046)
  498. ]
  499. interface IRunnableObject : IUnknown
  500. {
  501.  
  502.     typedef [unique] IRunnableObject *LPRUNNABLEOBJECT;
  503.  
  504.     HRESULT GetRunningClass(
  505.         [out] LPCLSID lpClsid);
  506.  
  507.     HRESULT Run(
  508.         [in] LPBINDCTX pbc);
  509.  
  510.     [local]
  511.     BOOL IsRunning();
  512.  
  513.     [call_as(IsRunning)]
  514.     HRESULT RemoteIsRunning();
  515.  
  516.     HRESULT LockRunning(
  517.         [in] BOOL fLock,
  518.         [in] BOOL fLastUnlockCloses);
  519.  
  520.     HRESULT SetContainedObject(
  521.         [in] BOOL fContained);
  522. }
  523.  
  524. [
  525.     object,
  526.     uuid(00000010-0000-0000-C000-000000000046)
  527. ]
  528.  
  529. interface IRunningObjectTable : IUnknown
  530. {
  531.  
  532.     typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE;
  533.  
  534.     HRESULT Register
  535.     (
  536.         [in] DWORD grfFlags,
  537.         [in, unique] IUnknown *punkObject,
  538.         [in, unique] IMoniker *pmkObjectName,
  539.         [out] DWORD *pdwRegister
  540.     );
  541.  
  542.     HRESULT Revoke
  543.     (
  544.         [in] DWORD dwRegister
  545.     );
  546.  
  547.     HRESULT IsRunning
  548.     (
  549.         [in, unique] IMoniker *pmkObjectName
  550.     );
  551.  
  552.     HRESULT GetObject
  553.     (
  554.         [in, unique] IMoniker *pmkObjectName,
  555.         [out] IUnknown **ppunkObject
  556.     );
  557.  
  558.     HRESULT NoteChangeTime
  559.     (
  560.         [in] DWORD dwRegister,
  561.         [in] FILETIME *pfiletime
  562.     );
  563.  
  564.     HRESULT GetTimeOfLastChange
  565.     (
  566.         [in, unique] IMoniker *pmkObjectName,
  567.         [out] FILETIME *pfiletime
  568.     );
  569.  
  570.     HRESULT EnumRunning
  571.     (
  572.         [out] IEnumMoniker **ppenumMoniker
  573.     );
  574.  
  575. }
  576.  
  577. [
  578.     object,
  579.     uuid(0000010c-0000-0000-C000-000000000046)
  580. ]
  581.  
  582. interface IPersist : IUnknown
  583. {
  584.  
  585.     typedef [unique] IPersist *LPPERSIST;
  586.  
  587.     HRESULT GetClassID
  588.     (
  589.         [out] CLSID *pClassID
  590.     );
  591. }
  592.  
  593. [
  594.     object,
  595.     uuid(00000109-0000-0000-C000-000000000046),
  596.     pointer_default(unique)
  597. ]
  598.  
  599. interface IPersistStream : IPersist
  600. {
  601.  
  602.     typedef [unique] IPersistStream *LPPERSISTSTREAM;
  603.  
  604.     HRESULT IsDirty
  605.     (
  606.         void
  607.     );
  608.  
  609.     HRESULT Load
  610.     (
  611.         [in, unique] IStream *pStm
  612.     );
  613.  
  614.     HRESULT Save
  615.     (
  616.         [in, unique] IStream *pStm,
  617.         [in] BOOL fClearDirty
  618.     );
  619.  
  620.     HRESULT GetSizeMax
  621.     (
  622.         [out] ULARGE_INTEGER *pcbSize
  623.     );
  624.  
  625. }
  626.  
  627. [
  628.     object,
  629.     uuid(0000000f-0000-0000-C000-000000000046),
  630.     pointer_default(unique)
  631. ]
  632.  
  633. interface IMoniker : IPersistStream
  634. {
  635.  
  636.     typedef [unique] IMoniker *LPMONIKER;
  637.  
  638.     // system moniker types; returned from IsSystemMoniker.
  639.     typedef enum tagMKSYS
  640.     {
  641.         MKSYS_NONE = 0,
  642.         MKSYS_GENERICCOMPOSITE = 1,
  643.         MKSYS_FILEMONIKER = 2,
  644.         MKSYS_ANTIMONIKER = 3,
  645.         MKSYS_ITEMMONIKER = 4,
  646.         MKSYS_POINTERMONIKER = 5,
  647.     //  MKSYS_URLMONIKER = 6,
  648.         MKSYS_CLASSMONIKER = 7
  649.     }MKSYS;
  650.  
  651.  
  652.     typedef [v1_enum] enum tagMKREDUCE
  653.     {
  654.         MKRREDUCE_ONE           =   3<<16,
  655.  
  656.         MKRREDUCE_TOUSER        =   2<<16,
  657.         MKRREDUCE_THROUGHUSER   =   1<<16,
  658.         MKRREDUCE_ALL           =   0
  659.     } MKRREDUCE;
  660.  
  661.  
  662.     [local]
  663.     HRESULT BindToObject(
  664.         [in, unique] IBindCtx *pbc,
  665.         [in, unique] IMoniker *pmkToLeft,
  666.         [in] REFIID riidResult,
  667.         [out, iid_is(riidResult)] void **ppvResult);
  668.  
  669.     [call_as(BindToObject)]
  670.     HRESULT RemoteBindToObject(
  671.         [in, unique] IBindCtx *pbc,
  672.         [in, unique] IMoniker *pmkToLeft,
  673.         [in] REFIID riidResult,
  674.         [out, iid_is(riidResult)] IUnknown **ppvResult);
  675.  
  676.     [local]
  677.     HRESULT BindToStorage(
  678.         [in, unique] IBindCtx *pbc,
  679.         [in, unique] IMoniker *pmkToLeft,
  680.         [in] REFIID riid,
  681.         [out, iid_is(riid)] void **ppvObj);
  682.  
  683.     [call_as(BindToStorage)]
  684.     HRESULT RemoteBindToStorage(
  685.         [in, unique] IBindCtx *pbc,
  686.         [in, unique] IMoniker *pmkToLeft,
  687.         [in] REFIID riid,
  688.         [out, iid_is(riid)] IUnknown **ppvObj);
  689.  
  690.     HRESULT Reduce(
  691.         [in, unique] IBindCtx *pbc,
  692.         [in] DWORD dwReduceHowFar,
  693.         [in, out, unique] IMoniker **ppmkToLeft,
  694.         [out] IMoniker **ppmkReduced);
  695.  
  696.     HRESULT ComposeWith(
  697.         [in, unique] IMoniker *pmkRight,
  698.         [in] BOOL fOnlyIfNotGeneric,
  699.         [out] IMoniker **ppmkComposite);
  700.  
  701.     HRESULT Enum(
  702.         [in] BOOL fForward,
  703.         [out] IEnumMoniker **ppenumMoniker);
  704.  
  705.     HRESULT IsEqual(
  706.         [in, unique] IMoniker *pmkOtherMoniker);
  707.  
  708.     HRESULT Hash(
  709.         [out] DWORD *pdwHash);
  710.  
  711.     HRESULT IsRunning(
  712.         [in, unique] IBindCtx *pbc,
  713.         [in, unique] IMoniker *pmkToLeft,
  714.         [in, unique] IMoniker *pmkNewlyRunning);
  715.  
  716.     HRESULT GetTimeOfLastChange(
  717.         [in, unique] IBindCtx *pbc,
  718.         [in, unique] IMoniker *pmkToLeft,
  719.         [out] FILETIME *pFileTime);
  720.  
  721.     HRESULT Inverse(
  722.         [out] IMoniker **ppmk);
  723.  
  724.     HRESULT CommonPrefixWith(
  725.         [in, unique] IMoniker *pmkOther,
  726.         [out] IMoniker **ppmkPrefix);
  727.  
  728.     HRESULT RelativePathTo(
  729.         [in, unique] IMoniker *pmkOther,
  730.         [out] IMoniker **ppmkRelPath);
  731.  
  732.     HRESULT GetDisplayName(
  733.         [in, unique] IBindCtx *pbc,
  734.         [in, unique] IMoniker *pmkToLeft,
  735.         [out] LPOLESTR *ppszDisplayName);
  736.  
  737.     HRESULT ParseDisplayName(
  738.         [in, unique] IBindCtx *pbc,
  739.         [in, unique] IMoniker *pmkToLeft,
  740.         [in] LPOLESTR pszDisplayName,
  741.         [out] ULONG *pchEaten,
  742.         [out] IMoniker **ppmkOut);
  743.  
  744.     HRESULT IsSystemMoniker(
  745.         [out] DWORD *pdwMksys);
  746.  
  747. }
  748.  
  749. [
  750.     object,
  751.     uuid(f29f6bc0-5021-11ce-aa15-00006901293f),
  752.     pointer_default(unique)
  753. ]
  754.  
  755. interface IROTData : IUnknown
  756. {
  757.     HRESULT GetComparisonData(
  758.         [out, size_is(cbMax)] byte *pbData,
  759.         [in]  ULONG cbMax,
  760.         [out] ULONG *pcbData);
  761. }
  762.  
  763. [
  764.     object,
  765.     uuid(00000101-0000-0000-C000-000000000046),
  766.     pointer_default(unique)
  767. ]
  768.  
  769. interface IEnumString : IUnknown
  770. {
  771.  
  772.     typedef [unique] IEnumString *LPENUMSTRING;
  773.  
  774.     [local]
  775.     HRESULT Next(
  776.         [in] ULONG celt,
  777.         [out, size_is(celt), length_is(*pceltFetched)]
  778.         LPOLESTR *rgelt,
  779.         [out] ULONG *pceltFetched);
  780.  
  781.     [call_as(Next)]
  782.     HRESULT RemoteNext(
  783.         [in] ULONG celt,
  784.         [out, size_is(celt), length_is(*pceltFetched)]
  785.         LPOLESTR *rgelt,
  786.         [out] ULONG *pceltFetched);
  787.  
  788.  
  789.     HRESULT Skip(
  790.         [in] ULONG celt);
  791.  
  792.     HRESULT Reset();
  793.  
  794.     HRESULT Clone(
  795.         [out] IEnumString **ppenum);
  796. }
  797.  
  798.  
  799. /****************************************************************************
  800.  *  Structured Storage Interfaces
  801.  ****************************************************************************/
  802.  
  803. [
  804.     object,
  805.     uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),
  806.     pointer_default(unique)
  807. ]
  808. interface ISequentialStream : IUnknown
  809. {
  810.     [local]
  811.     HRESULT Read(
  812.         [out, size_is(cb), length_is(*pcbRead)]
  813.         void *pv,
  814.         [in] ULONG cb,
  815.         [out] ULONG *pcbRead);
  816.  
  817.     [call_as(Read)]
  818.     HRESULT RemoteRead(
  819.         [out, size_is(cb), length_is(*pcbRead)]
  820.         byte *pv,
  821.         [in] ULONG cb,
  822.         [out] ULONG *pcbRead);
  823.  
  824.     [local]
  825.     HRESULT Write(
  826.         [in, size_is(cb)] void const *pv,
  827.         [in] ULONG cb,
  828.         [out] ULONG *pcbWritten);
  829.  
  830.     [call_as(Write)]
  831.     HRESULT RemoteWrite(
  832.         [in, size_is(cb)] byte const *pv,
  833.         [in] ULONG cb,
  834.         [out] ULONG *pcbWritten);
  835. }
  836.  
  837.  
  838. [
  839.     object,
  840.     uuid(0000000c-0000-0000-C000-000000000046),
  841.     pointer_default(unique)
  842. ]
  843.  
  844. interface IStream : ISequentialStream
  845. {
  846.  
  847.     typedef [unique] IStream *LPSTREAM;
  848.  
  849.     /* Storage stat buffer */
  850.  
  851. cpp_quote("//FSSpec is Macintosh only, defined in macos\files.h")
  852.  
  853. cpp_quote("#ifdef _MAC")
  854.  
  855. cpp_quote("    typedef struct tagSTATSTG")
  856. cpp_quote("    {                      ")
  857. cpp_quote("        LPOLESTR pwcsName;")
  858. cpp_quote("            FSSpec *pspec;")
  859. cpp_quote("        DWORD type;")
  860. cpp_quote("        ULARGE_INTEGER cbSize;")
  861. cpp_quote("        FILETIME mtime;")
  862. cpp_quote("        FILETIME ctime;")
  863. cpp_quote("        FILETIME atime;")
  864. cpp_quote("        DWORD grfMode;")
  865. cpp_quote("        DWORD grfLocksSupported;")
  866. cpp_quote("        CLSID clsid;")
  867. cpp_quote("        DWORD grfStateBits;")
  868. cpp_quote("        DWORD reserved;")
  869. cpp_quote("    } STATSTG;")
  870.  
  871. cpp_quote("#else //_MAC")
  872.  
  873.     typedef struct tagSTATSTG
  874.     {
  875.         LPOLESTR pwcsName;
  876.         DWORD type;
  877.         ULARGE_INTEGER cbSize;
  878.         FILETIME mtime;
  879.         FILETIME ctime;
  880.         FILETIME atime;
  881.         DWORD grfMode;
  882.         DWORD grfLocksSupported;
  883.         CLSID clsid;
  884.         DWORD grfStateBits;
  885.     DWORD reserved;
  886.     } STATSTG;
  887.  
  888. cpp_quote("#endif //_MAC")
  889.  
  890.     /* Storage element types */
  891.     typedef enum tagSTGTY
  892.     {
  893.         STGTY_STORAGE   = 1,
  894.         STGTY_STREAM    = 2,
  895.         STGTY_LOCKBYTES = 3,
  896.         STGTY_PROPERTY  = 4
  897.     } STGTY;
  898.  
  899.     typedef enum tagSTREAM_SEEK
  900.     {
  901.         STREAM_SEEK_SET = 0,
  902.         STREAM_SEEK_CUR = 1,
  903.         STREAM_SEEK_END = 2
  904.     } STREAM_SEEK;
  905.  
  906.     typedef enum tagLOCKTYPE
  907.     {
  908.         LOCK_WRITE      = 1,
  909.         LOCK_EXCLUSIVE  = 2,
  910.         LOCK_ONLYONCE   = 4
  911.     } LOCKTYPE;
  912.  
  913.     [local]
  914.     HRESULT Seek(
  915.         [in] LARGE_INTEGER dlibMove,
  916.         [in] DWORD dwOrigin,
  917.         [out] ULARGE_INTEGER *plibNewPosition);
  918.  
  919.     [call_as(Seek)]
  920.     HRESULT RemoteSeek(
  921.         [in] LARGE_INTEGER dlibMove,
  922.         [in] DWORD dwOrigin,
  923.         [out] ULARGE_INTEGER *plibNewPosition);
  924.  
  925.     HRESULT SetSize(
  926.         [in] ULARGE_INTEGER libNewSize);
  927.  
  928.     [local]
  929.     HRESULT CopyTo(
  930.         [in, unique] IStream *pstm,
  931.         [in] ULARGE_INTEGER cb,
  932.         [out] ULARGE_INTEGER *pcbRead,
  933.         [out] ULARGE_INTEGER *pcbWritten);
  934.  
  935.     [call_as(CopyTo)]
  936.     HRESULT RemoteCopyTo(
  937.         [in, unique] IStream *pstm,
  938.         [in] ULARGE_INTEGER cb,
  939.         [out] ULARGE_INTEGER *pcbRead,
  940.         [out] ULARGE_INTEGER *pcbWritten);
  941.  
  942.     HRESULT Commit(
  943.         [in] DWORD grfCommitFlags);
  944.  
  945.     HRESULT Revert();
  946.  
  947.     HRESULT LockRegion(
  948.         [in] ULARGE_INTEGER libOffset,
  949.         [in] ULARGE_INTEGER cb,
  950.         [in] DWORD dwLockType);
  951.  
  952.     HRESULT UnlockRegion(
  953.         [in] ULARGE_INTEGER libOffset,
  954.         [in] ULARGE_INTEGER cb,
  955.         [in] DWORD dwLockType);
  956.  
  957.     HRESULT Stat(
  958.         [out] STATSTG *pstatstg,
  959.         [in] DWORD grfStatFlag);
  960.  
  961.     HRESULT Clone(
  962.         [out] IStream **ppstm);
  963.  
  964. }
  965.  
  966. [
  967.     object,
  968.     uuid(0000000d-0000-0000-C000-000000000046),
  969.     pointer_default(unique)
  970. ]
  971.  
  972. interface IEnumSTATSTG : IUnknown
  973. {
  974.  
  975.     typedef [unique] IEnumSTATSTG *LPENUMSTATSTG;
  976.  
  977.     [local]
  978.     HRESULT Next(
  979.         [in] ULONG celt,
  980.         [out, size_is(celt), length_is(*pceltFetched)]
  981.         STATSTG *rgelt,
  982.         [out] ULONG *pceltFetched);
  983.  
  984.     [call_as(Next)]
  985.     HRESULT RemoteNext(
  986.         [in] ULONG celt,
  987.         [out, size_is(celt), length_is(*pceltFetched)]
  988.         STATSTG *rgelt,
  989.         [out] ULONG *pceltFetched);
  990.  
  991.     HRESULT Skip(
  992.         [in] ULONG celt);
  993.  
  994.     HRESULT Reset();
  995.  
  996.     HRESULT Clone(
  997.         [out] IEnumSTATSTG **ppenum);
  998. }
  999.  
  1000. [
  1001.     object,
  1002.     uuid(0000000b-0000-0000-C000-000000000046),
  1003.     pointer_default(unique)
  1004. ]
  1005.  
  1006. interface IStorage : IUnknown
  1007. {
  1008.  
  1009.     typedef [unique] IStorage * LPSTORAGE;
  1010.  
  1011.     typedef struct tagRemSNB
  1012.     {
  1013.         unsigned long ulCntStr;
  1014.         unsigned long ulCntChar;
  1015.         [size_is(ulCntChar)] OLECHAR rgString[];
  1016.     } RemSNB;
  1017.  
  1018.     typedef [unique] RemSNB * wireSNB;
  1019.     typedef [wire_marshal(wireSNB)] OLECHAR **SNB;
  1020.  
  1021.     HRESULT CreateStream(
  1022.         [in, string] const OLECHAR *pwcsName,
  1023.         [in] DWORD grfMode,
  1024.         [in] DWORD reserved1,
  1025.         [in] DWORD reserved2,
  1026.         [out] IStream **ppstm);
  1027.  
  1028.     [local]
  1029.     HRESULT OpenStream(
  1030.         [in, string] const OLECHAR *pwcsName,
  1031.         [in, unique] void *reserved1,
  1032.         [in] DWORD grfMode,
  1033.         [in] DWORD reserved2,
  1034.         [out] IStream **ppstm);
  1035.  
  1036.     [call_as(OpenStream)]
  1037.     HRESULT RemoteOpenStream(
  1038.         [in, string] const OLECHAR *pwcsName,
  1039.         [in] unsigned long cbReserved1,
  1040.         [in, unique, size_is(cbReserved1)] byte *reserved1,
  1041.         [in] DWORD grfMode,
  1042.         [in] DWORD reserved2,
  1043.         [out] IStream **ppstm);
  1044.  
  1045.     HRESULT CreateStorage(
  1046.         [in, string] const OLECHAR *pwcsName,
  1047.         [in] DWORD grfMode,
  1048.         [in] DWORD reserved1,
  1049.         [in] DWORD reserved2,
  1050.         [out] IStorage **ppstg);
  1051.  
  1052.     HRESULT OpenStorage(
  1053.         [in, unique, string] const OLECHAR *pwcsName,
  1054.         [in, unique] IStorage *pstgPriority,
  1055.         [in] DWORD grfMode,
  1056.         [in, unique] SNB snbExclude,
  1057.         [in] DWORD reserved,
  1058.         [out] IStorage **ppstg);
  1059.  
  1060.     HRESULT CopyTo(
  1061.         [in] DWORD ciidExclude,
  1062.         [in, unique, size_is(ciidExclude)] IID const *rgiidExclude,
  1063.         [in, unique] SNB snbExclude,
  1064.         [in, unique] IStorage *pstgDest);
  1065.  
  1066.     HRESULT MoveElementTo(
  1067.         [in, string] const OLECHAR * pwcsName,
  1068.         [in, unique] IStorage *pstgDest,
  1069.         [in, string] const OLECHAR *pwcsNewName,
  1070.         [in] DWORD grfFlags);
  1071.  
  1072.     HRESULT Commit(
  1073.         [in] DWORD grfCommitFlags);
  1074.  
  1075.     HRESULT Revert();
  1076.  
  1077.     [local]
  1078.     HRESULT EnumElements(
  1079.         [in] DWORD reserved1,
  1080.         [in, unique, size_is(1)] void *reserved2,
  1081.         [in] DWORD reserved3,
  1082.         [out] IEnumSTATSTG **ppenum);
  1083.  
  1084.  
  1085.     [call_as(EnumElements)]
  1086.     HRESULT RemoteEnumElements(
  1087.         [in] DWORD reserved1,
  1088.         [in] unsigned long cbReserved2,
  1089.         [in, unique, size_is(cbReserved2)] byte *reserved2,
  1090.         [in] DWORD reserved3,
  1091.         [out] IEnumSTATSTG **ppenum);
  1092.  
  1093.     HRESULT DestroyElement(
  1094.         [in, string] const OLECHAR *pwcsName);
  1095.  
  1096.     HRESULT RenameElement(
  1097.         [in, string] const OLECHAR *pwcsOldName,
  1098.         [in, string] const OLECHAR *pwcsNewName);
  1099.  
  1100.     HRESULT SetElementTimes(
  1101.         [in, unique, string] const OLECHAR *pwcsName,
  1102.         [in, unique] FILETIME const *pctime,
  1103.         [in, unique] FILETIME const *patime,
  1104.         [in, unique] FILETIME const *pmtime);
  1105.  
  1106.     HRESULT SetClass(
  1107.         [in] REFCLSID clsid);
  1108.  
  1109.     HRESULT SetStateBits(
  1110.         [in] DWORD grfStateBits,
  1111.         [in] DWORD grfMask);
  1112.  
  1113.     HRESULT Stat(
  1114.         [out] STATSTG *pstatstg,
  1115.         [in] DWORD grfStatFlag);
  1116. }
  1117.  
  1118. [
  1119.     object,
  1120.     uuid(0000010b-0000-0000-C000-000000000046),
  1121.     pointer_default(unique)
  1122. ]
  1123.  
  1124. interface IPersistFile : IPersist
  1125. {
  1126.  
  1127.     typedef [unique] IPersistFile *LPPERSISTFILE;
  1128.  
  1129.     HRESULT IsDirty
  1130.     (
  1131.         void
  1132.     );
  1133.  
  1134.     HRESULT Load
  1135.     (
  1136.         [in] LPCOLESTR pszFileName,
  1137.         [in] DWORD dwMode
  1138.     );
  1139.  
  1140.     HRESULT Save
  1141.     (
  1142.         [in, unique] LPCOLESTR pszFileName,
  1143.         [in] BOOL fRemember
  1144.     );
  1145.  
  1146.     HRESULT SaveCompleted
  1147.     (
  1148.         [in, unique] LPCOLESTR pszFileName
  1149.     );
  1150.  
  1151.     HRESULT GetCurFile
  1152.     (
  1153.         [out] LPOLESTR *ppszFileName
  1154.     );
  1155. }
  1156.  
  1157. [
  1158.     object,
  1159.     uuid(0000010a-0000-0000-C000-000000000046),
  1160.     pointer_default(unique)
  1161. ]
  1162.  
  1163. interface IPersistStorage : IPersist
  1164. {
  1165.  
  1166.     typedef [unique] IPersistStorage *LPPERSISTSTORAGE;
  1167.  
  1168.     HRESULT IsDirty
  1169.     (
  1170.         void
  1171.     );
  1172.  
  1173.     HRESULT InitNew
  1174.     (
  1175.         [in, unique] IStorage *pStg
  1176.     );
  1177.  
  1178.     HRESULT Load
  1179.     (
  1180.         [in, unique] IStorage *pStg
  1181.     );
  1182.  
  1183.     HRESULT Save
  1184.     (
  1185.         [in, unique] IStorage *pStgSave,
  1186.         [in] BOOL fSameAsLoad
  1187.     );
  1188.  
  1189.     HRESULT SaveCompleted
  1190.     (
  1191.         [in, unique] IStorage *pStgNew
  1192.     );
  1193.  
  1194.     HRESULT HandsOffStorage
  1195.     (
  1196.         void
  1197.     );
  1198. }
  1199.  
  1200. [
  1201.     object,
  1202.     uuid(0000000a-0000-0000-C000-000000000046),
  1203.     pointer_default(unique)
  1204. ]
  1205.  
  1206. interface ILockBytes : IUnknown
  1207. {
  1208.  
  1209.     typedef [unique] ILockBytes *LPLOCKBYTES;
  1210.  
  1211.     [local]
  1212.     HRESULT ReadAt(
  1213.         [in] ULARGE_INTEGER ulOffset,
  1214.         [out, size_is(cb), length_is(*pcbRead)]
  1215.         void *pv,
  1216.         [in] ULONG cb,
  1217.         [out] ULONG *pcbRead);
  1218.  
  1219.     [call_as(ReadAt)]
  1220.     HRESULT _stdcall RemoteReadAt(
  1221.         [in] ULARGE_INTEGER ulOffset,
  1222.         [out, size_is(cb), length_is(*pcbRead)]
  1223.         byte *pv,
  1224.         [in] ULONG cb,
  1225.         [out] ULONG *pcbRead);
  1226.  
  1227.     [local]
  1228.     HRESULT WriteAt(
  1229.         [in] ULARGE_INTEGER ulOffset,
  1230.         [in, size_is(cb)] void const *pv,
  1231.         [in] ULONG cb,
  1232.         [out] ULONG *pcbWritten);
  1233.  
  1234.     [call_as(WriteAt)]
  1235.     HRESULT RemoteWriteAt(
  1236.         [in] ULARGE_INTEGER ulOffset,
  1237.         [in, size_is(cb)] byte const *pv,
  1238.         [in] ULONG cb,
  1239.         [out] ULONG *pcbWritten);
  1240.  
  1241.     HRESULT Flush();
  1242.  
  1243.     HRESULT SetSize(
  1244.         [in] ULARGE_INTEGER cb);
  1245.  
  1246.     HRESULT LockRegion(
  1247.         [in] ULARGE_INTEGER libOffset,
  1248.         [in] ULARGE_INTEGER cb,
  1249.         [in] DWORD dwLockType);
  1250.  
  1251.     HRESULT UnlockRegion(
  1252.         [in] ULARGE_INTEGER libOffset,
  1253.         [in] ULARGE_INTEGER cb,
  1254.         [in] DWORD dwLockType);
  1255.  
  1256.     HRESULT Stat(
  1257.         [out] STATSTG *pstatstg,
  1258.         [in] DWORD grfStatFlag);
  1259. }
  1260.  
  1261. [
  1262.     object,
  1263.     uuid(00000103-0000-0000-C000-000000000046),
  1264.     pointer_default(unique)
  1265. ]
  1266.  
  1267. interface IEnumFORMATETC : IUnknown
  1268. {
  1269.  
  1270.     typedef [unique] IEnumFORMATETC *LPENUMFORMATETC;
  1271.  
  1272.  
  1273.     typedef struct tagDVTARGETDEVICE {
  1274.         DWORD tdSize;
  1275.         WORD tdDriverNameOffset;
  1276.         WORD tdDeviceNameOffset;
  1277.         WORD tdPortNameOffset;
  1278.         WORD tdExtDevmodeOffset;
  1279.         [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))]
  1280.         BYTE tdData[];
  1281.     }DVTARGETDEVICE;
  1282.  
  1283.  
  1284.     typedef CLIPFORMAT *LPCLIPFORMAT;
  1285.  
  1286.     typedef struct tagFORMATETC {
  1287.         CLIPFORMAT cfFormat;
  1288.         [unique] DVTARGETDEVICE * ptd;
  1289.         DWORD dwAspect;
  1290.         LONG lindex;
  1291.         DWORD tymed;
  1292.     }FORMATETC, *LPFORMATETC;
  1293.  
  1294.     [local]
  1295.     HRESULT Next(
  1296.         [in] ULONG celt,
  1297.         [out, size_is(celt), length_is(*pceltFetched )]
  1298.         FORMATETC *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.         FORMATETC *rgelt,
  1306.         [out] ULONG *pceltFetched);
  1307.  
  1308.     HRESULT Skip(
  1309.         [in] ULONG celt);
  1310.  
  1311.     HRESULT Reset();
  1312.  
  1313.     HRESULT Clone(
  1314.         [out] IEnumFORMATETC **ppenum);
  1315. }
  1316.  
  1317. [
  1318.     object,
  1319.     uuid(00000105-0000-0000-C000-000000000046),
  1320.     pointer_default(unique)
  1321. ]
  1322.  
  1323. interface IEnumSTATDATA : IUnknown
  1324. {
  1325.  
  1326.     typedef [unique] IEnumSTATDATA *LPENUMSTATDATA;
  1327.  
  1328.     //Advise Flags
  1329.     typedef enum tagADVF
  1330.     {
  1331.         ADVF_NODATA = 1,
  1332.         ADVF_PRIMEFIRST = 2,
  1333.         ADVF_ONLYONCE = 4,
  1334.         ADVF_DATAONSTOP = 64,
  1335.         ADVFCACHE_NOHANDLER = 8,
  1336.         ADVFCACHE_FORCEBUILTIN = 16,
  1337.         ADVFCACHE_ONSAVE = 32
  1338.     } ADVF;
  1339.  
  1340.  
  1341.     // Stats for data; used by several enumerations and by at least one
  1342.     // implementation of IDataAdviseHolder; if a field is not used, it
  1343.     // will be NULL.
  1344.  
  1345.     typedef struct tagSTATDATA
  1346.     {                              // field used by:
  1347.         FORMATETC formatetc;       // EnumAdvise, EnumData (cache), EnumFormats
  1348.         DWORD advf;                // EnumAdvise, EnumData (cache)
  1349.         [unique] IAdviseSink * pAdvSink; // EnumAdvise
  1350.         DWORD dwConnection;        // EnumAdvise
  1351.     } STATDATA;
  1352.     typedef STATDATA *LPSTATDATA;
  1353.  
  1354.     [local]
  1355.     HRESULT Next(
  1356.         [in] ULONG celt,
  1357.         [out, size_is(celt), length_is(*pceltFetched)]
  1358.         STATDATA *rgelt,
  1359.         [out] ULONG *pceltFetched);
  1360.  
  1361.     [call_as(Next)]
  1362.     HRESULT RemoteNext(
  1363.         [in] ULONG celt,
  1364.         [out, size_is(celt), length_is(*pceltFetched)]
  1365.         STATDATA *rgelt,
  1366.         [out] ULONG *pceltFetched);
  1367.  
  1368.     HRESULT Skip(
  1369.         [in] ULONG celt);
  1370.  
  1371.     HRESULT Reset();
  1372.  
  1373.     HRESULT Clone(
  1374.         [out] IEnumSTATDATA **ppenum);
  1375. }
  1376.  
  1377. [
  1378.     object,
  1379.     uuid(00000012-0000-0000-C000-000000000046),
  1380.     pointer_default(unique)
  1381. ]
  1382.  
  1383. interface IRootStorage : IUnknown
  1384. {
  1385.  
  1386.     typedef [unique] IRootStorage *LPROOTSTORAGE;
  1387.  
  1388.     HRESULT SwitchToFile
  1389.     (
  1390.         [in] LPOLESTR pszFile
  1391.     );
  1392. }
  1393.  
  1394.  
  1395. /****************************************************************************
  1396.  *  Notification Interfaces
  1397.  ****************************************************************************/
  1398.  
  1399. [
  1400.     object,
  1401.     uuid(0000010f-0000-0000-C000-000000000046),
  1402.     pointer_default(unique)
  1403. ]
  1404.  
  1405. interface IAdviseSink : IUnknown
  1406. {
  1407.  
  1408.     typedef IAdviseSink *LPADVISESINK;
  1409.  
  1410.     typedef [v1_enum] enum tagTYMED {
  1411.         TYMED_HGLOBAL = 1,
  1412.         TYMED_FILE = 2,
  1413.         TYMED_ISTREAM = 4,
  1414.         TYMED_ISTORAGE = 8,
  1415.         TYMED_GDI = 16,
  1416.         TYMED_MFPICT = 32,
  1417.         TYMED_ENHMF = 64,
  1418.         TYMED_NULL = 0
  1419.     } TYMED;
  1420.  
  1421.     cpp_quote("#ifndef RC_INVOKED")
  1422.     cpp_quote("#pragma warning(disable:4200)")
  1423.     cpp_quote("#endif")
  1424.  
  1425.     typedef struct tagRemSTGMEDIUM {
  1426.         DWORD tymed;
  1427.         DWORD dwHandleType;
  1428.         unsigned long pData;
  1429.         unsigned long pUnkForRelease;
  1430.         unsigned long cbData;
  1431.         [size_is(cbData)] byte data[];
  1432.     } RemSTGMEDIUM;
  1433.     cpp_quote("#ifndef RC_INVOKED")
  1434.     cpp_quote("#pragma warning(default:4200)")
  1435.     cpp_quote("#endif")
  1436.  
  1437.  
  1438. cpp_quote("#ifdef NONAMELESSUNION")
  1439. cpp_quote("typedef struct tagSTGMEDIUM {")
  1440. cpp_quote("    DWORD tymed;")
  1441. cpp_quote("    union {")
  1442. cpp_quote("        HBITMAP hBitmap;")
  1443. cpp_quote("        HMETAFILEPICT hMetaFilePict;")
  1444. cpp_quote("        HENHMETAFILE hEnhMetaFile;")
  1445. cpp_quote("        HGLOBAL hGlobal;")
  1446. cpp_quote("        LPOLESTR lpszFileName;")
  1447. cpp_quote("        IStream *pstm;")
  1448. cpp_quote("        IStorage *pstg;")
  1449. cpp_quote("        } u;")
  1450. cpp_quote("    IUnknown *pUnkForRelease;")
  1451. cpp_quote("}uSTGMEDIUM;")
  1452. cpp_quote("#else")
  1453.  
  1454.     typedef struct tagSTGMEDIUM {
  1455.     DWORD tymed;
  1456.     [switch_type(DWORD), switch_is((DWORD) tymed)]
  1457.         union
  1458.         {
  1459.         [case(TYMED_GDI)]
  1460.             HBITMAP hBitmap;
  1461.         [case(TYMED_MFPICT)]
  1462.             HMETAFILEPICT hMetaFilePict;
  1463.         [case(TYMED_ENHMF)]
  1464.             HENHMETAFILE hEnhMetaFile;
  1465.         [case(TYMED_HGLOBAL)]
  1466.             HGLOBAL hGlobal;
  1467.         [case(TYMED_FILE)]
  1468.             LPOLESTR lpszFileName;
  1469.         [case(TYMED_ISTREAM)]
  1470.             IStream *pstm;
  1471.         [case(TYMED_ISTORAGE)]
  1472.             IStorage *pstg;
  1473.         [default]
  1474.                 ;
  1475.         };
  1476.         [unique] IUnknown *pUnkForRelease;
  1477.     }uSTGMEDIUM;
  1478.  
  1479. cpp_quote("#endif /* !NONAMELESSUNION */")
  1480.  
  1481.  
  1482. //
  1483. //  wireSTGMEDIUM
  1484. //
  1485. // These flags are #defined (not enumerated) in wingdi.
  1486. // We need to repeat #defines to avoid conflict in the generated file.
  1487. //
  1488.  
  1489. /* Object Definitions for EnumObjects() */
  1490. #define OBJ_PEN             1
  1491. #define OBJ_BRUSH           2
  1492. #define OBJ_DC              3
  1493. #define OBJ_METADC          4
  1494. #define OBJ_PAL             5
  1495. #define OBJ_FONT            6
  1496. #define OBJ_BITMAP          7
  1497. #define OBJ_REGION          8
  1498. #define OBJ_METAFILE        9
  1499. #define OBJ_MEMDC           10
  1500. #define OBJ_EXTPEN          11
  1501. #define OBJ_ENHMETADC       12
  1502. #define OBJ_ENHMETAFILE     13
  1503.  
  1504.     typedef union _GDI_OBJECT switch( DWORD ObjectType ) u
  1505.     {
  1506.         case OBJ_BITMAP:    wireHBITMAP     hBitmap;
  1507.         case OBJ_PAL:       wireHPALETTE    hPalette;
  1508.         default:            wireHGLOBAL     hGeneric;
  1509.     } GDI_OBJECT;
  1510.  
  1511.     typedef struct _userSTGMEDIUM
  1512.     {
  1513.         union _STGMEDIUM_UNION switch( DWORD tymed ) u
  1514.         {
  1515.         case TYMED_NULL:        ;
  1516.         case TYMED_MFPICT:      wireHMETAFILEPICT   hMetaFilePict;
  1517.         case TYMED_ENHMF:       wireHENHMETAFILE    hHEnhMetaFile;
  1518.         case TYMED_GDI:         GDI_OBJECT *        hGdiHandle;
  1519.         case TYMED_HGLOBAL:     wireHGLOBAL         hGlobal;
  1520.         case TYMED_FILE:        LPOLESTR            lpszFileName;
  1521.         case TYMED_ISTREAM:     BYTE_BLOB *         pstm;
  1522.         case TYMED_ISTORAGE:    BYTE_BLOB *         pstg;
  1523.         };
  1524.         IUnknown *              pUnkForRelease;
  1525.     } userSTGMEDIUM;
  1526.  
  1527.     typedef [unique] userSTGMEDIUM  * wireSTGMEDIUM;
  1528.     typedef [wire_marshal( wireSTGMEDIUM )] uSTGMEDIUM STGMEDIUM;
  1529.  
  1530.     typedef [unique] userSTGMEDIUM  * wireASYNC_STGMEDIUM;
  1531.     typedef [wire_marshal( wireASYNC_STGMEDIUM )] STGMEDIUM ASYNC_STGMEDIUM;
  1532.  
  1533.     typedef STGMEDIUM *LPSTGMEDIUM;
  1534.  
  1535.     typedef struct _userFLAG_STGMEDIUM
  1536.     {
  1537.         long                ContextFlags;
  1538.         long                fPassOwnership;
  1539.         userSTGMEDIUM       Stgmed;
  1540.     } userFLAG_STGMEDIUM;
  1541.  
  1542.     typedef [unique] userFLAG_STGMEDIUM  * wireFLAG_STGMEDIUM;
  1543.  
  1544.     typedef [wire_marshal( wireFLAG_STGMEDIUM )]
  1545.         struct _FLAG_STGMEDIUM
  1546.         {
  1547.                 long                ContextFlags;
  1548.                 long                fPassOwnership;
  1549.                 STGMEDIUM           Stgmed;
  1550.         } FLAG_STGMEDIUM;
  1551.  
  1552.  
  1553.     [local]
  1554.     void OnDataChange(
  1555.         [in, unique] FORMATETC *pFormatetc,
  1556.         [in, unique] STGMEDIUM *pStgmed);
  1557.  
  1558.     [local]
  1559.     void OnViewChange(
  1560.         [in] DWORD dwAspect,
  1561.         [in] LONG lindex);
  1562.  
  1563.     [local]
  1564.     void OnRename(
  1565.         [in] IMoniker *pmk);
  1566.  
  1567.     [local]
  1568.     void OnSave();
  1569.  
  1570.     [local]
  1571.     void OnClose();
  1572.  
  1573. #if (__midl > 302)
  1574. // Currently used temporary definitons.
  1575.  
  1576.     [call_as(OnDataChange), async]
  1577.     HRESULT  RemoteOnDataChange(
  1578.         [in] IAsyncManager **ppIAM,
  1579.         [in, unique] FORMATETC *pFormatetc,
  1580.         [in, unique] ASYNC_STGMEDIUM *pStgmed);
  1581.  
  1582.     [call_as(OnViewChange), async]
  1583.     HRESULT  RemoteOnViewChange(
  1584.         [in] IAsyncManager **ppIAM,
  1585.         [in] DWORD dwAspect,
  1586.         [in] LONG lindex);
  1587.  
  1588.     [call_as(OnRename), async]
  1589.     HRESULT  RemoteOnRename(
  1590.         [in] IAsyncManager **ppIAM,
  1591.         [in] IMoniker *pmk);
  1592.  
  1593.     [call_as(OnSave), async]
  1594.     HRESULT  RemoteOnSave(
  1595.         [in] IAsyncManager **ppIAM
  1596.         );
  1597. #else
  1598. // Old definitions kept for convenience.
  1599.  
  1600.     [call_as(OnDataChange), async]
  1601.     void RemoteOnDataChange(
  1602.         [in, unique] FORMATETC *pFormatetc,
  1603.         [in, unique] ASYNC_STGMEDIUM *pStgmed);
  1604.  
  1605.     [call_as(OnViewChange), async]
  1606.     void RemoteOnViewChange(
  1607.         [in] DWORD dwAspect,
  1608.         [in] LONG lindex);
  1609.  
  1610.     [call_as(OnRename), async]
  1611.     void RemoteOnRename(
  1612.         [in] IMoniker *pmk);
  1613.  
  1614.     [call_as(OnSave), async]
  1615.     void RemoteOnSave();
  1616.  
  1617. #endif  // MIDL > 302
  1618.  
  1619.     [call_as(OnClose)]
  1620.     HRESULT RemoteOnClose();
  1621. }
  1622.  
  1623. [
  1624.     object,
  1625.     uuid(00000125-0000-0000-C000-000000000046),
  1626.     pointer_default(unique)
  1627. ]
  1628.  
  1629. interface IAdviseSink2 : IAdviseSink
  1630. {
  1631.  
  1632.     typedef [unique] IAdviseSink2 *LPADVISESINK2;
  1633.  
  1634.     [local]
  1635.     void OnLinkSrcChange(
  1636.         [in, unique] IMoniker *pmk);
  1637.  
  1638. #if (__midl > 302)
  1639. // Currently used temporary definiton
  1640.  
  1641.     [call_as(OnLinkSrcChange), async]
  1642.     HRESULT RemoteOnLinkSrcChange(
  1643.         [in] IAsyncManager **ppIAM,
  1644.         [in, unique] IMoniker *pmk);
  1645. #else
  1646. // Old one for convenience.
  1647.     [call_as(OnLinkSrcChange), async]
  1648.     void RemoteOnLinkSrcChange(
  1649.         [in, unique] IMoniker *pmk);
  1650. #endif
  1651. }
  1652.  
  1653. [
  1654.     object,
  1655.     uuid(0000010e-0000-0000-C000-000000000046),
  1656.     pointer_default(unique)
  1657. ]
  1658.  
  1659. interface IDataObject : IUnknown
  1660. {
  1661.  
  1662.     typedef [unique] IDataObject *LPDATAOBJECT;
  1663.  
  1664.     //DATA format DIRection
  1665.     typedef enum tagDATADIR
  1666.     {
  1667.         DATADIR_GET = 1,
  1668.         DATADIR_SET = 2
  1669.     } DATADIR;
  1670.  
  1671.     [local]
  1672.     HRESULT GetData(
  1673.         [in, unique] FORMATETC *pformatetcIn,
  1674.         [out] STGMEDIUM *pmedium);
  1675.  
  1676.     [call_as(GetData)]
  1677.     HRESULT RemoteGetData(
  1678.         [in, unique] FORMATETC *pformatetcIn,
  1679.         [out] STGMEDIUM *pRemoteMedium);
  1680.  
  1681.     [local]
  1682.     HRESULT GetDataHere(
  1683.         [in, unique] FORMATETC *pformatetc,
  1684.         [in, out] STGMEDIUM *pmedium);
  1685.  
  1686.     [call_as(GetDataHere)]
  1687.     HRESULT RemoteGetDataHere(
  1688.         [in, unique] FORMATETC *pformatetc,
  1689.         [in, out] STGMEDIUM *pRemoteMedium);
  1690.  
  1691.     HRESULT QueryGetData(
  1692.         [in, unique] FORMATETC *pformatetc);
  1693.  
  1694.  
  1695.     HRESULT GetCanonicalFormatEtc(
  1696.         [in, unique] FORMATETC *pformatectIn,
  1697.         [out] FORMATETC *pformatetcOut);
  1698.  
  1699.     [local]
  1700.     HRESULT SetData(
  1701.         [in, unique] FORMATETC *pformatetc,
  1702.         [in, unique] STGMEDIUM *pmedium,
  1703.         [in] BOOL fRelease);
  1704.  
  1705.     [call_as(SetData)]
  1706.     HRESULT RemoteSetData(
  1707.         [in, unique] FORMATETC *pformatetc,
  1708.         [in, unique] FLAG_STGMEDIUM *pmedium,
  1709.         [in] BOOL fRelease);
  1710.  
  1711.     HRESULT EnumFormatEtc(
  1712.         [in] DWORD dwDirection,
  1713.         [out] IEnumFORMATETC **ppenumFormatEtc);
  1714.  
  1715.     HRESULT DAdvise(
  1716.         [in] FORMATETC *pformatetc,
  1717.         [in] DWORD advf,
  1718.         [in, unique] IAdviseSink *pAdvSink,
  1719.         [out] DWORD *pdwConnection);
  1720.  
  1721.     HRESULT DUnadvise(
  1722.         [in] DWORD dwConnection);
  1723.  
  1724.     HRESULT EnumDAdvise(
  1725.         [out] IEnumSTATDATA **ppenumAdvise);
  1726.  
  1727. }
  1728.  
  1729. [
  1730.     local,
  1731.     object,
  1732.     uuid(00000110-0000-0000-C000-000000000046)
  1733. ]
  1734.  
  1735. interface IDataAdviseHolder : IUnknown
  1736. {
  1737.  
  1738.     typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER;
  1739.  
  1740.     HRESULT Advise
  1741.     (
  1742.         [in, unique] IDataObject *pDataObject,
  1743.         [in, unique] FORMATETC *pFetc,
  1744.         [in] DWORD advf,
  1745.         [in, unique] IAdviseSink *pAdvise,
  1746.         [out] DWORD *pdwConnection
  1747.     );
  1748.  
  1749.     HRESULT Unadvise
  1750.     (
  1751.         [in] DWORD dwConnection
  1752.     );
  1753.  
  1754.     HRESULT EnumAdvise
  1755.     (
  1756.         [out] IEnumSTATDATA **ppenumAdvise
  1757.     );
  1758.  
  1759.     HRESULT SendOnDataChange
  1760.     (
  1761.         [in, unique] IDataObject *pDataObject,
  1762.         [in] DWORD dwReserved,
  1763.         [in] DWORD advf
  1764.     );
  1765.  
  1766. }
  1767.  
  1768. [
  1769.     local,
  1770.     object,
  1771.     uuid(00000016-0000-0000-C000-000000000046)
  1772. ]
  1773.  
  1774. interface IMessageFilter : IUnknown
  1775. {
  1776.  
  1777.     typedef [unique] IMessageFilter *LPMESSAGEFILTER;
  1778.  
  1779. // call type used by IMessageFilter::HandleIncomingMessage
  1780. typedef enum tagCALLTYPE
  1781. {
  1782.     CALLTYPE_TOPLEVEL = 1,      // toplevel call - no outgoing call
  1783.     CALLTYPE_NESTED   = 2,      // callback on behalf of previous outgoing call - should always handle
  1784.     CALLTYPE_ASYNC    = 3,      // aysnchronous call - can NOT be rejected
  1785.     CALLTYPE_TOPLEVEL_CALLPENDING = 4,  // new toplevel call with new LID
  1786.     CALLTYPE_ASYNC_CALLPENDING    = 5   // async call - can NOT be rejected
  1787. } CALLTYPE;
  1788.  
  1789. // status of server call - returned by IMessageFilter::HandleIncomingCall
  1790. // and passed to  IMessageFilter::RetryRejectedCall
  1791. typedef enum tagSERVERCALL
  1792. {
  1793.     SERVERCALL_ISHANDLED    = 0,
  1794.     SERVERCALL_REJECTED     = 1,
  1795.     SERVERCALL_RETRYLATER   = 2
  1796. } SERVERCALL;
  1797.  
  1798. // Pending type indicates the level of nesting
  1799. typedef enum tagPENDINGTYPE
  1800. {
  1801.     PENDINGTYPE_TOPLEVEL = 1, // toplevel call
  1802.     PENDINGTYPE_NESTED   = 2  // nested call
  1803. } PENDINGTYPE;
  1804.  
  1805. // return values of MessagePending
  1806. typedef enum tagPENDINGMSG
  1807. {
  1808.     PENDINGMSG_CANCELCALL  = 0, // cancel the outgoing call
  1809.     PENDINGMSG_WAITNOPROCESS  = 1, // wait for the return and don't dispatch the message
  1810.     PENDINGMSG_WAITDEFPROCESS = 2  // wait and dispatch the message
  1811.  
  1812. } PENDINGMSG;
  1813.  
  1814. // additional interface information about the incoming call
  1815. typedef struct tagINTERFACEINFO
  1816. {
  1817.     IUnknown    *pUnk;      // the pointer to the object
  1818.     IID         iid;        // interface id
  1819.     WORD        wMethod;    // interface method
  1820. } INTERFACEINFO, *LPINTERFACEINFO;
  1821.  
  1822.     DWORD HandleInComingCall
  1823.     (
  1824.         [in] DWORD dwCallType,
  1825.         [in] HTASK htaskCaller,
  1826.         [in] DWORD dwTickCount,
  1827.         [in] LPINTERFACEINFO lpInterfaceInfo
  1828.     );
  1829.  
  1830.     DWORD RetryRejectedCall
  1831.     (
  1832.         [in] HTASK htaskCallee,
  1833.         [in] DWORD dwTickCount,
  1834.         [in] DWORD dwRejectType
  1835.     );
  1836.  
  1837.     DWORD MessagePending
  1838.     (
  1839.         [in] HTASK htaskCallee,
  1840.         [in] DWORD dwTickCount,
  1841.         [in] DWORD dwPendingType
  1842.     );
  1843. }
  1844.  
  1845.  
  1846. /****************************************************************************
  1847.  *  Object Remoting Interfaces
  1848.  ****************************************************************************/
  1849.  
  1850. [
  1851.     local,
  1852.     object,
  1853.     uuid(D5F56B60-593B-101A-B569-08002B2DBF7A)
  1854. ]
  1855. interface IRpcChannelBuffer : IUnknown
  1856. {
  1857.  
  1858.     typedef unsigned long RPCOLEDATAREP;
  1859.  
  1860.     typedef struct tagRPCOLEMESSAGE
  1861.     {
  1862.         void             *reserved1;
  1863.         RPCOLEDATAREP     dataRepresentation;
  1864.         void             *Buffer;
  1865.         ULONG             cbBuffer;
  1866.         ULONG             iMethod;
  1867.         void             *reserved2[5];
  1868.         ULONG             rpcFlags;
  1869.     } RPCOLEMESSAGE;
  1870.  
  1871.     typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;
  1872.  
  1873.     HRESULT GetBuffer
  1874.     (
  1875.         [in] RPCOLEMESSAGE *pMessage,
  1876.         [in] REFIID riid
  1877.     );
  1878.  
  1879.     HRESULT SendReceive
  1880.     (
  1881.         [in,out] RPCOLEMESSAGE *pMessage,
  1882.         [out] ULONG *pStatus
  1883.     );
  1884.  
  1885.     HRESULT FreeBuffer
  1886.     (
  1887.         [in] RPCOLEMESSAGE *pMessage
  1888.     );
  1889.  
  1890.     HRESULT GetDestCtx
  1891.     (
  1892.         [out] DWORD *pdwDestContext,
  1893.         [out] void **ppvDestContext
  1894.     );
  1895.  
  1896.     HRESULT IsConnected
  1897.     (
  1898.         void
  1899.     );
  1900.  
  1901. }
  1902.  
  1903. [
  1904.     local,
  1905.     object,
  1906.     uuid(594f31d0-7f19-11d0-b194-00a0c90dc8bf)
  1907. ]
  1908. interface IRpcChannelBuffer2 : IRpcChannelBuffer
  1909. {
  1910.  
  1911.     HRESULT GetProtocolVersion
  1912.     (
  1913.         [in,out] DWORD *pdwVersion
  1914.     );
  1915. }
  1916.  
  1917. [
  1918.     local,
  1919.     object,
  1920.     uuid(25B15600-0115-11d0-BF0D-00AA00B8DFD2)
  1921. ]
  1922. interface IRpcChannelBuffer3 : IRpcChannelBuffer2
  1923. {
  1924.  
  1925.     HRESULT Send
  1926.     (
  1927.         [in,out] RPCOLEMESSAGE *pMsg,
  1928.         [out]    ULONG *pulStatus
  1929.     );
  1930.  
  1931.     HRESULT Receive
  1932.     (
  1933.         [in,out] RPCOLEMESSAGE *pMsg,
  1934.         [in]     ULONG ulSize,
  1935.         [out]    ULONG *pulStatus
  1936.     );
  1937.  
  1938.     HRESULT Cancel
  1939.     (
  1940.         [in] RPCOLEMESSAGE *pMsg
  1941.     );
  1942.  
  1943.     HRESULT GetCallContext
  1944.     (
  1945.         [in]  RPCOLEMESSAGE *pMsg,
  1946.         [in]  REFIID riid,
  1947.         [out] void **pInterface
  1948.     );
  1949.  
  1950.     HRESULT GetDestCtxEx
  1951.     (
  1952.         [in] RPCOLEMESSAGE *pMsg,
  1953.         [out] DWORD *pdwDestContext,
  1954.         [out] void **ppvDestContext
  1955.     );
  1956.  
  1957.     HRESULT GetState
  1958.     (
  1959.         [in]  RPCOLEMESSAGE   *pMsg,
  1960.         [out] DWORD           *pState
  1961.     );
  1962.  
  1963.     HRESULT RegisterAsync
  1964.     (
  1965.         [in] RPCOLEMESSAGE *pMsg,
  1966.         [in] IAsyncManager *pAsyncMgr
  1967.     );
  1968.  
  1969. }
  1970.  
  1971.  
  1972. [
  1973.     local,
  1974.     object,
  1975.     uuid(D5F56A34-593B-101A-B569-08002B2DBF7A)
  1976. ]
  1977. interface IRpcProxyBuffer : IUnknown
  1978. {
  1979.  
  1980.     HRESULT Connect
  1981.     (
  1982.         [in, unique] IRpcChannelBuffer *pRpcChannelBuffer
  1983.     );
  1984.  
  1985.     void Disconnect
  1986.     (
  1987.         void
  1988.     );
  1989.  
  1990. }
  1991.  
  1992. [
  1993.     local,
  1994.     object,
  1995.     uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A)
  1996. ]
  1997. interface IRpcStubBuffer : IUnknown
  1998. {
  1999.  
  2000.     HRESULT Connect
  2001.     (
  2002.         [in] IUnknown *pUnkServer
  2003.     );
  2004.  
  2005.     void Disconnect();
  2006.  
  2007.     HRESULT Invoke
  2008.     (
  2009.         [in] RPCOLEMESSAGE *_prpcmsg,
  2010.         [in] IRpcChannelBuffer *_pRpcChannelBuffer
  2011.     );
  2012.  
  2013.     IRpcStubBuffer *IsIIDSupported
  2014.     (
  2015.         [in] REFIID riid
  2016.     );
  2017.  
  2018.     ULONG CountRefs
  2019.     (
  2020.         void
  2021.     );
  2022.  
  2023.     HRESULT DebugServerQueryInterface
  2024.     (
  2025.         void **ppv
  2026.     );
  2027.  
  2028.     void DebugServerRelease
  2029.     (
  2030.         void *pv
  2031.     );
  2032.  
  2033. }
  2034.  
  2035.  
  2036.  
  2037. [
  2038.     local,
  2039.     object,
  2040.     uuid(D5F569D0-593B-101A-B569-08002B2DBF7A)
  2041. ]
  2042. interface IPSFactoryBuffer : IUnknown
  2043. {
  2044.  
  2045.     HRESULT CreateProxy
  2046.     (
  2047.         [in] IUnknown *pUnkOuter,
  2048.         [in] REFIID riid,
  2049.         [out] IRpcProxyBuffer **ppProxy,
  2050.         [out] void **ppv
  2051.     );
  2052.  
  2053.     HRESULT CreateStub
  2054.     (
  2055.         [in] REFIID riid,
  2056.         [in, unique] IUnknown *pUnkServer,
  2057.         [out] IRpcStubBuffer **ppStub
  2058.     );
  2059. }
  2060.  
  2061. cpp_quote( "#if  (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM" )
  2062. cpp_quote( "// This interface is only valid on Windows NT 4.0" )
  2063.  
  2064. // This structure contains additional data for hooks.  As a backward
  2065. // compatability hack, the entire structure is passed in place of the
  2066. // RIID parameter on all hook methods.  Thus the IID must be the first
  2067. // parameter.  As a forward compatability hack the second field is the
  2068. // current size of the structure.
  2069. typedef struct SChannelHookCallInfo
  2070. {
  2071.     IID               iid;
  2072.     DWORD             cbSize;
  2073.     GUID              uCausality;
  2074.     DWORD             dwServerPid;
  2075.     DWORD             iMethod;
  2076.     void             *pObject;
  2077. } SChannelHookCallInfo;
  2078.  
  2079. [
  2080.     local,
  2081.     object,
  2082.     uuid(1008c4a0-7613-11cf-9af1-0020af6e72f4)
  2083. ]
  2084. interface IChannelHook : IUnknown
  2085. {
  2086.     void ClientGetSize(
  2087.         [in]  REFGUID uExtent,
  2088.         [in]  REFIID  riid,
  2089.         [out] ULONG  *pDataSize );
  2090.  
  2091.     void ClientFillBuffer(
  2092.         [in]      REFGUID uExtent,
  2093.         [in]      REFIID  riid,
  2094.         [in, out] ULONG  *pDataSize,
  2095.         [in]      void   *pDataBuffer );
  2096.  
  2097.     void ClientNotify(
  2098.         [in] REFGUID uExtent,
  2099.         [in] REFIID  riid,
  2100.         [in] ULONG   cbDataSize,
  2101.         [in] void   *pDataBuffer,
  2102.         [in] DWORD   lDataRep,
  2103.         [in] HRESULT hrFault );
  2104.  
  2105.     void ServerNotify(
  2106.         [in] REFGUID uExtent,
  2107.         [in] REFIID  riid,
  2108.         [in] ULONG   cbDataSize,
  2109.         [in] void   *pDataBuffer,
  2110.         [in] DWORD   lDataRep );
  2111.  
  2112.     void ServerGetSize(
  2113.         [in]  REFGUID uExtent,
  2114.         [in]  REFIID  riid,
  2115.         [in]  HRESULT hrFault,
  2116.         [out] ULONG  *pDataSize );
  2117.  
  2118.     void ServerFillBuffer(
  2119.         [in]      REFGUID uExtent,
  2120.         [in]      REFIID  riid,
  2121.         [in, out] ULONG  *pDataSize,
  2122.         [in]      void   *pDataBuffer,
  2123.         [in]      HRESULT hrFault );
  2124. };
  2125.  
  2126. cpp_quote( "#endif //DCOM" )
  2127.  
  2128. /****************************************************************************
  2129.  *  Property Storage Interfaces
  2130.  ****************************************************************************/
  2131.  
  2132. interface IPropertyStorage;
  2133. interface IEnumSTATPROPSTG;
  2134. interface IEnumSTATPROPSETSTG;
  2135.  
  2136. [
  2137.     object,
  2138.     uuid(00000138-0000-0000-C000-000000000046),
  2139.     pointer_default(unique)
  2140. ]
  2141.  
  2142. interface IPropertyStorage : IUnknown
  2143. {
  2144.  
  2145.     cpp_quote("")
  2146.     cpp_quote("// Well-known Property Set Format IDs")
  2147.     extern const FMTID FMTID_SummaryInformation;
  2148.     extern const FMTID FMTID_DocSummaryInformation;
  2149.     extern const FMTID FMTID_UserDefinedProperties;
  2150.  
  2151.     cpp_quote("")
  2152.     cpp_quote("// Flags for IPropertySetStorage::Create")
  2153.     const DWORD PROPSETFLAG_DEFAULT = 0;
  2154.     const DWORD PROPSETFLAG_NONSIMPLE = 1;
  2155.     const DWORD PROPSETFLAG_ANSI = 2;
  2156.     cpp_quote("// This flag is only supported on StgCreatePropStg & StgOpenPropStg")
  2157.     const DWORD PROPSETFLAG_UNBUFFERED = 4;
  2158.  
  2159.     typedef [unique] IPropertyStorage * LPPROPERTYSTORAGE;
  2160.  
  2161.     typedef struct tagPROPVARIANT PROPVARIANT;
  2162.  
  2163.     #define TYPEDEF_CA(type, name) \
  2164.         typedef struct tag##name\
  2165.         {\
  2166.             ULONG   cElems;\
  2167.             [size_is( cElems )]\
  2168.             type *  pElems;\
  2169.         } name
  2170.  
  2171.     TYPEDEF_CA(unsigned char,       CAUB);
  2172.     TYPEDEF_CA(short,               CAI);
  2173.     TYPEDEF_CA(USHORT,              CAUI);
  2174.     TYPEDEF_CA(long,                CAL);
  2175.     TYPEDEF_CA(ULONG,               CAUL);
  2176.     TYPEDEF_CA(float,               CAFLT);
  2177.     TYPEDEF_CA(double,              CADBL);
  2178.     TYPEDEF_CA(CY,                  CACY);
  2179.     TYPEDEF_CA(DATE,                CADATE);
  2180.     TYPEDEF_CA(BSTR,                CABSTR);
  2181.     TYPEDEF_CA(BSTRBLOB,            CABSTRBLOB);
  2182.     TYPEDEF_CA(VARIANT_BOOL,        CABOOL);
  2183.     TYPEDEF_CA(SCODE,               CASCODE);
  2184.     TYPEDEF_CA(PROPVARIANT,         CAPROPVARIANT);
  2185.     TYPEDEF_CA(LARGE_INTEGER,       CAH);
  2186.     TYPEDEF_CA(ULARGE_INTEGER,      CAUH);
  2187.     TYPEDEF_CA(LPSTR,               CALPSTR);
  2188.     TYPEDEF_CA(LPWSTR,              CALPWSTR);
  2189.     TYPEDEF_CA(FILETIME,            CAFILETIME);
  2190.     TYPEDEF_CA(CLIPDATA,            CACLIPDATA);
  2191.     TYPEDEF_CA(CLSID,               CACLSID);
  2192.  
  2193. cpp_quote("// Disable the warning about the obsolete member named 'bool'")
  2194. cpp_quote("// 'bool', 'true', 'false', 'mutable', 'explicit', & 'typename'")
  2195. cpp_quote("// are reserved keywords")
  2196. cpp_quote("#pragma warning(disable:4237)")
  2197.  
  2198.     struct tagPROPVARIANT
  2199.     {
  2200.         VARTYPE vt;
  2201.         WORD    wReserved1;
  2202.         WORD    wReserved2;
  2203.         WORD    wReserved3;
  2204.         [switch_is((unsigned short) (vt & 0x1fff))] union
  2205.         {
  2206.             [case(VT_EMPTY, VT_NULL)]
  2207.                 ;
  2208.             [case(VT_UI1)]
  2209.                 UCHAR               bVal;
  2210.             [case(VT_I2)]
  2211.                 short               iVal;
  2212.             [case(VT_UI2)]
  2213.                 USHORT              uiVal;
  2214.             [case(VT_BOOL)]
  2215.                 VARIANT_BOOL        boolVal;
  2216.             [case(VT_ILLEGAL)]  // obsolete field name; use boolVal
  2217.                 _VARIANT_BOOL        bool;
  2218.             [case(VT_I4)]
  2219.                 long                lVal;
  2220.             [case(VT_UI4)]
  2221.                 ULONG               ulVal;
  2222.             [case(VT_R4)]
  2223.                 float               fltVal;
  2224.             [case(VT_ERROR)]
  2225.                 SCODE               scode;
  2226.             [case(VT_I8)]
  2227.                 LARGE_INTEGER       hVal;
  2228.             [case(VT_UI8)]
  2229.                 ULARGE_INTEGER      uhVal;
  2230.             [case(VT_R8)]
  2231.                 double              dblVal;
  2232.             [case(VT_CY)]
  2233.                 CY                  cyVal;
  2234.             [case(VT_DATE)]
  2235.                 DATE                date;
  2236.             [case(VT_FILETIME)]
  2237.                 FILETIME            filetime;
  2238.             [case(VT_CLSID)]
  2239.                 CLSID *             puuid;
  2240.             [case(VT_BLOB, VT_BLOB_OBJECT)]
  2241.                 BLOB                blob;
  2242.             [case(VT_CF)]
  2243.                 CLIPDATA            *pclipdata;
  2244.             [case(VT_STREAM, VT_STREAMED_OBJECT)]
  2245.                 IStream *           pStream;
  2246.             [case(VT_STORAGE, VT_STORED_OBJECT)]
  2247.                 IStorage *          pStorage;
  2248.             [case(VT_BSTR)]
  2249.                 BSTR                bstrVal;
  2250.             [case(VT_BSTR_BLOB)]        // System use only
  2251.                 BSTRBLOB            bstrblobVal;
  2252.             [case(VT_LPSTR)]
  2253.                 LPSTR               pszVal;
  2254.             [case(VT_LPWSTR)]
  2255.                 LPWSTR              pwszVal;
  2256.             [case(VT_UI1|VT_VECTOR)]
  2257.                 CAUB                caub;
  2258.             [case(VT_I2|VT_VECTOR)]
  2259.                 CAI                 cai;
  2260.             [case(VT_UI2|VT_VECTOR)]
  2261.                 CAUI                caui;
  2262.             [case(VT_BOOL|VT_VECTOR)]
  2263.                 CABOOL              cabool;
  2264.             [case(VT_I4|VT_VECTOR)]
  2265.                 CAL                 cal;
  2266.             [case(VT_UI4|VT_VECTOR)]
  2267.                 CAUL                caul;
  2268.             [case(VT_R4|VT_VECTOR)]
  2269.                 CAFLT               caflt;
  2270.             [case(VT_ERROR|VT_VECTOR)]
  2271.                 CASCODE             cascode;
  2272.             [case(VT_I8|VT_VECTOR)]
  2273.                 CAH                 cah;
  2274.             [case(VT_UI8|VT_VECTOR)]
  2275.                 CAUH                cauh;
  2276.             [case(VT_R8|VT_VECTOR)]
  2277.                 CADBL               cadbl;
  2278.             [case(VT_CY|VT_VECTOR)]
  2279.                 CACY                cacy;
  2280.             [case(VT_DATE|VT_VECTOR)]
  2281.                 CADATE              cadate;
  2282.             [case(VT_FILETIME|VT_VECTOR)]
  2283.                 CAFILETIME          cafiletime;
  2284.             [case(VT_CLSID|VT_VECTOR)]
  2285.                 CACLSID             cauuid;
  2286.             [case(VT_CF|VT_VECTOR)]
  2287.                 CACLIPDATA          caclipdata;
  2288.             [case(VT_BSTR|VT_VECTOR)]
  2289.                 CABSTR              cabstr;
  2290.             [case(VT_BSTR_BLOB|VT_VECTOR)]  // System use only
  2291.                 CABSTRBLOB          cabstrblob;
  2292.             [case(VT_LPSTR|VT_VECTOR)]
  2293.                 CALPSTR             calpstr;
  2294.             [case(VT_LPWSTR|VT_VECTOR)]
  2295.                 CALPWSTR            calpwstr;
  2296.             [case(VT_VARIANT|VT_VECTOR)]
  2297.                 CAPROPVARIANT       capropvar;
  2298.         };
  2299.     };
  2300.  
  2301.     typedef struct tagPROPVARIANT * LPPROPVARIANT;
  2302.  
  2303.     cpp_quote("// Reserved global Property IDs")
  2304.     const PROPID PID_DICTIONARY         = 0x00000000;
  2305.     const PROPID PID_CODEPAGE           = 0x00000001;
  2306.     const PROPID PID_FIRST_USABLE       = 0x00000002;
  2307.     const PROPID PID_FIRST_NAME_DEFAULT = 0x00000fff;
  2308.     const PROPID PID_LOCALE             = 0x80000000;
  2309.     const PROPID PID_MODIFY_TIME        = 0x80000001;
  2310.     const PROPID PID_SECURITY           = 0x80000002;
  2311.     const PROPID PID_ILLEGAL            = 0xffffffff;
  2312.  
  2313.  
  2314.     cpp_quote("// Property IDs for the SummaryInformation Property Set")
  2315.     cpp_quote("")
  2316.     cpp_quote("#define PIDSI_TITLE               0x00000002L  // VT_LPSTR")
  2317.     cpp_quote("#define PIDSI_SUBJECT             0x00000003L  // VT_LPSTR")
  2318.     cpp_quote("#define PIDSI_AUTHOR              0x00000004L  // VT_LPSTR")
  2319.     cpp_quote("#define PIDSI_KEYWORDS            0x00000005L  // VT_LPSTR")
  2320.     cpp_quote("#define PIDSI_COMMENTS            0x00000006L  // VT_LPSTR")
  2321.     cpp_quote("#define PIDSI_TEMPLATE            0x00000007L  // VT_LPSTR")
  2322.     cpp_quote("#define PIDSI_LASTAUTHOR          0x00000008L  // VT_LPSTR")
  2323.     cpp_quote("#define PIDSI_REVNUMBER           0x00000009L  // VT_LPSTR")
  2324.     cpp_quote("#define PIDSI_EDITTIME            0x0000000aL  // VT_FILETIME (UTC)")
  2325.     cpp_quote("#define PIDSI_LASTPRINTED         0x0000000bL  // VT_FILETIME (UTC)")
  2326.     cpp_quote("#define PIDSI_CREATE_DTM          0x0000000cL  // VT_FILETIME (UTC)")
  2327.     cpp_quote("#define PIDSI_LASTSAVE_DTM        0x0000000dL  // VT_FILETIME (UTC)")
  2328.     cpp_quote("#define PIDSI_PAGECOUNT           0x0000000eL  // VT_I4")
  2329.     cpp_quote("#define PIDSI_WORDCOUNT           0x0000000fL  // VT_I4")
  2330.     cpp_quote("#define PIDSI_CHARCOUNT           0x00000010L  // VT_I4")
  2331.     cpp_quote("#define PIDSI_THUMBNAIL           0x00000011L  // VT_CF")
  2332.     cpp_quote("#define PIDSI_APPNAME             0x00000012L  // VT_LPSTR")
  2333.     cpp_quote("#define PIDSI_DOC_SECURITY        0x00000013L  // VT_I4")
  2334.  
  2335.     const ULONG PRSPEC_INVALID = 0xffffffff;
  2336.     const ULONG PRSPEC_LPWSTR = 0;
  2337.     const ULONG PRSPEC_PROPID = 1;
  2338.  
  2339.     typedef struct tagPROPSPEC
  2340.     {
  2341.  
  2342.         ULONG   ulKind;
  2343.         [switch_is(ulKind)] union
  2344.         {
  2345.             [case(PRSPEC_PROPID)]
  2346.                 PROPID      propid;
  2347.             [case(PRSPEC_LPWSTR)]
  2348.                 LPOLESTR    lpwstr;
  2349.             [default] ;
  2350.         } ;
  2351.  
  2352.     } PROPSPEC;
  2353.  
  2354.     typedef struct tagSTATPROPSTG
  2355.     {
  2356.  
  2357.         LPOLESTR    lpwstrName;
  2358.         PROPID      propid;
  2359.         VARTYPE     vt;
  2360.  
  2361.     } STATPROPSTG;
  2362.  
  2363.     cpp_quote("// Macros for parsing the OS Version of the Property Set Header")
  2364.     cpp_quote("#define PROPSETHDR_OSVER_KIND(dwOSVer)      HIWORD( (dwOSVer) )")
  2365.     cpp_quote("#define PROPSETHDR_OSVER_MAJOR(dwOSVer)     LOBYTE(LOWORD( (dwOSVer) ))")
  2366.     cpp_quote("#define PROPSETHDR_OSVER_MINOR(dwOSVer)     HIBYTE(LOWORD( (dwOSVer) ))")
  2367.     cpp_quote("#define PROPSETHDR_OSVERSION_UNKNOWN        0xFFFFFFFF")
  2368.  
  2369.  
  2370.     typedef struct tagSTATPROPSETSTG
  2371.     {
  2372.  
  2373.         FMTID       fmtid;
  2374.         CLSID       clsid;
  2375.         DWORD       grfFlags;
  2376.         FILETIME    mtime;
  2377.         FILETIME    ctime;
  2378.         FILETIME    atime;
  2379.         DWORD       dwOSVersion;
  2380.  
  2381.     } STATPROPSETSTG;
  2382.  
  2383.  
  2384.     // When this IDL file is used for "IProp.dll" (the
  2385.     // standalone property set DLL), we must have local
  2386.     // and remotable routines (call_as routines are used
  2387.     // to remove BSTRs, which are not remotable with some
  2388.     // RPC run-times).
  2389.     //
  2390.     // For the remotable routines, we must use pointer
  2391.     // parameters (e.g. "*rgspec" rather than "rgspec[]")
  2392.     // so that the MIDL 2.0 compiler will generate an
  2393.     // interpereted proxy/stub, rather than inline.
  2394.  
  2395. #ifdef IPROPERTY_DLL
  2396.     [local]
  2397. #endif
  2398.     HRESULT ReadMultiple(
  2399.         [in]    ULONG                   cpspec,
  2400.         [in, size_is(cpspec)]
  2401.                 const PROPSPEC          rgpspec[],
  2402.         [out, size_is(cpspec)]
  2403.                 PROPVARIANT             rgpropvar[]
  2404.         );
  2405.  
  2406. #ifdef IPROPERTY_DLL
  2407.     [call_as(ReadMultiple)]
  2408.     HRESULT RemoteReadMultiple(
  2409.         [out]   BOOL                    *pfBstrPresent,
  2410.         [in]    ULONG                   cpspec,
  2411.         [in, size_is(cpspec)]
  2412.                 const PROPSPEC          *rgpspec,
  2413.         [out, size_is(cpspec)]
  2414.                 PROPVARIANT             *rgpropvar
  2415.         );
  2416. #endif
  2417.  
  2418. #ifdef IPROPERTY_DLL
  2419.     [local]
  2420. #endif
  2421.     HRESULT WriteMultiple(
  2422.         [in]    ULONG                   cpspec,
  2423.         [in, size_is(cpspec)]
  2424.                 const PROPSPEC          rgpspec[],
  2425.         [in, size_is(cpspec)]
  2426.                 const PROPVARIANT       rgpropvar[],
  2427.         [in]    PROPID                  propidNameFirst
  2428.         );
  2429.  
  2430. #ifdef IPROPERTY_DLL
  2431.     [call_as(WriteMultiple)]
  2432.     HRESULT RemoteWriteMultiple(
  2433.         [in]    BOOL                    fBstrPresent,
  2434.         [in]    ULONG                   cpspec,
  2435.         [in, size_is(cpspec)]
  2436.                 const PROPSPEC          *rgpspec,
  2437.         [in, size_is(cpspec)]
  2438.                 const PROPVARIANT       *rgpropvar,
  2439.         [in]    PROPID                  propidNameFirst
  2440.         );
  2441. #endif
  2442.  
  2443. #ifdef IPROPERTY_DLL
  2444.     [local]
  2445. #endif
  2446.     HRESULT DeleteMultiple(
  2447.         [in]    ULONG                   cpspec,
  2448.         [in, size_is(cpspec)]
  2449.                 const PROPSPEC          rgpspec[]
  2450.         );
  2451.  
  2452. #ifdef IPROPERTY_DLL
  2453.     [call_as(DeleteMultiple)]
  2454.     HRESULT RemoteDeleteMultiple(
  2455.         [in]    ULONG                   cpspec,
  2456.         [in, size_is(cpspec)]
  2457.                 const PROPSPEC          *rgpspec
  2458.         );
  2459. #endif
  2460.  
  2461.     HRESULT ReadPropertyNames(
  2462.         [in]    ULONG                   cpropid,
  2463.         [in, size_is(cpropid)]
  2464.                 const PROPID            rgpropid[],
  2465.         [out, size_is(cpropid)]
  2466.                 LPOLESTR                rglpwstrName[]
  2467.         );
  2468.  
  2469.     HRESULT WritePropertyNames(
  2470.         [in]    ULONG                   cpropid,
  2471.         [in, size_is(cpropid)]
  2472.                 const PROPID            rgpropid[],
  2473.         [in, size_is(cpropid)]
  2474.                 const LPOLESTR          rglpwstrName[]
  2475.         );
  2476.  
  2477.     HRESULT DeletePropertyNames(
  2478.         [in]    ULONG                   cpropid,
  2479.         [in, size_is(cpropid)]
  2480.                 const PROPID            rgpropid[]
  2481.         );
  2482.  
  2483.     HRESULT Commit(
  2484.         [in]    DWORD                   grfCommitFlags
  2485.         );
  2486.  
  2487.     HRESULT Revert();
  2488.  
  2489.     HRESULT Enum(
  2490.         [out]   IEnumSTATPROPSTG **     ppenum
  2491.         );
  2492.  
  2493.     HRESULT SetTimes(
  2494.         [in]    FILETIME const *        pctime,
  2495.         [in]    FILETIME const *        patime,
  2496.         [in]    FILETIME const *        pmtime
  2497.         );
  2498.  
  2499.     HRESULT SetClass(
  2500.         [in]    REFCLSID                clsid
  2501.         );
  2502.  
  2503.     HRESULT Stat(
  2504.         [out]   STATPROPSETSTG *        pstatpsstg
  2505.         );
  2506. }
  2507.  
  2508. [
  2509.     object,
  2510.     uuid(0000013A-0000-0000-C000-000000000046),
  2511.     pointer_default(unique)
  2512. ]
  2513.  
  2514. interface IPropertySetStorage : IUnknown
  2515. {
  2516.  
  2517.     typedef [unique] IPropertySetStorage * LPPROPERTYSETSTORAGE;
  2518.  
  2519.     HRESULT Create(
  2520.         [in]    REFFMTID                rfmtid,
  2521.         [in, unique]
  2522.                 const CLSID *           pclsid,
  2523.         [in]    DWORD                   grfFlags,
  2524.         [in]    DWORD                   grfMode,
  2525.         [out]   IPropertyStorage **     ppprstg
  2526.         );
  2527.  
  2528.     HRESULT Open(
  2529.         [in]    REFFMTID                rfmtid,
  2530.         [in]    DWORD                   grfMode,
  2531.         [out]   IPropertyStorage **     ppprstg
  2532.         );
  2533.  
  2534.     HRESULT Delete(
  2535.         [in]    REFFMTID                rfmtid
  2536.         );
  2537.  
  2538.     HRESULT Enum(
  2539.         [out]   IEnumSTATPROPSETSTG **  ppenum
  2540.         );
  2541.  
  2542. }
  2543.  
  2544.  
  2545. [
  2546.     object,
  2547.     uuid(00000139-0000-0000-C000-000000000046),
  2548.     pointer_default(unique)
  2549. ]
  2550.  
  2551. interface IEnumSTATPROPSTG : IUnknown
  2552. {
  2553.  
  2554.     typedef [unique] IEnumSTATPROPSTG * LPENUMSTATPROPSTG;
  2555.  
  2556.     [local]
  2557.     HRESULT Next(
  2558.         [in]    ULONG                   celt,
  2559.         [out, size_is(celt), length_is(*pceltFetched)]
  2560.                 STATPROPSTG *           rgelt,
  2561.         [out]   ULONG *                 pceltFetched
  2562.         );
  2563.  
  2564.     [call_as(Next)]
  2565.     HRESULT RemoteNext(
  2566.         [in]    ULONG                   celt,
  2567.         [out, size_is(celt), length_is(*pceltFetched)]
  2568.                 STATPROPSTG *           rgelt,
  2569.         [out]   ULONG *                 pceltFetched
  2570.         );
  2571.  
  2572.     HRESULT Skip(
  2573.         [in]    ULONG                   celt
  2574.         );
  2575.  
  2576.     HRESULT Reset();
  2577.  
  2578.     HRESULT Clone(
  2579.         [out]   IEnumSTATPROPSTG **     ppenum
  2580.         );
  2581. }
  2582.  
  2583.  
  2584. [
  2585.     object,
  2586.     uuid(0000013B-0000-0000-C000-000000000046),
  2587.     pointer_default(unique)
  2588. ]
  2589.  
  2590. interface IEnumSTATPROPSETSTG : IUnknown
  2591. {
  2592.  
  2593.     typedef [unique] IEnumSTATPROPSETSTG * LPENUMSTATPROPSETSTG;
  2594.  
  2595.     [local]
  2596.     HRESULT Next(
  2597.         [in]    ULONG                   celt,
  2598.         [out, size_is(celt), length_is(*pceltFetched)]
  2599.                 STATPROPSETSTG *        rgelt,
  2600.         [out]   ULONG *                 pceltFetched
  2601.         );
  2602.  
  2603.     [call_as(Next)]
  2604.     HRESULT RemoteNext(
  2605.         [in]    ULONG                   celt,
  2606.         [out, size_is(celt), length_is(*pceltFetched)]
  2607.                 STATPROPSETSTG *        rgelt,
  2608.         [out]   ULONG *                 pceltFetched
  2609.         );
  2610.  
  2611.     HRESULT Skip(
  2612.         [in]    ULONG                   celt
  2613.         );
  2614.  
  2615.     HRESULT Reset();
  2616.  
  2617.     HRESULT Clone(
  2618.         [out]   IEnumSTATPROPSETSTG **  ppenum
  2619.         );
  2620. }
  2621.  
  2622.  
  2623. cpp_quote("WINOLEAPI PropVariantCopy ( PROPVARIANT * pvarDest, const PROPVARIANT * pvarSrc );")
  2624. cpp_quote("WINOLEAPI PropVariantClear ( PROPVARIANT * pvar );")
  2625. cpp_quote("WINOLEAPI FreePropVariantArray ( ULONG cVariants, PROPVARIANT * rgvars );")
  2626.  
  2627. cpp_quote("")
  2628. cpp_quote("#define _PROPVARIANTINIT_DEFINED_")
  2629. cpp_quote("#   ifdef __cplusplus")
  2630. cpp_quote("inline void PropVariantInit ( PROPVARIANT * pvar )")
  2631. cpp_quote("{")
  2632. cpp_quote("    memset ( pvar, 0, sizeof(PROPVARIANT) );")
  2633. cpp_quote("}")
  2634. cpp_quote("#   else")
  2635. cpp_quote("#   define PropVariantInit(pvar) memset ( pvar, 0, sizeof(PROPVARIANT) )")
  2636. cpp_quote("#   endif")
  2637. cpp_quote("")
  2638.  
  2639. cpp_quote("")
  2640. cpp_quote("#ifndef _STGCREATEPROPSTG_DEFINED_")
  2641. cpp_quote("WINOLEAPI StgCreatePropStg( IUnknown* pUnk, REFFMTID fmtid, const CLSID *pclsid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg );")
  2642. cpp_quote("WINOLEAPI StgOpenPropStg( IUnknown* pUnk, REFFMTID fmtid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg );")
  2643. cpp_quote("WINOLEAPI StgCreatePropSetStg( IStorage *pStorage, DWORD dwReserved, IPropertySetStorage **ppPropSetStg);")
  2644.  
  2645. cpp_quote("")
  2646. cpp_quote("#define CCH_MAX_PROPSTG_NAME    31")
  2647. cpp_quote("WINOLEAPI FmtIdToPropStgName( const FMTID *pfmtid, LPOLESTR oszName );" )
  2648. cpp_quote("WINOLEAPI PropStgNameToFmtId( const LPOLESTR oszName, FMTID *pfmtid );" )
  2649. cpp_quote("#endif")
  2650.  
  2651.  
  2652.  
  2653. /****************************************************************************
  2654.  *  Connection Point Interfaces
  2655.  ****************************************************************************/
  2656. #ifdef __INCLUDE_CPIFS
  2657. interface IConnectionPointContainer;
  2658. interface IConnectionPoint;
  2659. interface IEnumConnections;
  2660. interface IEnumConnectionPoints;
  2661.  
  2662. [
  2663.     object,
  2664.     uuid(B196B286-BAB4-101A-B69C-00AA00341D07),
  2665.     pointer_default(unique)
  2666. ]
  2667. interface IConnectionPoint : IUnknown
  2668. {
  2669.     typedef IConnectionPoint * PCONNECTIONPOINT;
  2670.     typedef IConnectionPoint * LPCONNECTIONPOINT;
  2671.  
  2672.     HRESULT GetConnectionInterface
  2673.     (
  2674.         [out]           IID * piid
  2675.     );
  2676.  
  2677.     HRESULT GetConnectionPointContainer
  2678.     (
  2679.         [out]           IConnectionPointContainer ** ppCPC
  2680.     );
  2681.  
  2682.     HRESULT Advise
  2683.     (
  2684.         [in]    IUnknown * pUnkSink,
  2685.         [out]   DWORD *    pdwCookie
  2686.     );
  2687.  
  2688.     HRESULT Unadvise
  2689.     (
  2690.         [in]    DWORD dwCookie
  2691.     );
  2692.  
  2693.     HRESULT EnumConnections
  2694.     (
  2695.         [out]   IEnumConnections ** ppEnum
  2696.     );
  2697. }
  2698.  
  2699. [
  2700.     object,
  2701.     uuid(B196B284-BAB4-101A-B69C-00AA00341D07),
  2702.     pointer_default(unique)
  2703. ]
  2704. interface IConnectionPointContainer : IUnknown
  2705. {
  2706.     typedef IConnectionPointContainer * PCONNECTIONPOINTCONTAINER;
  2707.     typedef IConnectionPointContainer * LPCONNECTIONPOINTCONTAINER;
  2708.  
  2709.     HRESULT EnumConnectionPoints
  2710.     (
  2711.         [out]   IEnumConnectionPoints ** ppEnum
  2712.     );
  2713.  
  2714.     HRESULT FindConnectionPoint
  2715.     (
  2716.         [in]    REFIID riid,
  2717.         [out]   IConnectionPoint ** ppCP
  2718.     );
  2719. }
  2720.  
  2721.  
  2722. [
  2723.     object,
  2724.     uuid(B196B287-BAB4-101A-B69C-00AA00341D07),
  2725.     pointer_default(unique)
  2726. ]
  2727. interface IEnumConnections : IUnknown
  2728. {
  2729.     typedef IEnumConnections * PENUMCONNECTIONS;
  2730.     typedef IEnumConnections * LPENUMCONNECTIONS;
  2731.  
  2732.     typedef struct tagCONNECTDATA
  2733.     {
  2734.         IUnknown *  pUnk;
  2735.         DWORD       dwCookie;
  2736.     } CONNECTDATA;
  2737.  
  2738.     typedef struct tagCONNECTDATA * PCONNECTDATA;
  2739.     typedef struct tagCONNECTDATA * LPCONNECTDATA;
  2740.  
  2741.     [local]
  2742.     HRESULT Next(
  2743.         [in]                        ULONG           cConnections,
  2744.         [out,
  2745.          size_is(cConnections),
  2746.          length_is(*lpcFetched)]    CONNECTDATA *   rgcd,
  2747.         [out]                       ULONG *         lpcFetched
  2748.     );
  2749.  
  2750.     [call_as(Next)]
  2751.     HRESULT RemoteNext(
  2752.         [in]                            ULONG           cConnections,
  2753.         [out,
  2754.          size_is(cConnections),
  2755.          length_is(*lpcFetched)]        CONNECTDATA *   rgcd,
  2756.         [out]                           ULONG *         lpcFetched
  2757.     );
  2758.  
  2759.     HRESULT Skip
  2760.     (
  2761.         [in]    ULONG cConnections
  2762.     );
  2763.  
  2764.     HRESULT Reset
  2765.     (
  2766.         void
  2767.     );
  2768.  
  2769.     HRESULT Clone
  2770.     (
  2771.         [out]   IEnumConnections ** ppEnum
  2772.     );
  2773. }
  2774.  
  2775.  
  2776. [
  2777.     object,
  2778.     uuid(B196B285-BAB4-101A-B69C-00AA00341D07),
  2779.     pointer_default(unique)
  2780. ]
  2781. interface IEnumConnectionPoints : IUnknown
  2782. {
  2783.     typedef IEnumConnectionPoints * PENUMCONNECTIONPOINTS;
  2784.     typedef IEnumConnectionPoints * LPENUMCONNECTIONPOINTS;
  2785.  
  2786.     [local]
  2787.     HRESULT Next(
  2788.         [in]                        ULONG               cConnections,
  2789.         [out,
  2790.          size_is(cConnections),
  2791.          length_is(*lpcFetched)]    IConnectionPoint ** rgpcn,
  2792.         [out]                       ULONG *             lpcFetched
  2793.     );
  2794.  
  2795.     [call_as(Next)]
  2796.     HRESULT RemoteNext(
  2797.         [in]                        ULONG               cConnections,
  2798.         [out,
  2799.          size_is(cConnections),
  2800.          length_is(*lpcFetched)]    IConnectionPoint ** rgpcn,
  2801.         [out]                       ULONG *             lpcFetched
  2802.     );
  2803.  
  2804.     HRESULT Skip
  2805.     (
  2806.         [in]    ULONG   cConnections
  2807.     );
  2808.  
  2809.     HRESULT Reset
  2810.     (
  2811.         void
  2812.     );
  2813.  
  2814.     HRESULT Clone
  2815.     (
  2816.         [out]   IEnumConnectionPoints **    ppEnum
  2817.     );
  2818. }
  2819. #endif // __INCLUDE_CPIFS
  2820.  
  2821.  
  2822. cpp_quote( "#if  (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM" )
  2823. cpp_quote( "// This interface is only valid on Windows NT 4.0" )
  2824.  
  2825. [
  2826.     local,
  2827.     object,
  2828.     uuid(0000013D-0000-0000-C000-000000000046)
  2829. ]
  2830. interface IClientSecurity : IUnknown
  2831. {
  2832.  
  2833.     typedef struct tagSOLE_AUTHENTICATION_SERVICE
  2834.     {
  2835.         DWORD    dwAuthnSvc;
  2836.         DWORD    dwAuthzSvc;
  2837.         OLECHAR *pPrincipalName;
  2838.         HRESULT  hr;
  2839.     } SOLE_AUTHENTICATION_SERVICE;
  2840.  
  2841.     typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;
  2842.  
  2843.     typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES
  2844.     {
  2845.         EOAC_NONE           = 0x0,
  2846.         EOAC_MUTUAL_AUTH    = 0x1,
  2847.         EOAC_CLOAKING       = 0x10,
  2848.  
  2849.         // These are only valid for CoInitializeSecurity
  2850.         EOAC_SECURE_REFS    = 0x2,
  2851.         EOAC_ACCESS_CONTROL = 0x4,
  2852.         EOAC_APPID          = 0x8
  2853.     } EOLE_AUTHENTICATION_CAPABILITIES;
  2854.  
  2855.     HRESULT QueryBlanket
  2856.     (
  2857.         [in]  IUnknown                *pProxy,
  2858.         [out] DWORD                   *pAuthnSvc,
  2859.         [out] DWORD                   *pAuthzSvc,
  2860.         [out] OLECHAR                **pServerPrincName,
  2861.         [out] DWORD                   *pAuthnLevel,
  2862.         [out] DWORD                   *pImpLevel,
  2863.         [out] void                   **pAuthInfo,
  2864.         [out] DWORD                   *pCapabilites
  2865.     );
  2866.  
  2867.     HRESULT SetBlanket
  2868.     (
  2869.         [in] IUnknown                 *pProxy,
  2870.         [in] DWORD                     AuthnSvc,
  2871.         [in] DWORD                     AuthzSvc,
  2872.         [in] OLECHAR                  *pServerPrincName,
  2873.         [in] DWORD                     AuthnLevel,
  2874.         [in] DWORD                     ImpLevel,
  2875.         [in] void                     *pAuthInfo,
  2876.         [in] DWORD                     Capabilities
  2877.     );
  2878.  
  2879.     HRESULT CopyProxy
  2880.     (
  2881.         [in]  IUnknown  *pProxy,
  2882.         [out] IUnknown **ppCopy
  2883.     );
  2884. }
  2885.  
  2886. [
  2887.     local,
  2888.     object,
  2889.     uuid(0000013E-0000-0000-C000-000000000046)
  2890. ]
  2891. interface IServerSecurity : IUnknown
  2892. {
  2893.     HRESULT QueryBlanket
  2894.     (
  2895.         [out] DWORD    *pAuthnSvc,
  2896.         [out] DWORD    *pAuthzSvc,
  2897.         [out] OLECHAR **pServerPrincName,
  2898.         [out] DWORD    *pAuthnLevel,
  2899.         [out] DWORD    *pImpLevel,
  2900.         [out] void    **pPrivs,
  2901.         [out] DWORD    *pCapabilities
  2902.     );
  2903.  
  2904.     HRESULT ImpersonateClient();
  2905.  
  2906.     HRESULT RevertToSelf();
  2907.  
  2908.     BOOL IsImpersonating();
  2909. }
  2910.  
  2911. [
  2912.     object,
  2913.     uuid(00000140-0000-0000-C000-000000000046)
  2914. ]
  2915.  
  2916. interface IClassActivator : IUnknown
  2917. {
  2918.     HRESULT GetClassObject(
  2919.         [in] REFCLSID rclsid,
  2920.         [in] DWORD dwClassContext,
  2921.         [in] LCID locale,
  2922.         [in] REFIID riid,
  2923.         [out, iid_is(riid)] void **ppv);
  2924. }
  2925.  
  2926.  
  2927. [
  2928. object,
  2929. local,
  2930. uuid(00000144-0000-0000-C000-000000000046),
  2931. oleautomation
  2932. ]
  2933. interface IRpcOptions : IUnknown
  2934. {
  2935.     HRESULT Set([in] IUnknown * pPrx,
  2936.                 [in] DWORD dwProperty,
  2937.                 [in] DWORD dwValue);
  2938.  
  2939.     HRESULT Query([in] IUnknown * pPrx,
  2940.                   [in] DWORD dwProperty,
  2941.                   [out] DWORD * pdwValue);
  2942.  
  2943.     HRESULT CopyProxy([in] IUnknown * punkProxy,
  2944.                       [out] IUnknown ** ppunkCopy);
  2945. }
  2946.  
  2947. enum {COMBND_RPCSTRINGS = 0x01};  // flag indicating arBndInfo is the
  2948.                                   // Rpc string bindings to be used.
  2949.  
  2950. [
  2951. object,
  2952. local,
  2953. uuid(00000148-0000-0000-C000-000000000046)
  2954. ]
  2955. interface IComBinding : IUnknown
  2956. {
  2957.   HRESULT InitBinding([in]    DWORD    dwEndpointFlags,
  2958.                       [in]    DWORD    dwNICFlags,
  2959.                       [in]    DWORD    mbzReserved1,
  2960.                       [in]    DWORD    mbzReserved2,
  2961.                       [in]    LPOLESTR pszBinding
  2962.                   );    
  2963.     
  2964.   HRESULT QueryBinding([out]    LPDWORD    pdwEndpointFlags,
  2965.                        [out]    LPDWORD    pdwNICFlags,
  2966.                        [out]    LPDWORD    mbzReserved1,    
  2967.                        [out]    LPDWORD    mbzReserved2,
  2968.                        [out]    LPOLESTR  *ppszBinding
  2969.                   );    
  2970.  
  2971.  
  2972. }
  2973.     
  2974.  
  2975.  
  2976.  
  2977. cpp_quote( "#endif //DCOM" )
  2978.  
  2979.  
  2980. [
  2981.     object,
  2982.     uuid(99caf010-415e-11cf-8814-00aa00b569f5),
  2983.     pointer_default(unique)
  2984. ]
  2985.  
  2986. interface IFillLockBytes: IUnknown
  2987. {
  2988.     [local]
  2989.     HRESULT FillAppend
  2990.     (
  2991.         [in, size_is(cb)] void const *pv,
  2992.         [in] ULONG cb,
  2993.         [out] ULONG *pcbWritten
  2994.     );
  2995.  
  2996.     [call_as(FillAppend)]
  2997.     HRESULT _stdcall RemoteFillAppend(
  2998.         [in, size_is(cb)] byte const *pv,
  2999.         [in] ULONG cb,
  3000.         [out] ULONG *pcbWritten);
  3001.  
  3002.     [local]
  3003.     HRESULT FillAt
  3004.     (
  3005.         [in] ULARGE_INTEGER ulOffset,
  3006.         [in, size_is(cb)] void const *pv,
  3007.         [in] ULONG cb,
  3008.         [out] ULONG *pcbWritten
  3009.     );
  3010.  
  3011.     [call_as(FillAt)]
  3012.     HRESULT _stdcall RemoteFillAt(
  3013.         [in] ULARGE_INTEGER ulOffset,
  3014.         [in, size_is(cb)] byte const *pv,
  3015.         [in] ULONG cb,
  3016.         [out] ULONG *pcbWritten);
  3017.  
  3018.     HRESULT SetFillSize
  3019.     (
  3020.         [in] ULARGE_INTEGER ulSize
  3021.     );
  3022.  
  3023.     HRESULT Terminate
  3024.     (
  3025.         [in] BOOL bCanceled
  3026.     );
  3027. }
  3028.  
  3029.  
  3030. [
  3031.     object,
  3032.     uuid(a9d758a0-4617-11cf-95fc-00aa00680db4),
  3033.     pointer_default(unique)
  3034. ]
  3035.  
  3036. interface IProgressNotify: IUnknown
  3037. {
  3038.     HRESULT OnProgress
  3039.     (
  3040.         [in] DWORD dwProgressCurrent,
  3041.         [in] DWORD dwProgressMaximum,
  3042.         [in] BOOL  fAccurate,
  3043.         [in] BOOL  fOwner
  3044.     );
  3045. }
  3046.  
  3047.  
  3048. [
  3049.     local,
  3050.     object,
  3051.     uuid(0e6d4d90-6738-11cf-9608-00aa00680db4),
  3052.     pointer_default(unique)
  3053. ]
  3054.  
  3055. interface ILayoutStorage: IUnknown
  3056. {
  3057.         typedef struct tagStorageLayout
  3058.         {
  3059.             DWORD LayoutType;
  3060.             OLECHAR *pwcsElementName;
  3061.             LARGE_INTEGER cOffset;
  3062.             LARGE_INTEGER cBytes;
  3063.         } StorageLayout;
  3064.  
  3065.         HRESULT __stdcall LayoutScript
  3066.         (
  3067.             [in] StorageLayout *pStorageLayout,
  3068.             [in] DWORD nEntries,
  3069.             [in] DWORD glfInterleavedFlag
  3070.         );
  3071.         HRESULT __stdcall BeginMonitor(void);
  3072.  
  3073.         HRESULT __stdcall EndMonitor(void);
  3074.  
  3075.         HRESULT __stdcall ReLayoutDocfile
  3076.         (
  3077.             [in] OLECHAR *pwcsNewDfName
  3078.         );
  3079.  
  3080.         HRESULT __stdcall ReLayoutDocfileOnILockBytes
  3081.         (
  3082.             [in] ILockBytes *pILockBytes
  3083.         );
  3084.  
  3085.  
  3086. }
  3087.  
  3088. [
  3089.  uuid(00000022-0000-0000-C000-000000000046),
  3090.  version(1.0),
  3091.  pointer_default(unique)
  3092.   , object
  3093. ]
  3094.  
  3095. interface ISurrogate : IUnknown
  3096. {
  3097.     typedef [unique] ISurrogate* LPSURROGATE;
  3098.  
  3099.         HRESULT LoadDllServer(
  3100.                 [in] REFCLSID           Clsid);
  3101.         HRESULT FreeSurrogate();
  3102. }
  3103.  
  3104.  
  3105. [
  3106.     local,
  3107.     object,
  3108.     uuid(00000146-0000-0000-C000-000000000046)
  3109. ]
  3110. interface IGlobalInterfaceTable : IUnknown
  3111. {
  3112.     typedef [unique] IGlobalInterfaceTable *LPGLOBALINTERFACETABLE;
  3113.  
  3114.     HRESULT RegisterInterfaceInGlobal
  3115.     (
  3116.         [in]  IUnknown *pUnk,
  3117.         [in]  REFIID    riid,
  3118.         [out] DWORD    *pdwCookie
  3119.     );
  3120.  
  3121.     HRESULT RevokeInterfaceFromGlobal
  3122.     (
  3123.         [in] DWORD      dwCookie
  3124.     );
  3125.  
  3126.     HRESULT GetInterfaceFromGlobal
  3127.     (
  3128.         [in]  DWORD          dwCookie,
  3129.         [in]  REFIID         riid,
  3130.         [out, iid_is(riid)] void **ppv
  3131.     );
  3132. };
  3133.  
  3134.  
  3135. [
  3136.     object,
  3137.     uuid(0e6d4d92-6738-11cf-9608-00aa00680db4),
  3138.     pointer_default(unique)
  3139. ]
  3140.  
  3141. interface IDirectWriterLock : IUnknown
  3142. {
  3143.  
  3144.     HRESULT WaitForWriteAccess ([in] DWORD dwTimeout);
  3145.  
  3146.     HRESULT ReleaseWriteAccess ();
  3147.  
  3148.     HRESULT HaveWriteAccess ();
  3149.  
  3150. }
  3151.  
  3152. [
  3153.     object,
  3154.     uuid(00000023-0000-0000-C000-000000000046)
  3155. ]
  3156.  
  3157. interface ISynchronize : IUnknown
  3158. {
  3159.     HRESULT Wait([in] DWORD dwMilliseconds);
  3160.     HRESULT Signal();
  3161.     HRESULT Reset();
  3162. }
  3163.  
  3164. [
  3165.  local,
  3166.  object,
  3167.  uuid(00000025-0000-0000-C000-000000000046)
  3168. ]
  3169. interface ISynchronizeMutex : ISynchronize
  3170. {
  3171.     HRESULT ReleaseMutex();
  3172. }
  3173.  
  3174. [
  3175.  local,
  3176.  object,
  3177.  uuid(00000024-0000-0000-C000-000000000046)
  3178. ]
  3179. interface IAsyncSetup : IUnknown
  3180. {
  3181.     HRESULT GetAsyncManager( [in]  REFIID           riid,
  3182.                              [in]  IUnknown        *pOuter,
  3183.                              [in]  DWORD            dwFlags,
  3184.                              [out] IUnknown       **ppInner,
  3185.                              [out] IAsyncManager  **ppAsyncMgr );
  3186. }
  3187.  
  3188. [
  3189.  local,
  3190.  object,
  3191.  uuid(00000029-0000-0000-C000-000000000046)
  3192. ]
  3193.  
  3194. interface ICancelMethodCalls : IUnknown
  3195. {
  3196.     typedef [unique] ICancelMethodCalls *LPCANCELMETHODCALLS;
  3197.  
  3198.     HRESULT Cancel          (void);
  3199.     HRESULT TestCancel      (void);
  3200.     HRESULT SetCancelTimeout([in] ULONG ulSeconds);
  3201. }
  3202.  
  3203. [
  3204.  local,
  3205.  object,
  3206.  uuid(0000002A-0000-0000-C000-000000000046)
  3207. ]
  3208. interface IAsyncManager : IUnknown
  3209. {
  3210.     typedef enum tagDCOM_CALL_STATE
  3211.     {
  3212.         DCOM_NONE           = 0x0,
  3213.         DCOM_CALL_COMPLETE  = 0x1,
  3214.         DCOM_CALL_CANCELED  = 0x2,
  3215.     } DCOM_CALL_STATE;
  3216.  
  3217.     HRESULT CompleteCall  ( [in] HRESULT Result );
  3218.     HRESULT GetCallContext( [in] REFIID riid, [out] void **pInterface );
  3219.     HRESULT GetState      ( [out] ULONG *pulStateFlags);
  3220. }
  3221.  
  3222. [
  3223.  local,
  3224.  object,
  3225.  uuid(0000002B-0000-0000-C000-000000000046)
  3226. ]
  3227. interface IWaitMultiple : IUnknown
  3228. {
  3229.     HRESULT WaitMultiple  ( [in] DWORD timeout, [out] ISynchronize **pSync );
  3230.     HRESULT AddSynchronize( [in] ISynchronize *pSync );
  3231. }
  3232.  
  3233. [
  3234.  local,
  3235.  object,
  3236.  uuid(0000002C-0000-0000-C000-000000000046)
  3237. ]
  3238. interface ISynchronizeEvent : IUnknown
  3239. {
  3240.     HRESULT GetEvent( [out] HANDLE *pEvent );
  3241. }
  3242.  
  3243. [
  3244.  object,
  3245.  uuid(00000026-0000-0000-C000-000000000046)
  3246. ]
  3247. interface IUrlMon : IUnknown
  3248. {
  3249.     HRESULT AsyncGetClassBits(
  3250.         [in]         REFCLSID   rclsid,
  3251.         [in, unique] LPCWSTR    pszTYPE,
  3252.         [in, unique] LPCWSTR    pszExt,
  3253.         [in]         DWORD      dwFileVersionMS,
  3254.         [in]         DWORD      dwFileVersionLS,
  3255.         [in, unique] LPCWSTR    pszCodeBase,
  3256.         [in]         IBindCtx * pbc,
  3257.         [in]         DWORD      dwClassContext,
  3258.         [in]         REFIID     riid,
  3259.         [in]         DWORD      flags);
  3260. }
  3261.  
  3262. //----------------------------------------------------------------------------
  3263. // The Class Store Access Interface.
  3264. //----------------------------------------------------------------------------
  3265. [
  3266.   object,
  3267.   uuid(00000190-0000-0000-C000-000000000046)
  3268. ]
  3269. interface IClassAccess : IUnknown
  3270. {
  3271.  
  3272. // This is the most common method to access the Class Container.
  3273. // It queries the Class Store for implementations for a specific
  3274. // Class Id.
  3275. // If a matching implementation is available for the object type,
  3276. // client architecture, locale and class context a pointer to the
  3277. // binary is returned along with other package info in the [out] parameter
  3278. // pPackageInfo.
  3279. //
  3280. // If the binary needs to be downloaded to the local machine, it is
  3281. // done as a part of this.
  3282. //
  3283.     HRESULT   GetClassInfo(
  3284.           [in]    REFCLSID          clsid,             // Class ID
  3285.           [in]    QUERYCONTEXT      QryContext,        // Query Attributes
  3286.           [out]   PACKAGEINFO   *   pPackageInfo
  3287.     );
  3288.  
  3289. //
  3290. // GetClassSpecInfo is same as GetClassInfo except for it takes in
  3291. //  any Class Specifier , CLSID or File Ext, or ProgID or MIME type.
  3292. //
  3293.     HRESULT   GetClassSpecInfo(
  3294.           [in]    uCLSSPEC      *   pClassSpec,        // Class Spec (CLSID/Ext/MIME)
  3295.           [in]    QUERYCONTEXT      QryContext,        // Query Attributes
  3296.           [out]   PACKAGEINFO   *   pPackageInfo
  3297.     );
  3298.  
  3299.  
  3300. //
  3301. // GetInstallablePackages is used by CoGetPublishedAppInfo
  3302. // to provide list of published apps from the class store that are
  3303. // available for installation.
  3304. //
  3305.  
  3306. typedef struct tagPUBLISHEDINFOLIST {
  3307.         DWORD            cPublApps;
  3308.         [size_is(cPublApps), unique] PUBLISHEDAPPINFO    *pPublAppInfo;
  3309. } PUBLISHEDINFOLIST;
  3310.  
  3311.     HRESULT   GetInstallablePackages (
  3312.           [in]    DWORD               Count,
  3313.           [out]   PUBLISHEDINFOLIST   *pInfoList
  3314.     );
  3315.  
  3316. }
  3317.  
  3318. [
  3319.   object,
  3320.   uuid(00000192-0000-0000-C000-000000000046)
  3321. ]
  3322. interface IClassRefresh : IUnknown
  3323. {
  3324. //
  3325. // GetUpgrades is called to check if the Class Store has
  3326. // newer versions for any of a list of CLSIDs. The client calls this
  3327. // with a list of CLSIDs that were installed from the Class Container.
  3328. //
  3329.  
  3330. typedef struct tagPACKAGEINFOLIST {
  3331.         DWORD            cPackInfo;
  3332.         [size_is(cPackInfo), unique] PACKAGEINFO    *pPackageInfo;
  3333. } PACKAGEINFOLIST;
  3334.  
  3335.     HRESULT   GetUpgrades (
  3336.         [in]    ULONG                   cClasses,
  3337.         [in, size_is(cClasses)] CLSID   *pClassList,     // CLSIDs Installed
  3338.         [in]    CSPLATFORM              Platform,
  3339.         [in]    LCID                    Locale,
  3340.         [out]   PACKAGEINFOLIST         *pPackageInfoList);
  3341.  
  3342. //
  3343. // CommitUpgrades is called to notify the Class Store that
  3344. // the newer versions were successfully installed and that the update sequence
  3345. // can be moved forward.
  3346. //
  3347.  
  3348.     HRESULT   CommitUpgrades ();
  3349. }
  3350.  
  3351.  
  3352. //----------------------------------------------------------------------------
  3353. // The Class Store Admin Interface.
  3354. //----------------------------------------------------------------------------
  3355.  
  3356. typedef struct tagCLASSDETAIL {
  3357.                CLSID                Clsid;
  3358.                LPOLESTR             pszDesc;
  3359.                LPOLESTR             pszIconPath;
  3360.                CLSID                TreatAsClsid;
  3361.                CLSID                AutoConvertClsid;
  3362.                DWORD                cFileExt;
  3363.                [size_is(cFileExt)] LPOLESTR  *prgFileExt;
  3364.                LPOLESTR             pMimeType;
  3365.                LPOLESTR             pDefaultProgId;
  3366.                DWORD                cOtherProgId;
  3367.                [size_is(cOtherProgId)] LPOLESTR  *prgOtherProgId;
  3368. } CLASSDETAIL;
  3369.  
  3370. //+---------------------------------------------------------------------------
  3371. //    Contents:        Enum Interfaces for Class Store
  3372. //----------------------------------------------------------------------------
  3373. cpp_quote("#ifndef _LPCSADMNENUM_DEFINED")
  3374. cpp_quote("#define _LPCSADMNENUM_DEFINED")
  3375.  
  3376. //
  3377. //  IEnumPackage
  3378. //  ============
  3379. //
  3380.  
  3381. [
  3382.   object,
  3383.   uuid(00000193-0000-0000-C000-000000000046)
  3384. ]
  3385. interface IEnumPackage : IUnknown
  3386. {
  3387.  
  3388. //---- Next()
  3389.  
  3390.     HRESULT Next(
  3391.         [in]        ULONG celt,
  3392.         [out, size_is(celt), length_is(*pceltFetched)] PACKAGEDETAIL *rgelt,
  3393.         [out]       ULONG *pceltFetched);
  3394.  
  3395. //
  3396. //    celt             number of elements to be fetched.
  3397. //    rgelt            array of PackageDetail structures.
  3398. //    pceltFetched     elements actually fetched.
  3399. //
  3400. // Returns:
  3401. //        S_OK
  3402. //        S_FALSE            (Not enough elements to be fetched.)
  3403. //        E_INVALIDARG
  3404. //        E_FAIL
  3405. //        CS_E_INVALID_VERSION (Class Container is corrupted
  3406. //                              OR is of a version that is no more supported)
  3407. //        E_OUTOFMEMORY
  3408. //
  3409. //    on errors
  3410. //        *pceltFetched = 0
  3411. //
  3412.  
  3413.  
  3414. //---- Skip()
  3415.  
  3416.     HRESULT Skip(
  3417.         [in]        ULONG celt);
  3418.  
  3419. //
  3420. //    celt            number of elements to be skipped.
  3421. //
  3422. // Returns:
  3423. //        S_OK
  3424. //        S_FALSE            (Not enough elements to be skipped.)
  3425. //        E_FAIL
  3426. //        E_ACCESSDENIED
  3427. //        E_OUTOFMEMORY
  3428.  
  3429.  
  3430. //---- Reset()
  3431.  
  3432.     HRESULT Reset();
  3433.  
  3434. //
  3435. // Returns:
  3436. //        S_OK
  3437. //
  3438.  
  3439.  
  3440. //---- Clone()
  3441.  
  3442.     HRESULT Clone(
  3443.         [out]       IEnumPackage **ppenum);
  3444.  
  3445. //
  3446. // Returns:
  3447. //        S_OK
  3448. //        E_FAIL
  3449. //        E_INVALIDARG
  3450. //        E_ACCESSDENIED
  3451. //        E_OUTOFMEMORY
  3452.  
  3453.  
  3454. }
  3455.  
  3456.  
  3457. //
  3458. //  IEnumClass
  3459. //  ==========
  3460. //
  3461.  
  3462. [
  3463.   object,
  3464.   uuid(00000194-0000-0000-C000-000000000046)
  3465. ]
  3466.  
  3467. interface IEnumClass : IUnknown
  3468. {
  3469. //---- Next()
  3470.  
  3471.     HRESULT Next(
  3472.         [in]        ULONG celt,
  3473.         [out, size_is(celt), length_is(*pceltFetched)] CLASSDETAIL *rgelt,
  3474.         [out]       ULONG *pceltFetched);
  3475.  
  3476. //
  3477. //    celt             number of elements to be fetched.
  3478. //    rgelt            array of CLASSDETAIL structures.
  3479. //    pceltFetched     elements actually fetched.
  3480. //
  3481. // Returns:
  3482. //        S_OK
  3483. //        S_FALSE            (Not enough elements to be fetched.)
  3484. //        E_INVALIDARG
  3485. //        E_FAIL
  3486. //        CS_E_INVALID_VERSION (Class Container is corrupted
  3487. //                              OR is of a version that is no more supported)
  3488. //        E_OUTOFMEMORY
  3489. //
  3490. //    on errors
  3491. //        *pceltFetched = 0
  3492. //
  3493.  
  3494. //---- Skip()
  3495.  
  3496.     HRESULT Skip(
  3497.         [in]        ULONG celt);
  3498.  
  3499. //
  3500. //    celt            number of elements to be skipped.
  3501. //
  3502. // Returns:
  3503. //        S_OK
  3504. //        S_FALSE            (Not enough elements to be skipped.)
  3505. //        E_FAIL
  3506. //        E_ACCESSDENIED
  3507. //        E_OUTOFMEMORY
  3508.  
  3509. //---- Reset()
  3510.  
  3511.     HRESULT Reset();
  3512.  
  3513. //
  3514. // Returns:
  3515. //        S_OK
  3516. //
  3517.  
  3518.  
  3519. //---- Clone()
  3520.  
  3521.     HRESULT Clone(
  3522.         [out]       IEnumClass **ppenum);
  3523.  
  3524. //
  3525. // Returns:
  3526. //        S_OK
  3527. //        E_FAIL
  3528. //        E_INVALIDARG
  3529. //        E_ACCESSDENIED
  3530. //        E_OUTOFMEMORY
  3531.  
  3532.  
  3533.  
  3534. }
  3535. cpp_quote("#endif")
  3536.  
  3537. //
  3538. //  IClassAdmin
  3539. //  ===========
  3540. //
  3541.  
  3542.  
  3543. [
  3544.   object,
  3545.   uuid(00000191-0000-0000-C000-000000000046)
  3546. ]
  3547. interface IClassAdmin : IUnknown
  3548. {
  3549.  
  3550. // ::NewClass
  3551. // -----------
  3552. // Stores a new Class Definition in the Class Store
  3553. // Corresponds to HKCR/{CLSID} in registry
  3554. // [In] - CLSID
  3555. //                Class Name
  3556. //                TreatAs CLSID (NULL GUID if no TreatAs)
  3557. //                AutoConvert CLSID (NULL GUID if no AutoConvert)
  3558. //                File Extension (NULL if no association)
  3559. //                Mime Type (NULL if no association)
  3560. //                Default ProgId (NULL if no association)
  3561. //                Other ProgIds
  3562. //                TypelibID
  3563. //                Icon Path (NULL if none).
  3564. //
  3565. // Returns - S_OK
  3566. //                     E_ALREADY_EXISTS
  3567. //                     E_INVALIDARG
  3568. //
  3569.     HRESULT    NewClass (
  3570.         [in]        CLASSDETAIL *pClassDetail
  3571.         );
  3572.  
  3573. // ::DeleteClass
  3574. // -----------
  3575. // Removes a Class Definition from the Class Store
  3576. // [In] - CLSID
  3577.  
  3578.     HRESULT    DeleteClass (
  3579.         [in]        REFCLSID      guidClsId
  3580.         );
  3581.  
  3582.  
  3583. // ::NewInterface
  3584. // --------------
  3585. // Stores a new Interface Definition in the Class Store
  3586. // Corresponds to HKCR/{IID} in registry
  3587. // [In] - IID
  3588. //                Interface Name
  3589. //                Proxy-Stub CLSID (NULL GUID if no ProxyStub)
  3590. //                TypeLib GUID (NULL GUID if no TypeLib)
  3591. //
  3592. // Returns - S_OK
  3593. //                     E_ALREADY_EXISTS
  3594. //                     E_INVALID_ARG
  3595. //
  3596.     HRESULT    NewInterface (
  3597.         [in]        REFIID      iid,
  3598.         [in, unique] LPOLESTR   pszDesc,
  3599.         [in]        REFCLSID    psclsid,
  3600.         [in]        REFCLSID    typelibid
  3601.         );
  3602.  
  3603. // ::DeleteInterface
  3604. // -----------
  3605. // Removes an Interface Definition from the Class Store
  3606. // [In] - IID
  3607.  
  3608.     HRESULT    DeleteInterface (
  3609.         [in]        REFIID      iid
  3610.         );
  3611.  
  3612.  
  3613. // ::NewPackage
  3614. // ------------
  3615. // Stores a new application package in the Class Store
  3616. // May Correspond to HKCR/{CLSID}/LocalServer32 likes in registry
  3617. //
  3618. // Returns - S_OK
  3619. //                     E_ALREADY_EXISTS
  3620. //                     E_INVALIDARG
  3621. //
  3622.     HRESULT    NewPackage (
  3623.         [in]        PACKAGEDETAIL *pPackageDetail
  3624.         );
  3625.  
  3626.  
  3627. // ::DeletePackage
  3628. // -----------
  3629. // Removes a package from the Class Store
  3630. // [In] - PackageName
  3631.  
  3632.     HRESULT    DeletePackage (
  3633.         [in]        LPOLESTR       pszPackageName
  3634.         );
  3635.  
  3636. // ::GetClassesEnum()
  3637. //
  3638. // Returns the clsid enumerator
  3639. // for browsing classes defined in the class store.
  3640. //
  3641. // Returns:
  3642. //        S_OK
  3643. //        E_INVALIDARG
  3644. //        E_FAIL
  3645. //        E_ACCESSDENIED
  3646. //        E_OUTOFMEMORY
  3647. //
  3648. //
  3649. //  The value of the enumerator is NULL for all the error conditions.
  3650. //
  3651.  
  3652.     HRESULT    GetClassesEnum(
  3653.         [out]       IEnumClass **ppIEnumClass
  3654.     );
  3655.  
  3656.  
  3657.  
  3658. // ::GetPackagesEnum()
  3659. //
  3660. //        Getting the Package enumerator from the classstore.
  3661. //
  3662. //        guidClsid:    All the apps that implements the clsid.
  3663. //                        ignored if NULLGUID.
  3664. //        Vendor:       All the apps provided by a given Vendor.
  3665. //                        ignored if NULL.
  3666. //
  3667. //        ppIEnumPackage: NULL if there is any error.
  3668. //
  3669. // Returns:
  3670. //        S_OK
  3671. //        E_INVALIDARG
  3672. //        E_FAIL
  3673. //        E_ACCESSDENIED
  3674. //        E_OUTOFMEMORY
  3675. //
  3676. // The value of the enumerator is NULL for all the error conditions.
  3677. //
  3678.  
  3679.     HRESULT    GetPackagesEnum(
  3680.         [in]         REFCLSID         guidClsid,
  3681.         [in, unique] LPOLESTR         pszVendor,
  3682.         [in]         CSPLATFORM       Platform,
  3683.         [in]         DWORD            dwContext,
  3684.         [in]         LCID             Locale,
  3685.         [out]        IEnumPackage    **ppIEnumPackage
  3686.         );
  3687.  
  3688.  
  3689. // ::GetClassDetails()
  3690. //
  3691. // Get all the class details given the clsid.
  3692. //
  3693. //    [in]      guidClsID    class ID (guid)
  3694. //    [out]     CLASSDETAIL     *pClassDetail
  3695. //
  3696. // Returns:
  3697. //        S_OK
  3698. //        E_INVALIDARG
  3699. //        E_FAIL
  3700. //        E_NOTFOUND            (no such class)
  3701. //        E_ACCESSDENIED
  3702. //        E_OUTOFMEMORY
  3703. //
  3704. //
  3705.  
  3706.  
  3707.  
  3708.     HRESULT    GetClassDetails (
  3709.         [in]        REFCLSID            guidClsId,
  3710.         [out]       CLASSDETAIL         *pClassDetail
  3711.         );
  3712.  
  3713.  
  3714. // ::GetIidDetails()
  3715. //
  3716. //    [IN]
  3717. //        iid            IID (guid)
  3718. //    [OUT]
  3719. //        pszDesc         Description
  3720. //        psClsid         Proxy Stub Class ID
  3721. //        pTypeLibId      libid
  3722. //
  3723. // Returns:
  3724. //        S_OK
  3725. //        E_INVALIDARG
  3726. //        E_FAIL
  3727. //        E_NOTFOUND
  3728. //        E_ACCESSDENIED
  3729. //        E_OUTOFMEMORY
  3730. //
  3731. //
  3732.  
  3733.     HRESULT GetIidDetails (
  3734.         [in]        REFIID           iid,
  3735.         [out]       LPOLESTR        *ppszDesc,
  3736.         [out]       CLSID           *psClsid,
  3737.         [out]       CLSID           *pTypeLibId
  3738.         );
  3739.  
  3740. // ::GetPackageDetails()
  3741. //
  3742. // Get all the Package details given packagename.
  3743. //
  3744. //    [IN]
  3745. //          PackageName: Name of the package
  3746. //    [OUT]
  3747. //          pPackageDetail  Package Detail
  3748. //
  3749. // Returns:
  3750. //        S_OK
  3751. //        E_INVALIDARG
  3752. //        E_FAIL
  3753. //        E_NOTFOUND            (no such class)
  3754. //        E_ACCESSDENIED
  3755. //        E_OUTOFMEMORY
  3756. //
  3757. //
  3758.  
  3759.  
  3760.     HRESULT    GetPackageDetails (
  3761.         [in]        LPOLESTR             pszPackageName,
  3762.         [out]       PACKAGEDETAIL       *pPackageDetail
  3763.         );
  3764. }
  3765.  
  3766. cpp_quote("#if ( _MSC_VER >= 800 )")
  3767. cpp_quote("#pragma warning(default:4201)")
  3768. cpp_quote("#endif")
  3769.  
  3770.  
  3771.