Seo.Idl
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:191k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*
  2.         @doc SEO EVENTS INTERNAL EXTERNAL
  3.         @module SEO.IDL - IDL for Server Extension Objects | This module declares the
  4.         various interfaces and objects exported and used by the Server Extension Objects
  5.         system.
  6. */
  7. cpp_quote("/*++")
  8. cpp_quote("")
  9. cpp_quote("Copyright (c) 1999  Microsoft Corporation")
  10. cpp_quote("")
  11. cpp_quote("Module Name:")
  12. cpp_quote("")
  13. cpp_quote("     seo.idl / seo.h")
  14. cpp_quote("")
  15. cpp_quote("Abstract:")
  16. cpp_quote("")
  17. cpp_quote("     This module contains definitions for the COM interface for")
  18. cpp_quote("     Server Extension Objects.")
  19. cpp_quote("")
  20. cpp_quote("")
  21. cpp_quote("--*/")
  22. cpp_quote("#ifndef SEODLLIMPORT")
  23. cpp_quote("     #define SEODLLIMPORT _declspec(dllimport)")
  24. cpp_quote("#endif")
  25. cpp_quote("#ifndef SEODLLEXPORT")
  26. cpp_quote("     #define SEODLLEXPORT _declspec(dllexport)")
  27. cpp_quote("#endif")
  28. cpp_quote("#ifndef SEODLLDEF")
  29. cpp_quote("     #ifndef SEODLL_IMPLEMENTATION")
  30. cpp_quote("             #define SEODLLDEF EXTERN_C SEODLLIMPORT")
  31. cpp_quote("     #else")
  32. cpp_quote("             #define SEODLLDEF EXTERN_C SEODLLEXPORT")
  33. cpp_quote("     #endif")
  34. cpp_quote("#endif")
  35. cpp_quote("#define BD_OBJECT                    "Object"")
  36. cpp_quote("#define BD_PROGID                    "ProgID"")
  37. cpp_quote("#define BD_PRIORITY                  "Priority"")
  38. cpp_quote("#define BD_RULEENGINE                "RuleEngine"")
  39. cpp_quote("#define BD_EXCLUSIVE                 "Exclusive"")
  40. cpp_quote("#define BD_BINDINGS                  "Bindings"")
  41. cpp_quote("#define BD_DISPATCHER                "Dispatcher"")
  42. cpp_quote("#define BD_BINDINGPOINTS             "BindingPoints"")
  43. cpp_quote("#define BD_RULE                              "Rule"")
  44. /*
  45.    Define priorities
  46. */
  47. cpp_quote("#define PRIO_HIGHEST                 0")
  48. cpp_quote("#define PRIO_HIGH                    8191")
  49. cpp_quote("#define PRIO_MEDIUM                  16383")
  50. cpp_quote("#define PRIO_LOW                     24575")
  51. cpp_quote("#define PRIO_LOWEST                  32767")
  52. cpp_quote("#define PRIO_DEFAULT                 PRIO_LOW")
  53. cpp_quote("#define PRIO_HIGHEST_STR             L"PRIO_HIGHEST"")
  54. cpp_quote("#define PRIO_HIGH_STR                L"PRIO_HIGH"")
  55. cpp_quote("#define PRIO_MEDIUM_STR              L"PRIO_MEDIUM"")
  56. cpp_quote("#define PRIO_LOW_STR                 L"PRIO_LOW"")
  57. cpp_quote("#define PRIO_LOWEST_STR              L"PRIO_LOWEST"")
  58. cpp_quote("#define PRIO_DEFAULT_STR             L"PRIO_DEFAULT"")
  59. cpp_quote("#define PRIO_MIN                     PRIO_HIGHEST")
  60. cpp_quote("#define PRIO_MAX                     PRIO_LOWEST")
  61. //@doc SEO
  62. /*
  63.         @interface ISEODictionaryItem | General-purpose access to a single dictionary item.  This interface
  64.         is derived from IDispatch (i.e. it is a dual interface).  This is the interface returned for any
  65.         multi-value item in a dictionary.
  66.         @meth HRESULT | Value [propget] | Get the value (by optional index).
  67.         @meth HRESULT | AddValue | Add a value by index.
  68.         @meth HRESULT | DeleteValue | Delete a value by index.
  69.         @meth HRESULT | Count [propget] | Get the count of values.
  70.         @meth HRESULT | GetStringA | Get the value by index as an ANSI string.
  71.         @meth HRESULT | GetStringW | Get the value by index as a Unicode string.
  72.         @meth HRESULT | AddStringA | Add a value by index as an ANSI string.
  73.         @meth HRESULT | AddStringW | Add a value by index as a Unicode string.
  74.         @xref <i ISEODictionary>
  75. */
  76. [
  77.         dual,
  78.         helpstring("SEOCOM dictionary item (OA-compatible)"),
  79.         hidden,
  80.         object,
  81.         pointer_default(unique),
  82.         uuid(16d63630-83ae-11d0-a9e3-00aa00685c74)
  83. ]
  84. interface ISEODictionaryItem : IDispatch
  85. {
  86. import "wtypes.idl";
  87. import "ocidl.idl";
  88.         //@method HRESULT | ISEODictionaryItem | Value [propget] | Get the value (by optional index).
  89.         //@parm VARIANT * | pvarIndex | [in,optional] Specifies the (zero-based) index
  90.         // from which to retrieve the value.  If NULL, or if pvarIndex->vt==VT_ERROR, then an index of
  91.         // zero is assumed.
  92.         //@parm VARIANT * | pvarResult | [out,retval] Receives the result.
  93.         //@rvalue S_OK | Success.
  94.         //@rvalue SEO_E_NOTPRESENT | Failure, the index was too large.
  95.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  96.         //@rvalue E_POINTER | Failure, a bad pointer was passed as a parameter.
  97.         //@xref <i ISEODictionaryItem> <om ISEODictionaryItem.AddValue> <om ISEODictionaryItem.DeleteValue>
  98.         [helpstring("Get the value (by optional index)"),propget,id(DISPID_VALUE)]
  99.         HRESULT Value([in,optional] VARIANT *pvarIndex,
  100.                                   [out,retval] VARIANT *pvarResult);
  101.         //@method HRESULT | ISEODictionaryItem | AddValue | Add a value by index.
  102.         //@parm VARIANT * | pvarIndex | [in] Specifies the (zero-based) index at which to place the value.  If the
  103.         // index is greater than the count, then the index is treated as being equal to the count (i.e. any
  104.         // attempt to add an item past the last item results in the item becoming the new last item.)
  105.         //@parm VARIANT * | pvarValue | [in] Specifies the value.
  106.         //@rvalue S_OK | Success.
  107.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  108.         //@rvalue E_POINTER | Failure, a bad pointer was passed as a parameter.
  109.         //@xref <i ISEODictionaryItem> <om ISEODictionaryItem.Value [propget]> <om ISEODictionaryItem.DeleteValue>
  110.         [helpstring("Add a value by index.")]
  111.         HRESULT AddValue([in] VARIANT *pvarIndex, [in] VARIANT *pvarValue);
  112.         //@method HRESULT | ISEODictionaryItem | DeleteValue | Remove a value by index.
  113.         //@parm VARIANT * | pvarIndex | [in] Specifies the (zero-based) index of the item to delete.
  114.         //@rvalue S_OK | Success.
  115.         //@rvalue SEO_E_NOTPRESENT | Failure, the index was too large.
  116.         //@rvalue E_POINTER | Failure, a bad pointer was passed as a parameter.
  117.         //@xref <i ISEODictionaryItem> <om ISEODictionaryItem.Value [propget]> <om ISEODictionaryItem.AddValue>
  118.         [helpstring("Remove a value by index.")]
  119.         HRESULT DeleteValue([in] VARIANT *pvarIndex);
  120.         //@method HRESULT | ISEODictionaryItem | Count [propget] | Get the count of values.
  121.         //@parm VARIANT * | pvarResult | [out,retval] Receives the result.
  122.         //@rvalue S_OK | Success.
  123.         //@rvalue E_POINTER | Failure, a bad pointer was passed as a parameter.
  124.         //@xref <i ISEODictionaryItem>
  125.         [helpstring("Get the count of values."),propget]
  126.         HRESULT Count([out,retval] VARIANT *pvarResult);
  127.         //@method HRESULT | ISEODictionaryItem | GetStringA | Get the value by index as an ANSI string.
  128.         //@parm DWORD | dwIndex | [in] Specifies the (zero-based) index.
  129.         //@parm DWORD * | pchCount | [in,out] Specifies the total number of characters in the buffer, and receives
  130.         // the total number of characters copied (including the terminating NULL).
  131.         //@parm LPSTR | pszResult | [out,size_is(*pchCount)] Receives the value.  May be NULL, in which
  132.         // case *pchCount will receive the total number of characters in the value (including the terminating NULL).
  133.         //@rvalue S_OK | Success.  *pchCount has the total number of characters stored, including the termimating
  134.         // NULL.  If pszResult was NULL, then *pchCount has the total number of characters in the value (including
  135.         // the terminating NULL).
  136.         //@rvalue SEO_S_MOREDATA | Success.  The buffer was not large enough to contain all of the data - the
  137.         // maximum amount that could fit was copied into the buffer along with a terminating NULL, and
  138.         // *pchCount contains the number of characters stored (including the terminating NULL).
  139.         //@rvalue SEO_E_NOTPRESENT. | Failure, the index was too large.
  140.         //@rvalue SEO_E_BADTYPE | Failure, the item is not of the requested type.
  141.         //@rvalue E_POINTER | Failure, a bad pointer was passed as a parameter.
  142.         //@xref <i ISEODictionaryItem> <om ISEODictionaryItem.GetStringW>
  143.         [helpstring("Get the value by index as an ANSI string.")]
  144.         HRESULT GetStringA([in] DWORD dwIndex,
  145.                                            [in,out] DWORD *pchCount,
  146.                                            [out,size_is(*pchCount)] LPSTR pszResult);
  147.         //@method HRESULT | ISEODictionaryItem | GetStringW | Get the value by index as a Unicode string.
  148.         //@parm DWORD | dwIndex | [in] Specifies the (zero-based) index.
  149.         //@parm DWORD * | pchCount | [in,out] Specifies the total number of characters in the buffer, and receives
  150.         // the total number of characters copied (including the terminating NULL).
  151.         //@parm LPWSTR | pszResult | [out,size_is(*pchCount)] Receives the value.  May be NULL, in which
  152.         // case *pchCount will receive the total number of characters in the value (including the terminating NULL).
  153.         //@rvalue S_OK | Success.  *pchCount has the total number of characters stored, including the termimating
  154.         // NULL.  If pszResult was NULL, then *pchCount has the total number of characters in the value (including
  155.         // the terminating NULL).
  156.         //@rvalue SEO_S_MOREDATA | Success.  The buffer was not large enough to contain all of the data - the
  157.         // maximum amount that could fit was copied into the buffer along with a terminating NULL, and
  158.         // *pchCount contains the number of characters stored (including the terminating NULL).
  159.         //@rvalue SEO_E_NOTPRESENT. | Failure, the index was too large.
  160.         //@rvalue SEO_E_BADTYPE | Failure, the item is not of the requested type.
  161.         //@rvalue E_POINTER | Failure, a bad pointer was passed as a parameter.
  162.         //@xref <i ISEODictionaryItem> <om ISEODictionaryItem.GetStringA>
  163.         [helpstring("Get the value by index as a Unicode string.")]
  164.         HRESULT GetStringW([in] DWORD dwIndex,
  165.                                            [in,out] DWORD *pchCount,
  166.                                            [out,size_is(*pchCount)] LPWSTR pszResult);
  167.         //@method HRESULT | ISEODictionaryItem | AddStringA | Add a value by index as an ANSI string.
  168.         //@parm DWORD | dwIndex | [in] Specifies the (zero-based) index.
  169.         //@parm LPCSTR | pszValue | [in] Specifies the value (NULL-terminated).  May not be NULL - use
  170.         // DeleteValue() to remove a value.
  171.         //@rvalue S_OK | Success.
  172.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  173.         //@rvalue E_POINTER | Failure, a bad pointer was passed as a parameter.
  174.         //@xref <i ISEODictionaryItem> <om ISEODictionaryItem.DeleteValue> <om ISEODictionaryItem.AddStringW>
  175.         [helpstring("Add a value by index as an ANSI string.")]
  176.         HRESULT AddStringA([in] DWORD dwIndex,
  177.                                            [in] LPCSTR pszValue);
  178.         //@method HRESULT | ISEODictionaryItem | AddStringW | Add a value by index as a Unicode string.
  179.         //@parm DWORD | dwIndex | [in] Specifies the (zero-based) index.
  180.         //@parm LPCWSTR | pszValue | [in] Specifies the value (NULL-terminated).  May not be NULL - use
  181.         // DeleteValue() to remove a value.
  182.         //@rvalue S_OK | Success.
  183.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  184.         //@rvalue E_POINTER | Failure, a bad pointer was passed as a parameter.
  185.         //@xref <i ISEODictionaryItem> <om ISEODictionaryItem.DeleteValue> <om ISEODictionaryItem.AddStringA>
  186.         [helpstring("Add a value by index as a Unicode string.")]
  187.         HRESULT AddStringW([in] DWORD dwIndex,
  188.                                            [in] LPCWSTR pszValue);
  189. };
  190. //@doc SEO
  191. /*
  192.         @interface ISEODictionary | General-purpose access to name-value pairs.  This interface
  193.         is derived from IDispatch (i.e. it is a dual interface) and provides some methods which
  194.         are automation-compatible (for use by scripts) and incompatible (for higher performance).
  195.         @meth HRESULT | Item [propget] | Get a value (OA-compatible).
  196.         @meth HRESULT | Item [propput] | Set a value (OA-compatible).
  197.         @meth HRESULT | _NewEnum [propget] | Get an enumerator (OA-compatible).
  198.         @meth HRESULT | GetVariantA | Query by ANSI name for a VARIANT (high performance).
  199.         @meth HRESULT | GetVariantW | Query by Unicode name for a VARIANT (high performance).
  200.         @meth HRESULT | SetVariantA | Set a VARIANT by ANSI name (high performance).
  201.         @meth HRESULT | SetVariantW | Set a VARIANT by Unicode name (high performance).
  202.         @meth HRESULT | GetStringA | Query by ANSI name for an ANSI string (high performance).
  203.         @meth HRESULT | GetStringW | Query by Unicode name for a Unicode string (high performance).
  204.         @meth HRESULT | SetStringA | Set an ANSI string by ANSI name (high performance).
  205.         @meth HRESULT | SetStringW | Set a Unicode string by Unicode name (high performance).
  206.         @meth HRESULT | GetDWordA | Query by ANSI name for a DWORD (high performance).
  207.         @meth HRESULT | GetDWordW | Query by Unicode name for a DWORD (high performance).
  208.         @meth HRESULT | SetDWordA | Set a DWORD by ANSI name (high performance).
  209.         @meth HRESULT | SetDWordW | Set a DWORD by Unicode name (high performance).
  210.         @meth HRESULT | GetInterfaceA | Query by ANSI name for an interface (high performance).
  211.         @meth HRESULT | GetInterfaceW | Query by Unicode name for an interface (high performance).
  212.         @meth HRESULT | SetInterfaceA | Set an interface by ANSI name (high performance).
  213.         @meth HRESULT | SetInterfaceW | Set an interface by Unicode name (high performance).
  214.         @xref <i ISEODictionaryItem>
  215. */
  216. [
  217.         dual,
  218.         helpstring("SEOCOM dictionary (OA-compatible)."),
  219.         hidden,
  220.         object,
  221.         pointer_default(unique),
  222.         uuid(d8177b40-7bac-11d0-a9e0-00aa00685c74)
  223. ]
  224. interface ISEODictionary : IDispatch
  225. {
  226. import "wtypes.idl";
  227. import "ocidl.idl";
  228.         //@method HRESULT | ISEODictionary | Item [propget] | Get an item (OA-compatible.
  229.         //@parm VARIANT * | pvarName | [in] Specifies the name.
  230.         //@parm VARIANT * | pvarResult | [out,retval] Receives the value.
  231.         //@rvalue S_OK | Success.  If pvarResult->vt==VT_EMPTY, then the item was not present.
  232.         //@rvalue E_INVALIDARG | Failure, pvarName couldn't be converted to a string.
  233.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  234.         //@xref <i ISEODictionary> <om ISEODictionary.Item [propput]>
  235.         [helpstring("Get a value."),id(DISPID_VALUE),propget]
  236.         HRESULT Item([in] VARIANT *pvarName,
  237.                                  [out,retval] VARIANT *pvarResult);
  238.         //@method HRESULT | ISEODictionary | Item [propput] | Put a value (OA-compatible).
  239.         //@parm VARIANT * | pvarName | [in] Specifies the name.
  240.         //@parm VARIANT * | pvarResult | [in] Specifies the new value.  May be NULL or VT_EMPTY to remove the item.
  241.         //@rvalue S_OK | Success.
  242.         //@rvalue E_INVALIDARG | Failure, pvarName couldn't be converted to a string.
  243.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  244.         //@xref <i ISEODictionary> <om ISEODictionary.Item [propget]>
  245.         [helpstring("Put a value."),propput]
  246.         HRESULT Item([in] VARIANT *pvarName,
  247.                                  [in] VARIANT *pvarValue);
  248.         //@method HRESULT | ISEODictionary | _NewEnum [propget] | Get an enumerator (OA-compatible).  This
  249.         // function allows enumeration of the names of the values in the dictionary.
  250.         //@parm IUnknown ** | ppunkResult | [out,retval] Receives the enumerator.  This object will implement
  251.         // the IEnumVARIANT interface, and each call to the Next() method on this object will return the
  252.         // next names of values in the dictionary.
  253.         //@rvalue S_OK | Success.
  254.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  255.         //@xref <i ISEODictionary>
  256.         [helpstring("Get an enumerator."),id(DISPID_NEWENUM),propget,hidden]
  257.         HRESULT _NewEnum([out,retval] IUnknown **ppunkResult);
  258.         //@method HRESULT | ISEODictionary | GetVariantA | Query by ANSI name for a VARIANT (high performance).
  259.         //@parm LPCSTR | pszName | [in] Specifies the name.
  260.         //@parm VARIANT * | pvarResult | [out,retval] Receives the value.
  261.         //@rvalue S_OK | Success.
  262.         //@rvalue SEO_E_NOTPRESENT. | Failure, the item is not present.
  263.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  264.         //@xref <i ISEODictionary> <om ISEODictionary.GetVariantW> <om ISEODictionary.SetVariantA>
  265.         // <om ISEODictionary.SetVariantW>
  266.         [helpstring("Query by ANSI name for a VARIANT.")]
  267.         HRESULT GetVariantA([in] LPCSTR pszName,
  268.                                                 [out,retval] VARIANT *pvarResult);
  269.         //@method HRESULT | ISEODictionary | GetVariantW | Query by Unicode name for a VARIANT (high performance).
  270.         //@parm LPCWSTR | pszName | [in] Specifies the name.
  271.         //@parm VARIANT * | pvarResult | [out,retval] Receives the value.
  272.         //@rvalue S_OK | Success.
  273.         //@rvalue SEO_E_NOTPRESENT. | Failure, the item is not present.
  274.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  275.         //@xref <i ISEODictionary> <om ISEODictionary.GetVariantA> <om ISEODictionary.SetVariantA>
  276.         // <om ISEODictionary.SetVariantW>
  277.         [helpstring("Query by Unicode name for a VARIANT.")]
  278.         HRESULT GetVariantW([in] LPCWSTR pszName,
  279.                                                 [out,retval] VARIANT *pvarResult);
  280.         //@method HRESULT | ISEODictionary | SetVariantA | Set a VARIANT by ANSI name (high performance).
  281.         //@parm LPCSTR | pszName | [in] Specifies the name.
  282.         //@parm VARIANT * | pvarResult | [in] Specifies the value.  May be NULL or V_EMPTY to remove the item.
  283.         //@rvalue S_OK | Success.
  284.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  285.         //@xref <i ISEODictionary> <om ISEODictionary.GetVariantA> <om ISEODictionary.GetVariantW>
  286.         // <om ISEODictionary.SetVariantW>
  287.         [helpstring("Set a VARIANT by ANSI name.")]
  288.         HRESULT SetVariantA([in] LPCSTR pszName,
  289.                                                 [in] VARIANT *pvarValue);
  290.         //@method HRESULT | ISEODictionary | SetVariantW | Set a VARIANT by Unicode name (high performance).
  291.         //@parm LPCWSTR | pszName | [in] Specifies the name.
  292.         //@parm VARIANT * | pvarResult | [in] Specifies the value.  May be NULL or V_EMPTY to remove the item.
  293.         //@rvalue S_OK | Success.
  294.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  295.         //@xref <i ISEODictionary> <om ISEODictionary.GetVariantA> <om ISEODictionary.GetVariantW>
  296.         // <om ISEODictionary.SetVariantA>
  297.         [helpstring("Set a VARIANT by Unicode name.")]
  298.         HRESULT SetVariantW([in] LPCWSTR pszName,
  299.                                                 [in] VARIANT *pvarValue);
  300.         //@method HRESULT | ISEODictionary | GetStringA | Query by ANSI name for an ANSI string (high performance).
  301.         //@parm LPCSTR | pszName | [in] Specifies the name.
  302.         //@parm DWORD * | pchCount | [in,out] Specifies the total number of characters in the buffer, and receives
  303.         // the total number of characters copied (including the terminating NULL).
  304.         //@parm LPSTR | pszResult | [out,size_is(*pchCount)] Receives the value.
  305.         //@rvalue S_OK | Success.  *pchCount has the total number of characters stored, including the termimating NULL.
  306.         //@rvalue SEO_S_MOREDATA | Success.  The buffer was not large enough to contain all of the data - the
  307.         // maximum amount that could fit was copied into the buffer along with a terminating NULL, and
  308.         // *pchCount contains the number of characters stored (including the terminating NULL).
  309.         //@rvalue SEO_E_NOTPRESENT. | Failure, the item is not present.
  310.         //@rvalue SEO_E_BADTYPE | Failure, the item it present but is not of the requested type.
  311.         //@xref <i ISEODictionary> <om ISEODictionary.GetStringW> <om ISEODictionary.SetStringA>
  312.         // <om ISEODictionary.SetStringW>
  313.         [helpstring("Query by ANSI name for an ANSI string.")]
  314.         HRESULT GetStringA([in] LPCSTR pszName,
  315.                                            [in,out] DWORD *pchCount,
  316.                                            [out,size_is(*pchCount)] LPSTR pszResult);
  317.         //@method HRESULT | ISEODictionary | GetStringW | Query by Unicode name for a Unicode string (high performance).
  318.         //@parm LPCWSTR | pszName | [in] Specifies the name.
  319.         //@parm DWORD * | pchCount | [in,out] Specifies the total number of characters in the buffer, and receives
  320.         // the total number of characters copied (including the terminating NULL).
  321.         //@parm LPWSTR | pszResult | [out,size_is(*pchCount)] Receives the value.
  322.         //@rvalue S_OK | Success.  *pchCount has the total number of characters stored, including the termimating NULL.
  323.         //@rvalue SEO_S_MOREDATA | Success.  The buffer was not large enough to contain all of the data - the
  324.         // maximum amount that could fit was copied into the buffer along with a terminating NULL, and
  325.         // *pchCount contains the number of characters stored (including the terminating NULL).
  326.         //@rvalue SEO_E_NOTPRESENT. | Failure, the item is not present.
  327.         //@rvalue SEO_E_BADTYPE | Failure, the item it present but is not of the requested type.
  328.         //@xref <i ISEODictionary> <om ISEODictionary.GetStringA> <om ISEODictionary.SetStringA>
  329.         // <om ISEODictionary.SetStringW>
  330.         [helpstring("Query by Unicode name for a Unicode string.")]
  331.         HRESULT GetStringW([in] LPCWSTR pszName,
  332.                                            [in,out] DWORD *pchCount,
  333.                                            [out,size_is(*pchCount)] LPWSTR pszResult);
  334.         //@method HRESULT | ISEODictionary | SetStringA | Set an ANSI string by ANSI name (high performance).
  335.         //@parm LPCSTR | pszName | [in] Specifies the name.
  336.         //@parm DWORD | chCount | [in] Specifies the number of characters in the string, including the
  337.         // terminating NULL.  (Use the SetVariantA() method to remove an item.)
  338.         //@parm LPCSTR | pszValue | [in,size_is(chCount)] Specifies the value.
  339.         //@xref <i ISEODictionary> <om ISEODictionary.SetVariantA> <om ISEODictionary.GetStringA>
  340.         // <om ISEODictionary.GetStringW> <om ISEODictionary.SetStringW>
  341.         [helpstring("Set an ANSI string by ANSI name.")]
  342.         HRESULT SetStringA([in] LPCSTR pszName,
  343.                                            [in] DWORD chCount,
  344.                                            [in,size_is(chCount)] LPCSTR pszValue);
  345.         //@method HRESULT | ISEODictionary | SetStringW | Set a Unicode string by Unicode name (high performance).
  346.         //@parm LPCWSTR | pszName | [in] Specifies the name.
  347.         //@parm DWORD | chCount | [in] Specifies the number of characters in the string, including the
  348.         // terminating NULL.  (Use the SetVariantW() method to remove an item.)
  349.         //@parm LPCWSTR | pszValue | [in,size_is(chCount)] Specifies the value.
  350.         //@xref <i ISEODictionary> <om ISEODictionary.SetVariantW> <om ISEODictionary.GetStringA>
  351.         // <om ISEODictionary.GetStringW> <om ISEODictionary.SetStringA>
  352.         [helpstring("Set a Unicode string by Unicode name.")]
  353.         HRESULT SetStringW([in] LPCWSTR pszName,
  354.                                            [in] DWORD chCount,
  355.                                            [in,size_is(chCount)] LPCWSTR pszValue);
  356.         //@method HRESULT | ISEODictionary | GetDWordA | Query by ANSI name for a DWORD (high performance).
  357.         //@parm LPCSTR | pszName | [in] Specifies the name.
  358.         //@parm DWORD * | pdwResult | [out,retval] Receives the value.
  359.         //@rvalue S_OK | Success.
  360.         //@rvalue SEO_E_NOTPRESENT. | Failure, the item is not present.
  361.         //@rvalue SEO_E_BADTYPE | Failure, the item it present but is not of the requested type.
  362.         //@xref <i ISEODictionary> <om ISEODictionary.GetDWordW> <om ISEODictionary.SetDWordA>
  363.         // <om ISEODictionary.SetDWordW>
  364.         [helpstring("Query by ANSI name for a DWORD.")]
  365.         HRESULT GetDWordA([in] LPCSTR pszName,
  366.                                           [out,retval] DWORD *pdwResult);
  367.         //@method HRESULT | ISEODictionary | GetDWordW | Query by Unicode name for a DWORD (high performance).
  368.         //@parm LPCWSTR | pszName | [in] Specifies the name.
  369.         //@parm DWORD * | pdwResult | [out,retval] Receives the value.
  370.         //@rvalue S_OK | Success.
  371.         //@rvalue SEO_E_NOTPRESENT. | Failure, the item is not present.
  372.         //@rvalue SEO_E_BADTYPE | Failure, the item it present but is not of the requested type.
  373.         //@xref <i ISEODictionary> <om ISEODictionary.GetDWordA> <om ISEODictionary.SetDWordA>
  374.         // <om ISEODictionary.SetDWordW>
  375.         [helpstring("Query by Unicode name for a DWORD.")]
  376.         HRESULT GetDWordW([in] LPCWSTR pszName,
  377.                                           [out,retval] DWORD *pdwResult);
  378.         //@method HRESULT | ISEODictionary | SetDWordA | Set a DWORD by ANSI name (high performance).
  379.         //@parm LPCSTR | pszName | [in] Specifies the name.
  380.         //@parm DWORD | dwValue | [in] Specifies the value.  (Use the SetVariantA() method to remove an item.)
  381.         //@rvalue S_OK | Success.
  382.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  383.         //@xref <i ISEODictionary> <om ISEODictionary.SetVariantA> <om ISEODictionary.GetDWordA>
  384.         // <om ISEODictionary.GetDWordW> <om ISEODictionary.SetDWordW>
  385.         [helpstring("Set a DWORD by ANSI name.")]
  386.         HRESULT SetDWordA([in] LPCSTR pszName,
  387.                                           [in] DWORD dwValue);
  388.         //@method HRESULT | ISEODictionary | SetDWordW | Set a DWORD by Unicode name (high performance).
  389.         //@parm LPCWSTR | pszName | [in] Specifies the name.
  390.         //@parm DWORD | dwValue | [in] Specifies the value.  (Use the SetVariantW() method to remove an item.)
  391.         //@rvalue S_OK | Success.
  392.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  393.         //@xref <i ISEODictionary> <om ISEODictionary.SetVariantW> <om ISEODictionary.GetDWordA>
  394.         // <om ISEODictionary.GetDWordW> <om ISEODictionary.SetDWordA>
  395.         [helpstring("Set a DWORD by Unicode name.")]
  396.         HRESULT SetDWordW([in] LPCWSTR pszName,
  397.                                           [in] DWORD dwValue);
  398.         //@method HRESULT | ISEODictionary | GetInterfaceA | Query by ANSI name for an interface (high performance).
  399.         //@parm LPCSTR | pszName | [in] Specifies the name.
  400.         //@parm REFIID | iidDesired | [in] Specifies the IID of the desired interface.
  401.         //@parm IUnknown ** | ppunkResult | [out,iid_is(iidDesired),retval] Receives the value.
  402.         //@rvalue S_OK | Success.
  403.         //@rvalue SEO_E_NOTPRESENT. | Failure, the item is not present.
  404.         //@rvalue E_NOINTERFACE | Failure, the item is present but does not support the desired interface.
  405.         //@xref <i ISEODictionary> <om ISEODictionary.GetInterfaceW> <om ISEODictionary.SetInterfaceA>
  406.         // <om ISEODictionary.SetInterfaceW>
  407.         [helpstring("Query by ANSI name for an interface.")]
  408.         HRESULT GetInterfaceA([in] LPCSTR pszName,
  409.                                                   [in] REFIID iidDesired,
  410.                                                   [out,iid_is(iidDesired),retval] IUnknown **ppunkResult);
  411.         //@method HRESULT | ISEODictionary | GetInterfaceW | Query by Unicode name for an interface (high performance).
  412.         //@parm LPCWSTR | pszName | [in] Specifies the name.
  413.         //@parm REFIID | iidDesired | [in] Specifies the IID of the desired interface.
  414.         //@parm IUnknown ** | ppunkResult | [out,iid_is(iidDesired),retval] Receives the value.
  415.         //@rvalue S_OK | Success.
  416.         //@rvalue SEO_E_NOTPRESENT. | Failure, the item is not present.
  417.         //@rvalue SEO_E_BADTYPE | Failure, the item it present but is not of the requested type.
  418.         //@rvalue E_NOINTERFACE | Failure, the item is present but does not support the desired interface.
  419.         //@xref <i ISEODictionary> <om ISEODictionary.GetInterfaceA> <om ISEODictionary.SetInterfaceA>
  420.         // <om ISEODictionary.SetInterfaceW>
  421.         [helpstring("Query by Unicode name for an interface.")]
  422.         HRESULT GetInterfaceW([in] LPCWSTR pszName,
  423.                                                   [in] REFIID iidDesired,
  424.                                                   [out,iid_is(iidDesired),retval] IUnknown **ppunkResult);
  425.         //@method HRESULT | ISEODictionary | SetInterfaceA | Set an interface by ANSI name (high performance).
  426.         //@parm LPCSTR | pszName | [in] Specifies the name.
  427.         //@parm IUnknown * | punkValue | [in,unique] Specifies the value.  (Use the SetVariantA() method to remove an item.)
  428.         //@rvalue S_OK | Success.
  429.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  430.         //@xref <i ISEODictionary> <om ISEODictionary.SetVariantA> <om ISEODictionary.GetInterfaceA>
  431.         // <om ISEODictionary.GetInterfaceW> <om ISEODictionary.SetInterfaceW>
  432.         [helpstring("Set an interface by ANSI name.")]
  433.         HRESULT SetInterfaceA([in] LPCSTR pszName,
  434.                                                   [in,unique] IUnknown *punkValue);
  435.         //@method HRESULT | ISEODictionary | SetInterfaceW | Set an interface by Unicode name (high performance).
  436.         //@parm LPCWSTR | pszName | [in] Specifies the name.
  437.         //@parm IUnknown * | punkValue | [in,unique] Specifies the value.  (Use the SetVariantW() method to remove an item.)
  438.         //@rvalue S_OK | Success.
  439.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  440.         //@xref <i ISEODictionary> <om ISEODictionary.SetVariantW> <om ISEODictionary.GetInterfaceA>
  441.         // <om ISEODictionary.GetInterfaceW> <om ISEODictionary.SetInterfaceA>
  442.         [helpstring("Set an interface by Unicode name.")]
  443.         HRESULT SetInterfaceW([in] LPCWSTR pszName,
  444.                                                   [in,unique] IUnknown *punkValue);
  445. };
  446. //@doc EVENTS INTERNAL
  447. /*
  448.         @interface IEventLock | Contention control.  This interface provides methods for controlling
  449.         multi-threaded access to an object, and supports a multi-reader/single-writer model.
  450.         @meth HRESULT | LockRead | Lock the object for reading.
  451.         @meth HRESULT | UnlockRead | Reverse the effects of LockRead.
  452.         @meth HRESULT | LockWrite | Lock the object for writing.
  453.         @meth HRESULT | UnlockWrite | Reverse the effects of LockWrite.
  454. */
  455. [
  456.         dual,
  457.         helpstring("IEventLock."),
  458.         object,
  459.         pointer_default(unique),
  460.         hidden,
  461.         uuid(1b7058f0-af88-11d0-a9eb-00aa00685c74)
  462. ]
  463. interface IEventLock : IDispatch
  464. {
  465.         import "wtypes.idl";
  466.         import "ocidl.idl";
  467.         //@method HRESULT | IEventLock | LockRead | Lock the object for reading.  Read locks prevent write
  468.         // locks, but do not prevent other read locks.
  469.         //@parm int | iTimeoutMS | [in] The number of milliseconds to wait before timing out.  Use the value
  470.         // INFINITE for no timeout.
  471.         //@rvalue S_OK | Success.
  472.         //@rvalue EVENTS_E_TIMEOUT | Failure, the timeout expired.
  473.         //@xref <i IEventLock> <om IEventLock.UnlockRead> <om IEventLock.LockWrite>
  474.         [helpstring("Lock for reading.")]
  475.         HRESULT LockRead([in] int iTimeoutMS);
  476.         //@method HRESULT | IEventLock | UnlockRead | Reverse the effects of LockRead.
  477.         //@rvalue S_OK | Success.
  478.         //@xref <i IEventLock> <om IEventLock.LockRead>
  479.         [helpstring("Reverse the effects of a call to LockRead.")]
  480.         HRESULT UnlockRead();
  481.         //@method HRESULT | IEventLock | LockWrite | Lock the object for writing.  Write locks prevent both
  482.         // read locks and write locks.
  483.         //@parm int | iTimeoutMS | [in] The number of milliseconds to wait before timing out.  Use the value
  484.         // INFINITE for no timeout.
  485.         //@rvalue S_OK | Success.
  486.         //@rvalue EVENTS_E_TIMEOUT | Failure, the timeout expired.
  487.         //@xref <i IEventLock> <om IEventLock.UnlockWrite> <om IEventLock.LockRead>
  488.         [helpstring("Lock for writing.")]
  489.         HRESULT LockWrite([in] int iTimeoutMS);
  490.         //@method HRESULT | IEventLock | UnlockWrite | Reverse the effects of LockWrite.
  491.         //@rvalue S_OK | Success.
  492.         //@xref <i IEventLock> <om IEventLock.LockWrite>
  493.         [helpstring("Reverse the effects of a call to LockWrite.")]
  494.         HRESULT UnlockWrite();
  495. };
  496. //@doc SEO
  497. /*
  498.         @interface ISEORouter | Event router.  This object is the primary interface of the handle returned by
  499.         SEOInit().
  500.         @meth HRESULT | Database [propget] | Get the binding database.
  501.         @meth HRESULT | Database [propput] | Set the binding database.
  502.         @meth HRESULT | Server [propget] | Get the server object.
  503.         @meth HRESULT | Server [propput] | Set the server object.
  504.         @meth HRESULT | Applications [propget] | Get the collection of application objects.
  505.         @meth HRESULT | GetDispatcher | Get the dispatcher for a binding point.
  506.         @meth HRESULT | GetDispatcherByCLSID | Get the dispatcher for a binding point.
  507. */
  508. [
  509.         helpstring("SEOCOM event router"),
  510.         hidden,
  511.         object,
  512.         pointer_default(unique),
  513.         uuid(2b6ac0f0-7e03-11d0-a9e0-00aa00685c74)
  514. ]
  515. interface ISEORouter : IUnknown
  516. {
  517. import "wtypes.idl";
  518. import "ocidl.idl";
  519.         //@method HRESULT | ISEORouter | Database [propget] | Get the binding database.
  520.         //@parm ISEODictionary ** | ppdictResult | [out,retval] Receives the value.  Will be NULL if the value has
  521.         // never been set.
  522.         //@rvalue S_OK | Success.
  523.         //@xref <i ISEORouter> <om ISEORouter.Database [propput]>
  524.         [helpstring("Get the binding database."),propget]
  525.         HRESULT Database([out,retval] ISEODictionary **ppdictResult);
  526.         //@method HRESULT | ISEORouter | Database [propput] | Set the binding database.
  527.         //@parm ISEODictionary * | pdictDatabase | [in,unique] Specifies the value.
  528.         //@rvalue S_OK | Success.
  529.         //@xref <i ISEORouter> <om ISEORouter.Database [propget]>
  530.         [helpstring("Set the binding database."),propput]
  531.         HRESULT Database([in,unique] ISEODictionary *pdictDatabase);
  532.         //@method HRESULT | ISEORouter | Server [propget] | Get the server object.
  533.         //@parm ISEODictionary ** | ppdictResult | [out,retval] Receives the value.  Will be NULL if the
  534.         // value has never been set.
  535.         //@rvalue S_OK | Success.
  536.         //@xref <i ISEORouter> <om ISEORouter.Server [propput]>
  537.         [helpstring("Get the server object."),propget]
  538.         HRESULT Server([out,retval] ISEODictionary **ppdictResult);
  539.         //@method HRESULT | ISEORouter | Server [propput] | Set the server object.
  540.         //@parm ISEODictionary * | pdictServer | [in,unique] Specifies the value.
  541.         //@rvalue S_OK | Success.
  542.         //@xref <i ISEORouter> <om ISEORouter.Server [propget]>
  543.         [helpstring("Set the server object."),propput]
  544.         HRESULT Server([in,unique] ISEODictionary *pdictServer);
  545.         //@method HRESULT | ISEORouter | Applications [propget] | Get the collection of application objects.  The
  546.         // collection is represented as an ISEODictionary, where the name of each property in the dictionary is
  547.         // the name of the application, and the value of each property is itself an ISEODictionary.
  548.         //@parm ISEODictionary ** | ppdictResult | [out,retval] Receives the value.
  549.         //@rvalue S_OK | Success.
  550.         //@rvalue E_POINTER | Failure, bad pointer value.
  551.         //@xref <i ISEORouter> <i ISEODictionary>
  552.         [helpstring("Get the application collection."),propget]
  553.         HRESULT Applications([out,retval] ISEODictionary **ppdictResult);
  554.         //@method HRESULT | ISEORouter | GetDispatcher | Get the dispatcher for an event type.  If the
  555.         // dispatcher is present in the cache, then the cached instance is returned.  If it is not present
  556.         // in the cache, then a new one is created - if the newly created instance supports the
  557.         // ISEODispatcher interface, then ISEODispatcher::SetContext is called on the newly created instance
  558.         // before the object is returned to the client.
  559.         //@parm REFIID | iidEvent | [in] Specifies the type of event.
  560.         //@parm REFIID | iidDesired | [in] Specifies the interface desired.
  561.         //@parm IUnknown ** | ppUnkResult | [out,iid_is(iidDesired),retval] Receives the result.
  562.         //@rvalue S_OK | Success.
  563.         //@rvalue S_FALSE | Success, there are no bindings for this event (*ppUnkResult is NULL).
  564.         //@rvalue E_POINTER | Failure, bad pointer value.
  565.         [helpstring("Get the dispatcher for an event type.")]
  566.         HRESULT GetDispatcher([in] REFIID iidEvent,
  567.                                                   [in] REFIID iidDesired,
  568.                                                   [out,iid_is(iidDesired),retval] IUnknown **ppUnkResult);
  569.         //@method HRESULT | ISEORouter | GetDispatcherByCLSID | Get the dispatcher for an event type.  If the
  570.         // dispatcher is present in the cache, then the cached instance is returned.  If it is not present
  571.         // in the cache, then a new one is created - if the newly created instance supports the
  572.         // ISEODispatcher interface, then ISEODispatcher::SetContext is called on the newly created instance
  573.         // before the object is returned to the client.
  574.         //@parm REFCLSID | clsidDispatcher | [in] Specifies the CLSID of the dispatcher to load.
  575.         //@parm REFIID | iidEvent | [in] Specifies the type of event.
  576.         //@parm REFIID | iidDesired | [in] Specifies the interface desired.
  577.         //@parm IUnknown ** | ppUnkResult | [out,iid_is(iidDesired),retval] Receives the result.
  578.         //@rvalue S_OK | Success.
  579.         //@rvalue S_FALSE | Success, there are no bindings for this event (*ppUnkResult is NULL).
  580.         //@rvalue E_POINTER | Failure, bad pointer value.
  581.         [helpstring("Get the dispatcher for an event type.")]
  582.         HRESULT GetDispatcherByCLSID([in] REFCLSID clsidDispatcher,
  583.                                                                  [in] REFIID iidEvent,
  584.                                                                  [in] REFIID iidDesired,
  585.                                                                  [out,iid_is(iidDesired),retval] IUnknown **ppUnkResult);
  586. };
  587. //@doc SEO
  588. /*
  589.         @interface IMCISMessageFilter | MCIS message filter.  This interface is exposed by MCIS extension
  590.         objects which want to be notified about mail and news messages.
  591.         @meth HRESULT | OnMessage | Handle a message from the mail or news server.
  592. */
  593. [
  594.         helpstring("SEOCOM MCIS message filter."),
  595.         hidden,
  596.         object,
  597.         pointer_default(unique),
  598.         uuid(f174e5b0-9046-11d0-a9e8-00aa00685c74)
  599. ]
  600. interface IMCISMessageFilter : IUnknown
  601. {
  602. import "wtypes.idl";
  603. import "ocidl.idl";
  604.         //@method HRESULT | IMCISMessageFilter | OnMessage | Handle a message from the mail or news server.
  605.         //@parm IStream * | pstreamMessage | [in,unique] The message which was received.
  606.         //@parm ISEODictionary * | pdictEnvelope | [in,unique] Envelope data for the message.
  607.         //@parm ISEODictionary * | pdictBinding | [in,unique] The binding being signaled.
  608.         //@rvalue S_OK | Success.
  609.         //@rvalue SEO_S_DONEPROCESSING | Success, the message should not be handed to any other extension objects
  610.         // at this binding point.
  611.         //@xref <i ISEODictionary>
  612.         HRESULT OnMessage([in,unique] IStream *pstreamMessage,
  613.                                           [in,unique] ISEODictionary *pdictEnvelope,
  614.                                           [in,unique] ISEODictionary *pdictBinding);
  615. };
  616. //@doc SEO
  617. /*
  618.         @interface ISEOBindingRuleEngine | Evaluates events against rules.
  619.         @meth HRESULT | Evaluate | Evaluate the event against the rule.
  620. */
  621. [
  622.         helpstring("SEOCOM Rule Engine"),
  623.         hidden,
  624.         object,
  625.         pointer_default(unique),
  626.         uuid(f2d1daf0-2236-11d0-a9ce-00aa00685c74)
  627. ]
  628. interface ISEOBindingRuleEngine : IUnknown
  629. {
  630. import "wtypes.idl";
  631. import "ocidl.idl";
  632.         //@method HRESULT | ISEOBindingRuleEngine | Evaluate | Evaluate the event against the rule.
  633.         //@parm ISEODictionary * | pdictEvent | [in,unique] Specifies the event.
  634.         //@parm ISEODictionary * | pdictBinding | [in,unique] Specified the binding being checked.
  635.         //@rvalue S_OK | Success, the rule evaluated to TRUE.
  636.         //@rvalue S_FALSE | Success, the rule evaluated to FALSE.
  637.         //@xref <i ISEODictionary>
  638.         [helpstring("Evaluate the event against the rule.")]
  639.         HRESULT Evaluate([in,unique] ISEODictionary *pdictEvent,
  640.                                          [in,unique] ISEODictionary *pdictBinding);
  641. };
  642. //@doc SEO
  643. /*
  644.         @interface ISEOEventSink | Sinks events.
  645.         @meth HRESULT | OnEvent | Sink an event.
  646. */
  647. [
  648.         helpstring("SEOCOM Event Notification"),
  649.         hidden,
  650.         object,
  651.         pointer_default(unique),
  652.         uuid(1cab4c20-94f4-11d0-a9e8-00aa00685c74)
  653. ]
  654. interface ISEOEventSink : IUnknown
  655. {
  656. import "wtypes.idl";
  657. import "ocidl.idl";
  658.         //@method HRESULT | ISEOEventSink | OnEvent | Sink an event.
  659.         //@rvalue S_OK | Success.
  660.         //@rvalue SEO_S_CANCELLISTEN | Success, this event should not be fired again.
  661.         [helpstring("Handles an event.")]
  662.         HRESULT OnEvent();
  663. };
  664. [
  665.         helpstring("SEOCOM extended ISEODictionary, implemented on the registry"),
  666.         object,
  667.         pointer_default(unique),
  668.         uuid(347cacb0-2d1e-11d0-a9cf-00aa00685c74)
  669. ]
  670. interface ISEORegDictionary : ISEODictionary
  671. {
  672. import "wtypes.idl";
  673. import "ocidl.idl";
  674.         typedef SIZE_T SEO_HKEY;
  675.         [helpstring("Sets the machine, base registry key, and subkey.")]
  676.         HRESULT Load([in] LPCOLESTR pszMachine,
  677.                                  [in] SEO_HKEY skBaseKey,
  678.                                  [in] LPCOLESTR pszSubKey,
  679.                                  [in,unique] IErrorLog *pErrorLog);
  680. };
  681. [
  682.         helpstring("SEOCOM Converter for Event Binding Data"),
  683.         object,
  684.         pointer_default(unique),
  685.         uuid(ee4e64d0-31f1-11d0-a9d0-00aa00685c74)
  686. ]
  687. interface ISEOBindingConverter : IUnknown
  688. {
  689. import "wtypes.idl";
  690. import "ocidl.idl";
  691.         [helpstring("Converts event data.")]
  692.         HRESULT Convert([in] LONG lEventData, [out,retval] ISEODictionary **ppiResult);
  693. };
  694. //@doc SEO
  695. /*
  696.         @interface ISEODispatcher | Dispatches an event.
  697.         @meth HRESULT | SetContext | Sets the object's context.
  698. */
  699. [
  700.         helpstring("SEOCOM Binding Dispatcher"),
  701.         hidden,
  702.         object,
  703.         pointer_default(unique),
  704.         uuid(8ca89880-31f1-11d0-a9d0-00aa00685c74)
  705. ]
  706. interface ISEODispatcher : IUnknown
  707. {
  708.         import "wtypes.idl";
  709.         import "ocidl.idl";
  710.         //@method HRESULT | ISEODispatcher | SetContext | Sets the object's context.
  711.         //@parm ISEORouter * | piRouter | [in,unique] Specifies the router.
  712.         //@parm ISEODictionary * | pdictBP | [in,unique] Specifies the dictionary for the binding point.
  713.         [helpstring("Sets the object's context.")]
  714.         HRESULT SetContext([in,unique] ISEORouter *piRouter, [in,unique] ISEODictionary *pdictBP);
  715. };
  716. //@doc EVENTS EXTERNAL
  717. /*
  718.         @interface IEventDeliveryOptions | Provides access to event delivery options.  ****_TBD_****
  719. */
  720. [
  721.         dual,
  722.         helpstring("Provides access to event delivery options."),
  723.         object,
  724.         oleautomation,
  725.         pointer_default(unique),
  726.         uuid(0688a660-a3ff-11d0-a9e9-00aa00685c74)
  727. ]
  728. interface IEventDeliveryOptions : IDispatch
  729. {
  730.         import "wtypes.idl";
  731.         import "ocidl.idl";
  732. };
  733. //@doc EVENTS EXTERNAL
  734. /*
  735.         @interface IEventTypeSinks | Provides access to a collection of sinks for an event type.
  736.         Objects of this type are returned by the IEventType::Sinks [propget] method.  This object is
  737.         intended to provide automation-compatible access to the PROGID's of classes which are registered
  738.         in the component category matching the event type.
  739.         @meth HRESULT | Item | Get a sink.
  740.         @meth HRESULT | Add | Add a sink.
  741.         @meth HRESULT | Remove | Remove a sink.
  742.         @meth HRESULT | Count [propget] | Get the count of the sinks.
  743.         @meth HRESULT | _NewEnum [propget] | Get an enumerator for the sinks.
  744.         @xref <om IEventType::Sinks [propget]> <i IEventType>
  745. */
  746. [
  747.         dual,
  748.         helpstring("Provides access to a collection of sinks for an event type."),
  749.         object,
  750.         oleautomation,
  751.         pointer_default(unique),
  752.         uuid(a1063f50-a654-11d0-a9ea-00aa00685c74)
  753. ]
  754. interface IEventTypeSinks : IDispatch
  755. {
  756.         import "wtypes.idl";
  757.         import "ocidl.idl";
  758.         //@method HRESULT | IEventTypeSinks | Item | Get a sink.  This method returns one of the PROGID's
  759.         // for sinks registered in the component category of the event type.
  760.         //@parm long | lIndex | [in] Specifies the sink to get.  This is the one-based index into the
  761.         // collection.
  762.         //@parm BSTR * | pstrTypeSink | [out,retval] Receives the result.  This will be the PROGID of
  763.         // the sink.
  764.         //@rvalue S_OK | Success.
  765.         //@rvalue S_FALSE | Success, the index is out of bounds.  *pstrTypeSink is set to NULL.
  766.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  767.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  768.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  769.         [helpstring("Get a sink."),id(DISPID_VALUE)]
  770.         HRESULT Item([in] long lIndex, [out,retval] BSTR *pstrTypeSink);
  771.         //@method HRESULT | IEventTypeSinks | Add | Add a sink.  This method causes methods on the
  772.         // ICatRegister interface to be called, in order to register the sink into the component
  773.         // category for the event type.
  774.         //@parm BSTR | pszTypeSink | [in] Specifies the PROGID of the sink to register.
  775.         //@rvalue S_OK | Success.
  776.         //@rvalue S_FALSE | Success, the sink was already registered.
  777.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  778.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  779.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  780.         [helpstring("Add a sink.")]
  781.         HRESULT Add([in] BSTR pszTypeSink);
  782.         //@method HRESULT | IEventTypeSinks | Remove | Remove a sink.  This method causes methods on the
  783.         // ICatRegister interface to be called, in order to unregister the sink from the component
  784.         // category for the event type.
  785.         //@parm BSTR | pszTypeSink | [in] Specifies the PROGID of the sink to unregister.
  786.         //@rvalue S_OK | Success.
  787.         //@rvalue EVENTS_OK_ALREADYUNREGISTERED | Success, the sink was not registered.
  788.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  789.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  790.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  791.         [helpstring("Remove a sink.")]
  792.         HRESULT Remove([in] BSTR pszTypeSink);
  793.         //@method HRESULT | IEventTypeSinks | Count [propget] | Get the cound of the sinks.
  794.         //@parm long * | plCount | [out,retval] Receives the result.
  795.         //@rvalue S_OK | Success.
  796.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  797.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  798.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  799.         [helpstring("Get the count of the sinks."),propget]
  800.         HRESULT Count([out,retval] long *plCount);
  801.         //@method HRESULT | IEventTypeSinks | _NewEnum [propget] | Get an enumerator for the sinks.
  802.         //@parm IUnknown ** | ppUnkEnum | [out,retval] Receives the result.  This will be an object which
  803.         // implements IEnumVARIANT to enumerate the BSTR values of the PROGID's of the sinks.
  804.         [helpstring("Get an enumerator for the sinks."),id(DISPID_NEWENUM),propget,hidden]
  805.         HRESULT _NewEnum([out,retval] IUnknown **ppUnkEnum);
  806. };
  807. //@doc EVENTS EXTERNAL
  808. /*
  809.         @interface IEventType | Provides access to information about an event type.
  810.         @meth HRESULT | ID [propget] | Get the ID.
  811.         @meth HRESULT | DisplayName [propget] | Get the display name.
  812.         @meth HRESULT | Sinks [propget] | Get the sinks which support this event type.
  813.         @xref <i IEventTypes> <om ISourceType::EventTypes [propget]>
  814. */
  815. [
  816.         dual,
  817.         helpstring("Provides access to information about an event type."),
  818.         object,
  819.         oleautomation,
  820.         pointer_default(unique),
  821.         uuid(4a993b80-a654-11d0-a9ea-00aa00685c74)
  822. ]
  823. interface IEventType : IDispatch
  824. {
  825.         import "wtypes.idl";
  826.         import "ocidl.idl";
  827.         //@method HRESULT | IEventType | ID [propget] | Get the ID.
  828.         //@parm BSTR * | pstrID | [out,retval] Receives the result.  This will be the CATID of the
  829.         // component category for the event type, converted to a string using the StringFromGUID2()
  830.         // function.
  831.         //@rvalue S_OK | Success.
  832.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  833.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  834.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  835.         [helpstring("Get the ID."),propget]
  836.         HRESULT ID([out,retval] BSTR *pstrID);
  837.         //@method HRESULT | IEventType | DisplayName [propget] | Get the display name.
  838.         //@parm BSTR * | pstrDisplayName | [out,retval] Receives the result.  This will be the
  839.         // display name for the component category, in the currently-active locale.
  840.         //@rvalue S_OK | Success.
  841.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  842.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  843.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  844.         [helpstring("Get the display name."),propget]
  845.         HRESULT DisplayName([out,retval] BSTR *pstrDisplayName);
  846.         //@method HRESULT | IEventType | Sinks [propget] | Get the sinks which support this event type.
  847.         // This method returns an IEventTypeSinks collection, which lets the client enumerate, add,
  848.         // and remove the PROGID's for classes which are registered in the component category of the
  849.         // event type.
  850.         //@parm IEventTypeSinks ** | ppTypeSinks | [out,retval]  Receives the result.
  851.         //@xref <i IEventTypeSinks>
  852.         [helpstring("Get the sinks which support this event type."),propget]
  853.         HRESULT Sinks([out,retval] IEventTypeSinks **ppTypeSinks);
  854. };
  855. //@doc EVENTS EXTERNAL
  856. /*
  857.         @interface IEventPropertyBag | Implements IPropertyBag, in an automation-compatible way.
  858.         @meth HRESULT | Item | Get a property value.
  859.         @meth HRESULT | Name | Get the name of a property.
  860.         @meth HRESULT | Add | Add a property.
  861.         @meth HRESULT | Remove | Remove a property.
  862.         @meth HRESULT | Count [propget] | Get the count of the properties.
  863.         @meth HRESULT | _NewEnum [propget] | Get an enumerator for the names of the properties.
  864.         @xref <om IEventBinding::SinkProperties [propget]> <om IEventBinding::SourceProperties [propget]>
  865.         <om IEventBinding::EventBindingProperties [propget]>
  866. */
  867. [
  868.         dual,
  869.         helpstring("Implements IPropertyBag, in an automation-compatible way."),
  870.         object,
  871.         oleautomation,
  872.         pointer_default(unique),
  873.         uuid(aabb23e0-a705-11d0-a9ea-00aa00685c74)
  874. ]
  875. interface IEventPropertyBag : IDispatch
  876. {
  877.         //@method HRESULT | IEventPropertyBag | Item | Get a property value.
  878.         //@parm VARIANT * | pvarPropDesired | [in] Specifies the property to get.  This is either a number
  879.         // representing the one-based index of the property in the collection, or it is a string representing
  880.         // the name of the property.
  881.         //@parm VARIANT * | pvarPropValue | [out,retval] Receives the result.  If the property is not
  882.         // present, this will be VT_EMPTY.
  883.         //@rvalue S_OK | Success.
  884.         //@rvalue S_FALSE | Success, the property is not present - the result is VT_EMPTY.
  885.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  886.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  887.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  888.         [helpstring("Get a property."),id(DISPID_VALUE)]
  889.         HRESULT Item([in] VARIANT *pvarPropDesired, [out,retval] VARIANT *pvarPropValue);
  890.         //@method HRESULT | IEventPropertyBag | Name | Get the name of a property.
  891.         //@parm long | lPropIndex | [in] Specifies the index of the property to get.
  892.         //@parm BSTR * | pstrPropName | [out,retval] Receives the result.  If the property is not present,
  893.         // this will be NULL.
  894.         //@rvalue S_OK | Success.
  895.         //@rvalue S_FALSE | Success, the property is not present - the result is NULL.
  896.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  897.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  898.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  899.         [helpstring("Get the name of a property.")]
  900.         HRESULT Name([in] long lPropIndex, [out,retval] BSTR *pstrPropName);
  901.         //@method HRESULT | IEventPropertyBag | Add | Add a property.
  902.         //@parm BSTR | pszPropName | [in] Specifies the name of the property.
  903.         //@parm VARIANT * | pvarPropValue | [in] Specifies the value of the property.  If this is VT_EMPTY,
  904.         // then the property is removed.
  905.         //@rvalue S_OK | Success.
  906.         //@rvalue S_FALSE | Success, the property was already present and its previous value was overwritten.
  907.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  908.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  909.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  910.         [helpstring("Add a property.")]
  911.         HRESULT Add([in] BSTR pszPropName, [in] VARIANT *pvarPropValue);
  912.         //@method HRESULT | IEventPropertyBag | Remove | Remove a property.
  913.         //@parm VARIANT * | pvarPropDesired | Specifies the property to remove.  This is either a number
  914.         // representing the one-based index of the property in the collection, or it is a string representing
  915.         // the name of the property.
  916.         //@rvalue S_OK | Success.
  917.         //@rvalue S_FALSE | Success, the property was not present in the collection.
  918.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  919.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  920.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  921.         [helpstring("Remove a property.")]
  922.         HRESULT Remove([in] VARIANT *pvarPropDesired);
  923.         //@method HRESULT | IEventPropertyBag | Count [propget] | Get the count of the properties.
  924.         //@parm long * | plCount | [out,retval] Receives the result.
  925.         //@rvalue S_OK | Success.
  926.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  927.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  928.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  929.         [helpstring("Get the count of the properties."),propget]
  930.         HRESULT Count([out,retval] long *plCount);
  931.         //@method HRESULT | IEventPropertyBag | _NewEnum [propget] | Get an enumerator for the property names.
  932.         //@parm IUnknown ** | ppUnkEnum | [out,retval] Receives the result, which is an object which
  933.         // implements IEnumVARIANT for enumerating the names of the properties in the collection.
  934.         //@rvalue S_OK | Success.
  935.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  936.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  937.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  938.         [helpstring("Get an enumerator for the names of the properties."),id(DISPID_NEWENUM),propget,hidden]
  939.         HRESULT _NewEnum([out,retval] IUnknown **ppUnkEnum);
  940. };
  941. //@doc EVENTS EXTERNAL
  942. /*
  943.         @interface IEventBinding | Provides access to an event binding.  An event binding is a single
  944.         instance of a sink being bound to an event source.  IEventBinding provides access to information
  945.         stored in the binding database for the binding - for example, the object to be run to sink which
  946.         sinks events, data stored in the binding on behalf of the sink, etc.
  947.         @meth HRESULT | ID [propget] | Get the binding ID.
  948.         @meth HRESULT | DisplayName [propget] | Get the display name.
  949.         @meth HRESULT | DisplayName [propput] | Set the display name.
  950.         @meth HRESULT | DisplayName [propputref] | Set the display name.
  951.         @meth HRESULT | SinkClass [propget] | Get the sink class.
  952.         @meth HRESULT | SinkClass [propput] | Set the sink class.
  953.         @meth HRESULT | SinkClass [propputref] | Set the sink class.
  954.         @meth HRESULT | SinkProperties [propget] | Get the sink properties.
  955.         @meth HRESULT | SourceProperties [propget] | Get the source properties.
  956.         @meth HRESULT | EventBindingProperties [propget] | Get the event binding properties.
  957.         @meth HRESULT | Enabled [propget] | Get the enabled state.
  958.         @meth HRESULT | Enabled [propput] | Set the enabled state.
  959.         @meth HRESULT | Enabled [propputref] | Set the enabled state.
  960.         @meth HRESULT | Expiration [propget] | Get the expiration date.
  961.         @meth HRESULT | Expiration [propput] | Set the expiration date.
  962.         @meth HRESULT | Expiration [propputref] | Set the expiration date.
  963.         @meth HRESULT | MaxFirings [propget] | Get the maximum firings.
  964.         @meth HRESULT | MaxFirings [propput] | Set the maximum firings.
  965.         @meth HRESULT | MaxFirings [propputref] | Set the maximum firings.
  966.         @meth HRESULT | Save | Save changes.
  967.         @xref <i IEventBindings>
  968. */
  969. [
  970.         dual,
  971.         helpstring("Provides access to an event binding."),
  972.         object,
  973.         oleautomation,
  974.         pointer_default(unique),
  975.         uuid(8e398ce0-a64e-11d0-a9ea-00aa00685c74)
  976. ]
  977. interface IEventBinding : IDispatch
  978. {
  979.         import "wtypes.idl";
  980.         import "ocidl.idl";
  981.         //@method HRESULT | IEventBinding | ID [propget] | Get the binding ID.  The binding ID
  982.         // uniquely identifies the binding, in a persistable manner.
  983.         [helpstring("Get the binding ID."),propget]
  984.         HRESULT ID([out,retval] BSTR *pstrBindingID);
  985.         //@method HRESULT | IEventBinding | DisplayName [propget] | Get the display name.
  986.         //@parm BSTR * | pstrDisplayName | [out,retval] Receives the result.
  987.         //@rvalue S_OK | Success.
  988.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  989.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  990.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  991.         [helpstring("Get the display name."),propget]
  992.         HRESULT DisplayName([out,retval] BSTR *pstrDisplayName);
  993.         //@method HRESULT | IEventBinding | DisplayName [propput] | Set the display name.
  994.         //@parm BSTR | pszDisplayName | [in] Specifies the name.
  995.         //@rvalue S_OK | Success.
  996.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  997.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  998.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  999.         [helpstring("Set the display name."),propput]
  1000.         HRESULT DisplayName([in] BSTR pszDisplayName);
  1001.         //@method HRESULT | IEventBinding | DisplayName [propputref] | Set the display name.
  1002.         //@parm BSTR * | ppszDisplayName | [in] Specifies the name.
  1003.         //@rvalue S_OK | Success.
  1004.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1005.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1006.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1007.         [helpstring("Set the display name."),propputref]
  1008.         HRESULT DisplayName([in] BSTR *ppszDisplayName);
  1009.         //@method HRESULT | IEventBinding | SinkClass [propget] | Get the sink class.  The sink
  1010.         // class is the PROGID of the object which sinks events at this binding.
  1011.         //@parm BSTR * | pstrSinkClass | [out,retval] Receives the result.  This is the PROGID of
  1012.         // the object which sinks events in this binding.
  1013.         //@rvalue S_OK | Success.
  1014.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1015.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1016.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1017.         [helpstring("Get the sink class."),propget]
  1018.         HRESULT SinkClass([out,retval] BSTR *pstrSinkClass);
  1019.         //@method HRESULT | IEventBinding | SinkClass [propput] | Set the sink class.  The sink
  1020.         // class is the PROGID of the object which sinks events at this binding.
  1021.         //@parm BSTR | pszSinkClass | [in] A string for the PROGID of the object which is to sink
  1022.         // events in this binding.
  1023.         //@rvalue S_OK | Success.
  1024.         //@rvalue EVENTS_E_BADCLASS | Failure, the object class is bad.
  1025.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1026.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1027.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1028.         [helpstring("Set the sink class."),propput]
  1029.         HRESULT SinkClass([in] BSTR pszSinkClass);
  1030.         //@method HRESULT | IEventBinding | SinkClass [propputref] | Set the sink class.  The sink
  1031.         // class is the PROGID of the object which sinks events at this binding.
  1032.         //@parm BSTR * | ppszSinkClass | [in] A string for the PROGID of the object which is to sink
  1033.         // events in this binding.
  1034.         //@rvalue S_OK | Success.
  1035.         //@rvalue EVENTS_E_BADCLASS | Failure, the object class is bad.
  1036.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1037.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1038.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1039.         [helpstring("Set the sink class."),propputref]
  1040.         HRESULT SinkClass([in] BSTR *ppszSinkClass);
  1041.         //@method HRESULT | IEventBinding | SinkProperties [propget] | Get the sink properties.  The sink
  1042.         // properties are stored in an IEventPropertyBag, and are available to the sink when the sink is
  1043.         // created.
  1044.         //@parm IEventPropertyBag ** | ppSinkProperties | [out,retval] Receives the result.  This object
  1045.         // implements IEventPropertyBag for accessing the sink's properties.
  1046.         //@rvalue S_OK | Success.
  1047.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1048.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1049.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1050.         //@xref <i IEventPropertyBag>
  1051.         [helpstring("Get the sink properties."),propget]
  1052.         HRESULT SinkProperties([out,retval] IEventPropertyBag **ppSinkProperties);
  1053.         //@method HRESULT | IEventBinding | SourceProperties [propget] | Get the source properties.  The
  1054.         // source properties are stored in an IEventPropertyBag, and are available to the source for
  1055.         // controlling how events are signaled.
  1056.         //@parm IEventPropertyBag ** | ppSourceProperties | [out,retval] Receives the result.  This object
  1057.         // implements IEventPropertyBag for accessing the source's properties.
  1058.         //@rvalue S_OK | Success.
  1059.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1060.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1061.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1062.         //@xref <i IEventPropertyBag>
  1063.         [helpstring("Get the source properties."),propget]
  1064.         HRESULT SourceProperties([out,retval] IEventPropertyBag **ppSourceProperties);
  1065.         //@method HRESULT | IEventBinding | EventBindingProperties [propget] | Get the event binding
  1066.         // properties.  The event binding properties are stored in an IEventPropertyBag, and are used by the
  1067.         // event system for controlling how events are handled.
  1068.         //@parm IEventPropertyBag ** | ppEventBindingProperties | [out,retval] Receives the result.  This
  1069.         // object implements IEventPropertyBag for accessing the event binding's properties.
  1070.         //@rvalue S_OK | Success.
  1071.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1072.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1073.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1074.         //@xref <i IEventPropertyBag>
  1075.         [helpstring("Get the event binding data."),propget]
  1076.         HRESULT EventBindingProperties([out,retval] IEventPropertyBag **ppEventBindingProperties);
  1077.         //@method HRESULT | IEventBinding | Enabled [propget] | Get the enabled state.
  1078.         //@parm VARIANT_BOOL * | pbEnabled | [out,retval] Receives the result - VARIANT_TRUE if the binding
  1079.         // is enabled, and VARIANT_FALSE if the binding is disabled.
  1080.         //@rvalue S_OK | Success.
  1081.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1082.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1083.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1084.         [helpstring("Get the enabled state."),propget]
  1085.         HRESULT Enabled([out,retval] VARIANT_BOOL *pbEnabled);
  1086.         //@method HRESULT | IEventBinding | Enabled [propput] | Set the enabled state.
  1087.         //@parm VARIANT_BOOL | bEnabled | [in] Sets the enabled state - VARIANT_TRUE if the binding is to be
  1088.         // enabled, and VARIANT_FALSE if the binding is to be disabled.
  1089.         //@rvalue S_OK | Success.
  1090.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1091.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1092.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1093.         [helpstring("Get the enabled state."),propput]
  1094.         HRESULT Enabled([in] VARIANT_BOOL bEnabled);
  1095.         //@method HRESULT | IEventBinding | Enabled [propputref] | Set the enabled state.
  1096.         //@parm VARIANT_BOOL * | pbEnabled | [in] Sets the enabled state - VARIANT_TRUE if the binding is
  1097.         // to be enabled, and VARIANT_FALSE if the binding is to be disabled.
  1098.         //@rvalue S_OK | Success.
  1099.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1100.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1101.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1102.         [helpstring("Get the enabled state."),propputref]
  1103.         HRESULT Enabled([in] VARIANT_BOOL *pbEnabled);
  1104.         //@method HRESULT | IEventBinding | Expiration [propget] | Get the expiration date.
  1105.         //@parm DATE * | pdateExpiration | [out,retval] Receives the result.
  1106.         //@rvalue S_OK | Success.
  1107.         //@rvalue S_FALSE | Success, there is no expiration set.
  1108.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1109.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1110.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1111.         [helpstring("Get the expiration date."),propget]
  1112.         HRESULT Expiration([out,retval] DATE *pdateExpiration);
  1113.         //@method HRESULT | IEventBinding | Expiration [propput] | Set the expiration date.
  1114.         //@parm DATE | dateExpiration | [in] Specifies the expiration.  Setting an expiration of 0.0 will
  1115.         // remove the expiration.
  1116.         //@rvalue S_OK | Success.
  1117.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1118.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1119.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1120.         [helpstring("Get the expiration date."),propput]
  1121.         HRESULT Expiration([in] DATE dateExpiration);
  1122.         //@method HRESULT | IEventBinding | Expiration [propputref] | Set the expiration date.
  1123.         //@parm DATE * | pdateExpiration | [in] Specifies the expiration.  Setting an expiration of 0.0 will
  1124.         // remove the expiration.
  1125.         //@rvalue S_OK | Success.
  1126.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1127.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1128.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1129.         [helpstring("Get the expiration date."),propputref]
  1130.         HRESULT Expiration([in] DATE *pdateExpiration);
  1131.         //@method HRESULT | IEventBinding | MaxFirings [propget] | Get the maximum number of firings.
  1132.         //@parm long * | plMaxFirings | [out,retval] Receives the result.
  1133.         //@rvalue S_OK | Success.
  1134.         //@rvalue S_FALSE | Success, there is no max firings limitation.
  1135.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1136.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1137.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1138.         [helpstring("Get the maximum number of firings."),propget]
  1139.         HRESULT MaxFirings([out,retval] long *plMaxFirings);
  1140.         //@method HRESULT | IEventBinding | MaxFirings [propput] | Set the maximum number of firings.
  1141.         //@parm long  | lMaxFirings | [in] Specifies the maximum number of firings.  Setting a max firings
  1142.         // of -1 removes the max firings setting.
  1143.         //@rvalue S_OK | Success.
  1144.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1145.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1146.         [helpstring("Set the maximum number of firings."),propput]
  1147.         HRESULT MaxFirings([in] long lMaxFirings);
  1148.         //@method HRESULT | IEventBinding | MaxFirings [propputref] | Set the maximum number of firings.
  1149.         //@parm long  * | plMaxFirings | [in] Specifies the maximum number of firings.  Setting a max firings
  1150.         // of -1 removes the max firings setting.
  1151.         //@rvalue S_OK | Success.
  1152.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1153.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1154.         [helpstring("Set the maximum number of firings."),propputref]
  1155.         HRESULT MaxFirings([in] long *plMaxFirings);
  1156.         //@method HRESULT | IEventBinding | Save | Save changes.  Changes made using the
  1157.         // other methods of this interface are not written to the binding database until the Save()
  1158.         // method is called.
  1159.         //@rvalue S_OK | Success.
  1160.         //@rvalue EVENTS_E_BADCLASS | Failure, the object class is bad.
  1161.         //@rvalue EVENTS_E_BADEVENTTYPE | Failure, the event type is bad.
  1162.         //@rvalue EVENTS_E_BADATA | Failure, the binding contains bad data.
  1163.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1164.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1165.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1166.         [helpstring("Save changes.")]
  1167.         HRESULT Save();
  1168. };
  1169. //@doc EVENTS EXTERNAL
  1170. /*
  1171.         @interface IEventBindings | Provides access to a collection of event bindings.
  1172.         @meth HRESULT | Item | Get an event binding.
  1173.         @meth HRESULT | Add | Create an event binding.
  1174.         @meth HRESULT | Remove | Remove an event binding.
  1175.         @meth HRESULT | Count [propget] | Get the count of the event bindings.
  1176.         @meth HRESULT | _NewEnum [propget] | Get an enumerator for the event bindings.
  1177.         @xref <i IEventBinding> <om IEventBindingManager::Bindings [propget]>
  1178. */
  1179. [
  1180.         dual,
  1181.         helpstring("Provides access to a collection of event bindings."),
  1182.         object,
  1183.         oleautomation,
  1184.         pointer_default(unique),
  1185.         uuid(1080b910-a636-11d0-a9ea-00aa00685c74)
  1186. ]
  1187. interface IEventBindings : IDispatch
  1188. {
  1189.         import "wtypes.idl";
  1190.         import "ocidl.idl";
  1191.         //@method HRESULT | IEventBindings | Item | Get an event binding.
  1192.         //@parm VARIANT * | pvarDesired | [in] Specifies the event binding to get.  This is either a
  1193.         // number which is the one-based index of the binding to get, or it is a string which is the ID
  1194.         // of the binding to get.
  1195.         //@parm IEventBinding ** | ppEventBinding | [out,retval] Receives the result.
  1196.         //@rvalue S_OK | Success.
  1197.         //@rvalue S_FALSE | Success, the binding is not present in the collection.  *ppEventBinding is
  1198.         // set to NULL.
  1199.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1200.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1201.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1202.         //@xref <om IEventBinding::ID [propget]> <i IEventBinding>
  1203.         [helpstring("Get an event binding."),id(DISPID_VALUE)]
  1204.         HRESULT Item([in] VARIANT *pvarDesired, [out,retval] IEventBinding **ppEventBinding);
  1205.         //@method HRESULT | IEventBindings | Add | Create an event binding.  The new binding object is
  1206.         // not initialized or written to the binding database - after creating it, the client must call
  1207.         // methods in the IEventBinding interface to initialize it, and then call the
  1208.         // IEventBinding::Save method to write the new binding to the binding database.
  1209.         //@parm BSTR | strBinding | [in] Specifies the ID of the binding.  This is a GUID, converted
  1210.         // to a string using StringFromGUID2().  If this value is NULL, or an empty string, or the value
  1211.         // GUID_NULL, then a new GUID will be generated for the binding (and the IEventBinding::ID
  1212.         // [propget] method may be used to retrieve it).
  1213.         //@parm IEventBinding ** | ppBinding | [out,retval] Receives the new binding object.
  1214.         //@rvalue S_OK | Success.
  1215.         //@rvalue S_FALSE | Success, the binding was already present.  *ppBinding has a pointer to the
  1216.         // pre-existing binding.
  1217.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1218.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1219.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1220.         //@xref <om IEventBinding::ID [propget]> <i IEventBinding>
  1221.         [helpstring("Create an event binding.")]
  1222.         HRESULT Add([in] BSTR strBinding, [out,retval] IEventBinding **ppBinding);
  1223.         //@method HRESULT | IEventBindings | Remove | Delete an event binding.
  1224.         //@parm VARIANT * | pvarDesired | [in] Specifies the event binding to remove.  This is either a
  1225.         // number which is the one-based index of the binding to remove, or it is a string which is the
  1226.         // ID of the binding to remove.
  1227.         //@rvalue S_OK | Success.
  1228.         //@rvalue S_FALSE | Success, the event binding was not present in the collection.
  1229.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1230.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1231.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1232.         //@xref <om IEventBinding::ID [propget]>
  1233.         [helpstring("Remove an event binding.")]
  1234.         HRESULT Remove([in] VARIANT *pvarDesired);
  1235.         //@method HRESULT | IEventBindings | Count [propget] | Get the count of the event bindings.
  1236.         //@parm long * | plCount | [out,retval] Receives the result.
  1237.         //@rvalue S_OK | Success.
  1238.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1239.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1240.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1241.         [helpstring("Get the count of the event bindings."),propget]
  1242.         HRESULT Count([out,retval] long *plCount);
  1243.         //@method HRESULT | IEventBindings | _NewEnum [propget] | Get an enumerator for the bindings.
  1244.         //@parm IUnknown ** | ppUnkEnum | [out,retval] Receives the result.  This will be an object which
  1245.         // implements IEnumVARIANT to enumerate the IEventBinding interfaces of the binding objects.
  1246.         //@rvalue S_OK | Success.
  1247.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1248.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1249.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1250.         //@xref <i IEventBinding>
  1251.         [helpstring("Get an enumerator for the bindings."),id(DISPID_NEWENUM),propget,hidden]
  1252.         HRESULT _NewEnum([out,retval] IUnknown **ppUnkEnum);
  1253. };
  1254. //@doc EVENTS EXTERNAL
  1255. /*
  1256.         @interface IEventTypes | Provides access to a collection of event types.
  1257.         @meth HRESULT | Item | Get an event type.
  1258.         @meth HRESULT | Add | Add an event type.
  1259.         @meth HRESULT | Remove | Remove an event type.
  1260.         @meth HRESULT | Count [propget] | Get the count of the event types.
  1261.         @meth HRESULT | _NewEnum [propget] | Get an enumerator for the event types.
  1262.         @xref <i IEventType> <om IEventSourceType::EventTypes [propget]>
  1263. */
  1264. [
  1265.         dual,
  1266.         helpstring("Provides access to a collection of event types."),
  1267.         object,
  1268.         oleautomation,
  1269.         pointer_default(unique),
  1270.         uuid(cab29ef0-a64f-11d0-a9ea-00aa00685c74)
  1271. ]
  1272. interface IEventTypes : IDispatch
  1273. {
  1274.         import "wtypes.idl";
  1275.         import "ocidl.idl";
  1276.         //@method HRESULT | IEventTypes | Item | Get an event type.
  1277.         //@parm VARIANT * | pvarDesired | [in] Specifies the event type to get.  This is either a number
  1278.         // representing the one-based index into the collection of the event type to get, or it is a
  1279.         // string representing the CATID (converted using the StringFromGUID2() function) of the event
  1280.         // type to get.
  1281.         //@parm IEventType ** | ppEventType | [out,retval] Receives the result.
  1282.         //@rvalue S_OK | Success.
  1283.         //@rvalue S_FALSE | Success, the item is not present.  *ppEvent is NULL.
  1284.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1285.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1286.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1287.         //@xref <i IEventType>
  1288.         [helpstring("Get an event type."),id(DISPID_VALUE)]
  1289.         HRESULT Item([in] VARIANT *pvarDesired, [out,retval] IEventType ** ppEventType);
  1290.         //@method HRESULT | IEventTypes | Add | Add an event type.
  1291.         //@parm BSTR | pszEventType | [in] Specifies the CATID (converted using the
  1292.         // StringFromGUID2() function) of the event type to add.
  1293.         //@rvalue S_OK | Success.
  1294.         //@rvalue S_FALSE | Success, the event type was already registered in the source type.
  1295.         //@rvalue EVENTS_E_BADEVENTTYPE | Failure, the event type is not a valid component category.
  1296.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1297.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1298.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1299.         //@xref <om IEventType::ID [propget]>
  1300.         [helpstring("Add an event type.")]
  1301.         HRESULT Add([in] BSTR pszEventType);
  1302.         //@method HRESULT | IEventTypes | Remove | Remove an event type.  This method can only be called if
  1303.         // this object was returned by IEventManager::EventTypes() for a particular source type.
  1304.         // When called under those circumstances, this method removes the event type from the list of
  1305.         // event types which the source type supports.
  1306.         //@parm BSTR | pszEventType | [in] Specifies the CATID (converted using the
  1307.         // StringFromGUID2() function) of the event type to remove.
  1308.         //@rvalue S_OK | Success.
  1309.         //@rvalue S_FALSE | Success, the event type was not registered in the source type.
  1310.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1311.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1312.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1313.         //@xref <om IEventType::ID [propget]>
  1314.         [helpstring("Remove an event type.")]
  1315.         HRESULT Remove([in] BSTR pszEventType);
  1316.         //@method HRESULT | IEventTypes | Count [propget] | Get the count of the event types.
  1317.         //@parm long * | plCount | [out,retval] Receives the result.
  1318.         //@rvalue S_OK | Success.
  1319.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1320.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1321.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1322.         [helpstring("Get the count of the event types."),propget]
  1323.         HRESULT Count([out,retval] long *plCount);
  1324.         //@method HRESULT | IEventTypes | _NewEnum [propget] | Get an enumerator for the event types.
  1325.         //@parm IUnknown ** | ppUnkEnum | [out,retval] Receives the result, which is an object which
  1326.         // implements IEnumVARIANT for enumerating the IEventType interfaces of the event types in the
  1327.         // collection.
  1328.         //@rvalue S_OK | Success.
  1329.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1330.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1331.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1332.         //@xref <i IEventType>
  1333.         [helpstring("Get an enumerator for the event types."),id(DISPID_NEWENUM),propget,hidden]
  1334.         HRESULT _NewEnum([out,retval] IUnknown **ppUnkEnum);
  1335. };
  1336. //@doc EVENTS EXTERNAL
  1337. /*
  1338.         @interface IEventBindingManager | Provides access to an instance of a binding database.
  1339.         @meth HRESULT | Bindings [propget] | Get the event bindings.
  1340.         @meth HRESULT | _NewEnum [propget] | Get an enumerator for the event types.
  1341.         @xref <i IEventBindings> <i IEventBinding> <i IEventTypes> <i IEventTypes>
  1342.         <om IEventSource::GetBindingManager>
  1343. */
  1344. [
  1345.         dual,
  1346.         helpstring("Provides access to an instance of a binding database."),
  1347.         object,
  1348.         oleautomation,
  1349.         pointer_default(unique),
  1350.         uuid(0b4cdbc0-a64f-11d0-a9ea-00aa00685c74)
  1351. ]
  1352. interface IEventBindingManager : IDispatch
  1353. {
  1354.         import "wtypes.idl";
  1355.         import "ocidl.idl";
  1356.         //@method HRESULT | IEventBindingManager | Bindings [propget] | Get the event bindings.
  1357.         //@parm BSTR | pszEventType | [in] Specifies the event type of the bindings to get.  It is
  1358.         // a string representation of the CATID of the event type, generated by StringFromGUID2().
  1359.         //@parm IEventBindings ** | ppBindings | [out,retval] Receives the result.
  1360.         //@rvalue S_OK | Success.
  1361.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1362.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1363.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1364.         //@xref <i IEventBindings> <i IEventBinding>
  1365.         [helpstring("Get the event bindings."),propget]
  1366.         HRESULT Bindings([in] BSTR pszEventType, [out,retval] IEventBindings **ppBindings);
  1367.         //@method HRESULT | IEventBindingManager | _NewEnum [propget] | Get an enumerator for the event types.
  1368.         //@parm IUnknown ** | ppUnkEnum | [out,retval] Receives the result.  This will be an object which
  1369.         // implements IEnumVARIANT to enumerate the BSTR values of the event types.
  1370.         [helpstring("Get an enumerator for the sinks."),id(DISPID_NEWENUM),propget,hidden]
  1371.         HRESULT _NewEnum([out,retval] IUnknown **ppUnkEnum);
  1372. };
  1373. //@doc EVENTS INTERNAL
  1374. /*
  1375.         @interface IEventBindingManagerCopier | Makes copies of the IEventBindingManager object.
  1376.         @meth HRESULT | Copy | Make a copy of the object.
  1377.         @meth HRESULT | EmptyCopy | Make an empty copy of the object.
  1378.         @xref <i IEventBindingManager>
  1379. */
  1380. [
  1381.         dual,
  1382.         helpstring("Makes copies of the IEventBindingManager object."),
  1383.         hidden,
  1384.         object,
  1385.         oleautomation,
  1386.         pointer_default(unique),
  1387.         uuid(64bad540-f88d-11d0-aa14-00aa006bc80b)
  1388. ]
  1389. interface IEventBindingManagerCopier : IDispatch
  1390. {
  1391.         import "wtypes.idl";
  1392.         import "ocidl.idl";
  1393.         //@method HRESULT | IEventBindingManagerCopier | Copy | Make a copy of the object.  The copy is
  1394.         // implemented in-memory - any changes made to the copy will not affect the original.
  1395.         //@parm long | lTimeout | [in] Specifies the timeout in milliseconds.
  1396.         //@parm IEventBindingManager ** | ppBindingManager | [out] Receives the result.
  1397.         //@rvalue S_OK | Success.
  1398.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1399.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1400.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1401.         [helpstring("Make a copy of the object.")]
  1402.         HRESULT Copy([in] long lTimeout, [out,retval] IEventBindingManager **ppBindingManager);
  1403.         //@method HRESULT | IEventBindingManagerCopier | EmptyCopy | Make an empty copy of the object.  The
  1404.         // copy is implemented in-memory - any changes made to the copy will not affect the original.
  1405.         //@parm IEventBindingManager ** | ppBindingManager | [out] Receives the result.
  1406.         //@rvalue S_OK | Success.
  1407.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1408.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1409.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1410.         [helpstring("Make an empty copy of the object.")]
  1411.         HRESULT EmptyCopy([out,retval] IEventBindingManager **ppBindingManager);
  1412. }
  1413. interface IEventDispatcher;
  1414. //@doc EVENTS INTERNAL
  1415. /*
  1416.         @interface IEventRouter | Event router.
  1417.         @meth HRESULT | Database [propget] | Get the binding database.
  1418.         @meth HRESULT | Database [propput] | Set the binding database.
  1419.         @meth HRESULT | Database [propputref] | Set the binding database.
  1420.         @meth HRESULT | GetDispatcher | Get the dispatcher for an event type.
  1421.         @meth HRESULT | GetDispatcherByCLSID | Get the dispatcher for an event type.
  1422.         @meth HRESULT | GetDispatcherByClassFactory | Get the dispatcher for an event type.
  1423. */
  1424. [
  1425.         helpstring("Event router."),
  1426.         hidden,
  1427.         object,
  1428.         pointer_default(unique),
  1429.         uuid(1a00b970-eda0-11d0-aa10-00aa006bc80b)
  1430. ]
  1431. interface IEventRouter : IUnknown
  1432. {
  1433.         import "wtypes.idl";
  1434.         import "ocidl.idl";
  1435.         //@method HRESULT | IEventRouter | Database [propget] | Get the binding database.
  1436.         //@parm IEventBindingManager ** | ppBindingManager | [out,retval] Receives the value.  Will be NULL
  1437.         // if the value has never been set.
  1438.         //@rvalue S_OK | Success.
  1439.         //@xref <om IEventRouter.Database [propput]>
  1440.         [helpstring("Get the binding database."),propget]
  1441.         HRESULT Database([out,retval] IEventBindingManager **ppBindingManager);
  1442.         //@method HRESULT | IEventRouter | Database [propput] | Set the binding database.
  1443.         //@parm IEventBindingManager * | pBindingManager | [in,unique] Specifies the value.
  1444.         //@rvalue S_OK | Success.
  1445.         //@xref <om IEventRouter.Database [propget]> <om IEventRouter.Database [propputref]>
  1446.         [helpstring("Set the binding database."),propput]
  1447.         HRESULT Database([in,unique] IEventBindingManager *pBindingManager);
  1448.         //@method HRESULT | IEventRouter | Database [propputref] | Set the binding database.
  1449.         //@parm IEventBindingManager ** | ppBindingManager | [in,unique] Specifies the value.
  1450.         //@rvalue S_OK | Success.
  1451.         //@xref <om IEventRouter.Database [propget]> <om IEventRouter.Database [propput]>
  1452.         [helpstring("Set the binding database."),propputref]
  1453.         HRESULT Database([in,unique] IEventBindingManager **ppBindingManager);
  1454.         //@method HRESULT | IEventRouter | GetDispatcher | Get the dispatcher for an event type.  If the
  1455.         // dispatcher is present in the cache, then the cached instance is returned.  If it is not present
  1456.         // in the cache, then a new one is created - if the newly created instance supports the
  1457.         // IEventDispatcher interface, then IEventDispatcher::SetContext is called on the newly created
  1458.         // instance before the object is returned to the client.
  1459.         //@parm REFIID | iidEvent | [in] Specifies the type of event.
  1460.         //@parm REFIID | iidDesired | [in] Specifies the interface desired.
  1461.         //@parm IUnknown ** | ppUnkResult | [out,iid_is(iidDesired),retval] Receives the result.
  1462.         //@rvalue S_OK | Success.
  1463.         //@rvalue E_POINTER | Failure, bad pointer value.
  1464.         [helpstring("Get the dispatcher for an event type.")]
  1465.         HRESULT GetDispatcher([in] REFIID iidEvent,
  1466.                                                   [in] REFIID iidDesired,
  1467.                                                   [out,iid_is(iidDesired),retval] IUnknown **ppUnkResult);
  1468.         //@method HRESULT | IEventRouter | GetDispatcherByCLSID | Get the dispatcher for an event type.  If
  1469.         // the dispatcher is present in the cache, then the cached instance is returned.  If it is not
  1470.         // present in the cache, then a new one is created - if the newly created instance supports the
  1471.         // IEventDispatcher interface, then IEventDispatcher::SetContext is called on the newly created
  1472.         // instance before the object is returned to the client.
  1473.         //@parm REFCLSID | clsidDispatcher | [in] Specifies the CLSID of the dispatcher to load.
  1474.         //@parm REFIID | iidEvent | [in] Specifies the type of event.
  1475.         //@parm REFIID | iidDesired | [in] Specifies the interface desired.
  1476.         //@parm IUnknown ** | ppUnkResult | [out,iid_is(iidDesired),retval] Receives the result.
  1477.         //@rvalue S_OK | Success.
  1478.         //@rvalue E_POINTER | Failure, bad pointer value.
  1479.         [helpstring("Get the dispatcher for an event type.")]
  1480.         HRESULT GetDispatcherByCLSID([in] REFCLSID clsidDispatcher,
  1481.                                                                  [in] REFIID iidEvent,
  1482.                                                                  [in] REFIID iidDesired,
  1483.                                                                  [out,iid_is(iidDesired),retval] IUnknown **ppUnkResult);
  1484.         //@method HRESULT | IEventRouter | GetDispatcherByClassFactory | Get the dispatcher for an event
  1485.         // type.  If the dispatcher is present in the cache, then the caches instance is returned.  If it is
  1486.         // not present in the cache, then a new one is created - if the newly created instance supports the
  1487.         // IEventDispatcher interface, then IEventDispatcher::SetContext is called on the newly created
  1488.         // instance before the object is returned to the client.
  1489.         //@parm REFCLSID | clsidDispatcher | [in] Specifies the CLSID of the dispatcher to load.  If a
  1490.         // dispatcher with this CLSID is not already loaded, then the piClassFactory object is used to create
  1491.         // one.
  1492.         //@parm IClassFactory * | piClassFactory | [in] Specifies the class factory which is to be used if
  1493.         // the dispatcher needs to be created.
  1494.         //@parm REFIID | iidEvent | [in] Specifies the type of event.
  1495.         //@parm REFIID | iidDesired | [in] Specifies the interface desired.
  1496.         //@parm IUnknown ** | ppUnkResult | [out,iid_is(iidDesired),retval] Receives the result.
  1497.         //@rvalue S_OK | Success.
  1498.         //@rvalue E_POINTER | Failure, bad pointer value.
  1499.         [helpstring("Get the dispatcher for an event type.")]
  1500.         HRESULT GetDispatcherByClassFactory([in] REFCLSID clsidDispatcher,
  1501.                                                                                 [in] IClassFactory *piClassFactory,
  1502.                                                                                 [in] REFIID iidEvent,
  1503.                                                                                 [in] REFIID iidDesired,
  1504.                                                                                 [out,iid_is(iidDesired),retval] IUnknown **ppUnkResult);
  1505. };
  1506. //@doc EVENTS EXTERNAL
  1507. /*
  1508.         @interface IEventDispatcher | Dispatches an event.
  1509.         @meth HRESULT | SetContext | Sets the object's context.
  1510. */
  1511. [
  1512.         helpstring("Dispatches an event."),
  1513.         hidden,
  1514.         object,
  1515.         pointer_default(unique),
  1516.         uuid(c980f550-ed9e-11d0-aa10-00aa006bc80b)
  1517. ]
  1518. interface IEventDispatcher : IUnknown
  1519. {
  1520.         import "wtypes.idl";
  1521.         import "ocidl.idl";
  1522.         //@method HRESULT | IEventDispatcher | SetContext | Sets the object's context.
  1523.         //@parm REFGUID | guidEventType | [in] Specifies the event type.
  1524.         //@parm IEventRouter * | piRouter | [in] Specifies the router.
  1525.         //@parm IEventBindings * | pBindings | [in] Specifies the bindings.
  1526.         [helpstring("Sets the object's context.")]
  1527.         HRESULT SetContext([in] REFGUID guidEventType, [in] IEventRouter *piRouter, [in] IEventBindings *pBindings);
  1528. };
  1529. interface IEventSourceType;
  1530. //@doc EVENTS EXTERNAL
  1531. /*
  1532.         @interface IEventSource | Provides information about an event source.
  1533.         @meth HRESULT | ID [propget] | Get the ID.
  1534.         @meth HRESULT | DisplayName [propget] | Get the display name.
  1535.         @meth HRESULT | DisplayName [propput] | Set the display name.
  1536.         @meth HRESULT | DisplayName [propputref] | Set the display name.
  1537.         @meth HRESULT | BindingManagerMoniker [propget] | Get the moniker for the binding manager.
  1538.         @meth HRESULT | BindingManagerMoniker [propput] | Set the moniker for the binding manager.
  1539.         @meth HRESULT | BindingManagerMoniker [propputref] | Set the moniker for the binding manager.
  1540.         @meth HRESULT | GetBindingManager | Get the binding manager.
  1541.         @meth HRESULT | Save | Save changes.
  1542.         @xref <i IEventSourceType>
  1543. */
  1544. [
  1545.         dual,
  1546.         helpstring("Provides information about an event source."),
  1547.         object,
  1548.         oleautomation,
  1549.         pointer_default(unique),
  1550.         uuid(b1dcb040-a652-11d0-a9ea-00aa00685c74)
  1551. ]
  1552. interface IEventSource : IDispatch
  1553. {
  1554.         import "wtypes.idl";
  1555.         import "ocidl.idl";
  1556.         //@method HRESULT | IEventSource | ID [propget] | Get the ID.
  1557.         //@parm BSTR * | pstrID | [out,retval] Receives the result.  This is the GUID for the event
  1558.         // source, converted to a string using the StringFromGUID2() function.
  1559.         //@rvalue S_OK | Success.
  1560.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1561.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1562.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1563.         [helpstring("Get the ID."),propget]
  1564.         HRESULT ID([out,retval] BSTR *pstrID);
  1565.         //@method HRESULT | IEventSource | DisplayName [propget] | Get the display name.
  1566.         //@parm BSTR * | pstrDisplayName | [out,retval] Receives the result.
  1567.         //@rvalue S_OK | Success.
  1568.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1569.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1570.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1571.         [helpstring("Get the display name."),propget]
  1572.         HRESULT DisplayName([out,retval] BSTR *pstrDisplayName);
  1573.         //@method HRESULT | IEventSource | DisplayName [propput] | Set the display name.
  1574.         //@parm BSTR | pszDisplayName | [in] Specifies the name.
  1575.         //@rvalue S_OK | Success.
  1576.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1577.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1578.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1579.         [helpstring("Set the display name."),propput]
  1580.         HRESULT DisplayName([in] BSTR pszDisplayName);
  1581.         //@method HRESULT | IEventSource | DisplayName [propputref] | Set the display name.
  1582.         //@parm BSTR * | ppszDisplayName | [in] Specifies the name.
  1583.         //@rvalue S_OK | Success.
  1584.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1585.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1586.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1587.         [helpstring("Set the display name."),propputref]
  1588.         HRESULT DisplayName([in] BSTR *ppszDisplayName);
  1589.         //@method HRESULT | IEventSource | BindingManagerMoniker [propget] | Get the moniker for the
  1590.         // binding manager.
  1591.         //@parm IUnknown ** | ppUnkMoniker | [out,retval] Receives the result.
  1592.         //@rvalue S_OK | Success.
  1593.         //@rvalue EVENTS_E_BADDATA | Failure, the moniker for the binding manager has not been set.
  1594.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1595.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1596.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1597.         //@xref <i IEventBindingManager> <om IEventSource::GetBindingManager>
  1598.         [helpstring("Get the moniker for the binding manager."),propget]
  1599.         HRESULT BindingManagerMoniker([out,retval] IUnknown **ppUnkMoniker);
  1600.         //@method HRESULT | IEventSource | BindingManagerMoniker [propput] | Set the moniker for the
  1601.         // binding manager.
  1602.         //@parm IUnknown * | pUnkMoniker | [in] Specifies the value.
  1603.         //@rvalue S_OK | Success.
  1604.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1605.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1606.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1607.         //@xref <i IEventBindingManager> <om IEventSource::GetBindingManager>
  1608.         [helpstring("Set the moniker for the binding manager."),propput]
  1609.         HRESULT BindingManagerMoniker([in] IUnknown *pUnkMoniker);
  1610.         //@method HRESULT | IEventSource | BindingManagerMoniker [propputref] | Set the moniker for the
  1611.         // binding manager.
  1612.         //@parm IUnknown ** | ppUnkMoniker | [in] Specifies the value.
  1613.         //@rvalue S_OK | Success.
  1614.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1615.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1616.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1617.         //@xref <i IEventBindingManager> <om IEventSource::GetBindingManager>
  1618.         [helpstring("Set the moniker for the binding manager."),propputref]
  1619.         HRESULT BindingManagerMoniker([in] IUnknown **ppUnkMoniker);
  1620.         //@method HRESULT | IEventSource | GetBindingManager | Get the binding manager.  This function is
  1621.         // the equivalent of calling the BindingManagerMoniker() [propget] method, and then calling
  1622.         // the IMoniker::BindToObject() method on the moniker.
  1623.         //@parm IEventBindingManager ** | ppBindingManager | [out,retval] Receives the result.
  1624.         //@rvalue S_OK | Success.
  1625.         //@rvalue EVENTS_E_BADDATA | Failure, the moniker for the binding manager has not been set.
  1626.         //@rvalue E_OUTOFMEMORY | Failure, out of memory.
  1627.         //@rvalue E_POINTER | Failure, a bad pointer was passed to the function.
  1628.         //@rvalue E_ACCESSDENIED | Failure, access is denied.
  1629.         //@xref <om IEventSource::BindingManagerMoniker [propget]> <i IEventBindingManager>
  1630.         [helpstring("Get the binding manager.")]
  1631.         HRESULT GetBindingManager([out,retval] IEventBindingManager **ppBindingManager);
  1632.         // @method HRESULT | IEventSource | Properties [propget] | Get the source properties.