| /* | 
 |  * Copyright 2007 Robert Shearman for CodeWeavers | 
 |  * | 
 |  * This library is free software; you can redistribute it and/or | 
 |  * modify it under the terms of the GNU Lesser General Public | 
 |  * License as published by the Free Software Foundation; either | 
 |  * version 2.1 of the License, or (at your option) any later version. | 
 |  * | 
 |  * This library is distributed in the hope that it will be useful, | 
 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
 |  * Lesser General Public License for more details. | 
 |  * | 
 |  * You should have received a copy of the GNU Lesser General Public | 
 |  * License along with this library; if not, write to the Free Software | 
 |  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | 
 |  */ | 
 |  | 
 | import "ocidl.idl"; | 
 | import "objidl.idl"; | 
 | import "propidl.idl"; | 
 |  | 
 | #define DECLARE_HANDLE(name) typedef void *name | 
 |  | 
 | interface IMimeMessageCallback; | 
 | interface IMimeEnumAddressTypes; | 
 | interface IMimeMessageParts; | 
 | interface IMimeMessageTree; | 
 | interface IMimeBody; | 
 | interface IMimeEnumProperties; | 
 |  | 
 | cpp_quote("DEFINE_GUID(CLSID_IMimeBody,      0xfd853cdb, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") | 
 | cpp_quote("DEFINE_GUID(CLSID_IMimeAllocator, 0xfd853cdd, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") | 
 | cpp_quote("DEFINE_GUID(CLSID_IMimeMessage,   0xfd853ce3, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") | 
 | cpp_quote("DEFINE_GUID(CLSID_IMimeSecurity,  0xfd853cde, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") | 
 | cpp_quote("DEFINE_GUID(CLSID_IVirtualStream, 0xfd853cdf, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") | 
 |  | 
 | cpp_quote("#define MIME_E_REG_CREATE_KEY         0x800cce01") | 
 | cpp_quote("#define MIME_E_REG_QUERY_INFO         0x800cce02") | 
 | cpp_quote("#define MIME_E_INVALID_ENCTYPE        0x800cce03") | 
 | cpp_quote("#define MIME_E_BOUNDARY_MISMATCH      0x800cce04") | 
 | cpp_quote("#define MIME_E_NOT_FOUND              0x800cce05") | 
 | cpp_quote("#define MIME_E_NO_DATA                0x800cce05") | 
 | cpp_quote("#define MIME_E_BUFFER_TOO_SMALL       0x800cce06") | 
 | cpp_quote("#define MIME_E_INVALID_ITEM_FLAGS     0x800cce07") | 
 | cpp_quote("#define MIME_E_ONE_LINE_ITEME         0x800cce08") | 
 | cpp_quote("#define MIME_E_INVALID_HANDLE         0x800cce09") | 
 | cpp_quote("#define MIME_E_CHARSET_TRANSLATE      0x800cce0a") | 
 | cpp_quote("#define MIME_E_NOT_INITIALIZED        0x800cce0b") | 
 |  | 
 | cpp_quote("#define MIME_E_INVALID_CHARSET_TYPE   0x800cce31") | 
 |  | 
 | cpp_quote("#define MIME_E_INVALID_TEXT_TYPE      0x800cce38") | 
 |  | 
 | cpp_quote("#define MIME_E_SECURITY_NOOP          0x800cceb1") | 
 | cpp_quote("#define MIME_S_SECURITY_NOOP          0x000cceb1") | 
 |  | 
 | cpp_quote("typedef enum tagMIMEPROPID {") | 
 | cpp_quote("    PID_HDR_NEWSGROUP  = 2,") | 
 | cpp_quote("    PID_HDR_NEWSGROUPS = 3,") | 
 | cpp_quote("    PID_HDR_REFS       = 4,") | 
 | cpp_quote("    PID_HDR_SUBJECT    = 5,") | 
 | cpp_quote("    PID_HDR_FROM       = 6,") | 
 | cpp_quote("    PID_HDR_MESSAGEID  = 7,") | 
 | cpp_quote("    PID_HDR_RETURNPATH = 8,") | 
 | cpp_quote("    PID_HDR_RR         = 9,") | 
 | cpp_quote("    PID_HDR_RETRCPTO   = 10,") | 
 | cpp_quote("    PID_HDR_APPARTO    = 11,") | 
 | cpp_quote("    PID_HDR_DATE       = 12,") | 
 | cpp_quote("    PID_HDR_RECEIVED   = 13,") | 
 | cpp_quote("    PID_HDR_REPLYTO    = 14,") | 
 | cpp_quote("    PID_HDR_XMAILER    = 15,") | 
 | cpp_quote("    PID_HDR_BCC        = 16,") | 
 | cpp_quote("    PID_HDR_MIMEVER    = 17,") | 
 | cpp_quote("    PID_HDR_CNTTYPE    = 18,") | 
 | cpp_quote("    PID_HDR_CNTXFER    = 19,") | 
 | cpp_quote("    PID_HDR_CNTID      = 20,") | 
 | cpp_quote("    PID_HDR_CNTDESC    = 21,") | 
 | cpp_quote("    PID_HDR_CNTDISP    = 22,") | 
 | cpp_quote("    PID_HDR_CNTBASE    = 23,") | 
 | cpp_quote("    PID_HDR_CNTLOC     = 24,") | 
 | cpp_quote("    PID_HDR_TO         = 25,") | 
 | cpp_quote("    PID_HDR_PATH       = 26,") | 
 | cpp_quote("    PID_HDR_FOLLOWUPTO = 27,") | 
 | cpp_quote("    PID_HDR_EXPIRES    = 28,") | 
 | cpp_quote("    PID_HDR_CC         = 29,") | 
 |  | 
 | cpp_quote("    PID_HDR_SENDER     = 61,") | 
 |  | 
 | cpp_quote("    PID_HDR_INREPLYTO  = 77,") | 
 | cpp_quote("} MIMEPROPID;") | 
 |  | 
 | cpp_quote("#define TYPEDID_MASK                  ((ULONG)0xffff)") | 
 | cpp_quote("#define TYPEDID_TYPE(t)               ((VARTYPE)((t) & TYPEDID_MASK))") | 
 |  | 
 | cpp_quote("#define OID_HIDE_TNEF_ATTACHMENTS     (0x000e0000 | VT_BOOL)") | 
 | cpp_quote("#define OID_SECURITY_TYPE             (0x00180000 | VT_UI4)") | 
 | cpp_quote("#define OID_SECURITY_HWND_OWNER       (0x00320000 | VT_UI4)") | 
 | cpp_quote("#define OID_HEADER_RELOAD_TYPE        (0x00370000 | VT_UI4)") | 
 | cpp_quote("#define OID_SHOW_MACBINARY            (0x00390000 | VT_BOOL)") | 
 |  | 
 |  | 
 | [ | 
 |     uuid(e4b28371-83b0-11d0-8259-00c04fd85ab4), | 
 |     version(1.0) | 
 | ] | 
 | library MIMEOLE | 
 | { | 
 |     importlib("stdole2.tlb"); | 
 |  | 
 |     DECLARE_HANDLE(HCHARSET); | 
 |     DECLARE_HANDLE(HBODY); | 
 |     DECLARE_HANDLE(HHEADERROW); | 
 |  | 
 |     typedef HCHARSET *LPHCHARSET; | 
 |     typedef HBODY *LPHBODY; | 
 |     typedef HHEADERROW *LPHHEADERROW; | 
 |     typedef DWORD TYPEDID; | 
 |     typedef const PROPVARIANT *LPCPROPVARIANT; | 
 |     typedef const BLOB *LPCBLOB; | 
 |  | 
 |     typedef enum tagRELOADTYPE | 
 |     { | 
 |         RELOAD_HEADER_NONE, | 
 |         RELOAD_HEADER_RESET, | 
 |         RELOAD_HEADER_APPEND, | 
 |         RELOAD_HEADER_REPLACE, | 
 |     } RELOADTYPE; | 
 |  | 
 |     typedef enum tagMIMESAVETYPE | 
 |     { | 
 |         SAVE_RFC822, | 
 |         SAVE_RFC1521, | 
 |     } MIMESAVETYPE; | 
 |  | 
 |     typedef enum tagCSETAPPLYTYPE | 
 |     { | 
 |         CSET_APPLY_UNTAGGED, | 
 |         CSET_APPLY_ALL, | 
 |         CSET_APPLY_TAG_ALL, | 
 |     } CSETAPPLYTYPE; | 
 |  | 
 |     typedef enum tagENCODINGTYPE | 
 |     { | 
 |         IET_BINARY, | 
 |         IET_BASE64, | 
 |         IET_UUENCODE, | 
 |         IET_QP, | 
 |         IET_7BIT, | 
 |         IET_8BIT, | 
 |         IET_INETCSET, | 
 |         IET_UNICODE, | 
 |         IET_RFC1522, | 
 |         IET_ENCODED, | 
 |         IET_CURRENT, | 
 |         IET_UNKNOWN, | 
 |         IET_BINHEX40, | 
 |         IET_LAST | 
 |     } ENCODINGTYPE; | 
 |  | 
 |     const SHORT IET_DECODED = IET_BINARY; | 
 |  | 
 |     const SHORT CCHMAX_HEADER_LINE = 1000; | 
 |  | 
 |     [ | 
 |         uuid(c5588349-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeInternational : IUnknown | 
 |     { | 
 |         typedef [unique] IMimeInternational *LPMIMEINTERNATIONAL; | 
 |         typedef DWORD CODEPAGEID; | 
 |  | 
 |         const CODEPAGEID CP_USASCII = 1252; | 
 |         const CODEPAGEID CP_UNICODE = 1200; | 
 |         const CODEPAGEID CP_JAUTODETECT = 50932; | 
 |         const CODEPAGEID CP_KAUTODETECT = 50949; | 
 |         const CODEPAGEID CP_ISO2022JPESC = 50221; | 
 |         const CODEPAGEID CP_ISO2022JPSIO = 50222; | 
 |  | 
 |         const SHORT CCHMAX_CSET_NAME = 128; | 
 |         const SHORT CCHMAX_LANG_NAME = 128; | 
 |         const SHORT CCHMAX_FACE_NAME = 128; | 
 |  | 
 |         typedef struct tagINETCSETINFO | 
 |         { | 
 |             CHAR        szName[CCHMAX_CSET_NAME]; | 
 |             HCHARSET    hCharset; | 
 |             CODEPAGEID  cpiWindows; | 
 |             CODEPAGEID  cpiInternet; | 
 |             DWORD       dwReserved1; | 
 |         } INETCSETINFO, *LPINETCSETINFO; | 
 |  | 
 |         typedef enum tagINETLANGMASK | 
 |         { | 
 |             ILM_FAMILY          = 0x01, | 
 |             ILM_NAME            = 0x02, | 
 |             ILM_BODYCSET        = 0x04, | 
 |             ILM_HEADERCSET      = 0x08, | 
 |             ILM_WEBCSET         = 0x10, | 
 |             ILM_FIXEDFONT       = 0x20, | 
 |             ILM_VARIABLEFONT    = 0x40, | 
 |         } INETLANGMASK; | 
 |  | 
 |         typedef struct tagCODEPAGEINFO | 
 |         { | 
 |             DWORD dwMask; | 
 |             CODEPAGEID cpiCodePage; | 
 |             BOOL fIsValidCodePage; | 
 |             ULONG ulMaxCharSize; | 
 |             BOOL fInternetCP; | 
 |             CODEPAGEID cpiFamily; | 
 |             CHAR szName[CCHMAX_LANG_NAME]; | 
 |             CHAR szBodyCset[CCHMAX_CSET_NAME]; | 
 |             CHAR szHeaderCset[CCHMAX_CSET_NAME]; | 
 |             CHAR szWebCset[CCHMAX_CSET_NAME]; | 
 |             CHAR szFixedFont[CCHMAX_FACE_NAME]; | 
 |             CHAR szVariableFont[CCHMAX_FACE_NAME]; | 
 |             ENCODINGTYPE ietNewsDefault; | 
 |             ENCODINGTYPE ietMailDefault; | 
 |             DWORD dwReserved1; | 
 |         } CODEPAGEINFO, *LPCODEPAGEINFO; | 
 |  | 
 |         typedef struct tagRFC1522INFO | 
 |         { | 
 |             BOOL fRfc1522Allowed; | 
 |             BOOL fRfc1522Used; | 
 |             BOOL fAllow8bit; | 
 |             HCHARSET hRfc1522Cset; | 
 |         } RFC1522INFO, *LPRFC1522INFO; | 
 |  | 
 |         typedef enum tagCHARSETTYPE | 
 |         { | 
 |             CHARSET_BODY, | 
 |             CHARSET_HEADER, | 
 |             CHARSET_WEB, | 
 |         } CHARSETTYPE; | 
 |  | 
 |  | 
 |         HRESULT SetDefaultCharset( | 
 |             [in]        HCHARSET hCharset); | 
 |         HRESULT GetDefaultCharset( | 
 |             [out]       LPHCHARSET phCharset); | 
 |         HRESULT GetCodePageCharset( | 
 |             [in]        CODEPAGEID cpiCodePage, | 
 |             [in]        CHARSETTYPE ctCsetType, | 
 |             [out]       LPHCHARSET phCharset); | 
 |         HRESULT FindCharset( | 
 |             [in]        LPCSTR pszCharset, | 
 |             [out]       LPHCHARSET phCharset); | 
 |         HRESULT GetCharsetInfo( | 
 |             [in]        HCHARSET hCharset, | 
 |             [in, out]   LPINETCSETINFO pCsetInfo); | 
 |         HRESULT GetCodePageInfo( | 
 |             [in]        CODEPAGEID cpiCodePage, | 
 |             [in, out]   LPCODEPAGEINFO pCodePageInfo); | 
 |         HRESULT CanConvertCodePages( | 
 |             [in]        CODEPAGEID cpiSource, | 
 |             [in]        CODEPAGEID cpiDest); | 
 |         HRESULT DecodeHeader( | 
 |             [in]        HCHARSET hCharset, | 
 |             [in]        LPCSTR pszData, | 
 |             [in, out]   LPPROPVARIANT pDecoded, | 
 |             [in, out]   LPRFC1522INFO pRfc1522Info); | 
 |         HRESULT EncodeHeader( | 
 |             [in]        HCHARSET hCharset, | 
 |             [in]        LPPROPVARIANT pData, | 
 |             [out]       LPSTR *ppszEncoded, | 
 |             [in, out]   LPRFC1522INFO pRfc1522Info); | 
 |         HRESULT ConvertBuffer( | 
 |             [in]        CODEPAGEID cpiSource, | 
 |             [in]        CODEPAGEID cpiDest, | 
 |             [in]        LPBLOB pIn, | 
 |             [in, out]   LPBLOB pOut, | 
 |             [out]       ULONG *pcbRead); | 
 |         HRESULT ConvertString( | 
 |             [in]        CODEPAGEID cpiSource, | 
 |             [in]        CODEPAGEID cpiDest, | 
 |             [in]        LPPROPVARIANT pIn, | 
 |             [in, out]   LPPROPVARIANT pOut); | 
 |         HRESULT MLANG_ConvertInetReset(void); | 
 |         HRESULT MLANG_ConvertInetString( | 
 |             [in]        CODEPAGEID cpiSource, | 
 |             [in]        CODEPAGEID cpiDest, | 
 |             [in]        LPCSTR pSource, | 
 |             [in]        int *pnSizeOfSource, | 
 |             [in,out,unique]  LPSTR pDestination, | 
 |             [in]        int *pnDstSize); | 
 |         HRESULT Rfc1522Decode( | 
 |             [in]        LPCSTR pszValue, | 
 |             [in,ref]    LPSTR pszCharset, | 
 |             [in]        ULONG cchmax, | 
 |             [out]       LPSTR *ppszDecoded); | 
 |         HRESULT Rfc1522Encode( | 
 |             [in]        LPCSTR pszValue, | 
 |             [in]        HCHARSET hCharset, | 
 |             [out]       LPSTR *ppszEncoded); | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(c5588353-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeSecurity : IUnknown | 
 |     { | 
 |         typedef [unique] IMimeSecurity *LPMIMESECURITY; | 
 |  | 
 |         cpp_quote("#ifdef __WINE_WINCRYPT_H") | 
 |         cpp_quote("typedef PCCERT_CONTEXT PCX509CERT;") | 
 |         cpp_quote("#else") | 
 |         typedef const void *PCX509CERT; | 
 |         typedef void *HCERTSTORE; | 
 |         cpp_quote("#endif") | 
 |  | 
 |         typedef BLOB THUMBBLOB; | 
 |         typedef void *HCAPICERTSTORE; | 
 |  | 
 |         cpp_quote("#define MST_NONE             0x00000000") | 
 |         cpp_quote("#define MST_THIS_SIGN        0x00000001") | 
 |         cpp_quote("#define MST_THIS_ENCRYPT     0x00000002") | 
 |         cpp_quote("#define MST_BLOB_FLAG        0x00000004") | 
 |         cpp_quote("#define MST_THIS_BLOBSIGN    (MST_BLOB_FLAG | MST_THIS_SIGN)") | 
 |         cpp_quote("#define MST_CHILD_SIGN       0x00000100") | 
 |         cpp_quote("#define MST_CHILD_ENCRYPT    0x00000200") | 
 |         cpp_quote("#define MST_SUBMSG_SIGN      0x00001000") | 
 |         cpp_quote("#define MST_SUBMSG_ENCRYPT   0x00002000") | 
 |         cpp_quote("#define MST_RECEIPT_REQUEST  0x00010000") | 
 |         cpp_quote("#define MST_CLASS_SMIME_V1   0x00000000") | 
 |         cpp_quote("#define MST_CLASS_PGP        0x01000000") | 
 |  | 
 |         typedef enum tagCERTSTATE | 
 |         { | 
 |             CERTIFICATE_OK, | 
 |             CERTIFICATE_NOT_PRESENT, | 
 |             CERTIFICATE_EXPIRED, | 
 |             CERTIFICATE_CHAIN_TOO_LONG, | 
 |             CERTIFICATE_MISSING_ISSUER, | 
 |             CERTIFICATE_CRL_LISTED, | 
 |             CERTIFICATE_NOT_TRUSTED, | 
 |             CERTIFICATE_INVALID, | 
 |             CERTIFICATE_ERROR, | 
 |             CERTIFICATE_NOPRINT, | 
 |             CERTIFICATE_UNKNOWN | 
 |         } CERTSTATE; | 
 |  | 
 |         typedef enum tagCERTNAMETYPE | 
 |         { | 
 |             SIMPLE, | 
 |             OID, | 
 |             X500, | 
 |         } CERTNAMETYPE; | 
 |  | 
 |         typedef enum tagCERTDATAID | 
 |         { | 
 |             CDID_EMAIL, | 
 |             CDID_MAX | 
 |         } CERTDATAID; | 
 |  | 
 |         typedef struct tagX509CERTRESULT | 
 |         { | 
 |             DWORD       cEntries; | 
 |             CERTSTATE  *rgcs; | 
 |             PCX509CERT *rgpCert; | 
 |         } X509CERTRESULT, *PX509CERTRESULT; | 
 |         typedef const X509CERTRESULT *PCX509CERTRESULT; | 
 |  | 
 |         HRESULT InitNew(void); | 
 |  | 
 |         HRESULT CheckInit(void); | 
 |  | 
 |         HRESULT EncodeMessage( | 
 |             [in]    IMimeMessageTree */*const*/ pTree, | 
 |             [in]    DWORD dwFlags); | 
 |  | 
 |         HRESULT EncodeBody( | 
 |             [in]    IMimeMessageTree */*const*/ pTree, | 
 |             [in]    HBODY hEncodeRoot, | 
 |             [in]    DWORD dwFlags); | 
 |  | 
 |         HRESULT DecodeMessage( | 
 |             [in]    IMimeMessageTree */*const*/ pTree, | 
 |             [in]    DWORD dwFlags); | 
 |  | 
 |         HRESULT DecodeBody( | 
 |             [in]    IMimeMessageTree */*const*/ pTree, | 
 |             [in]    HBODY hDecodeRoot, | 
 |             [in]    DWORD dwFlags); | 
 |  | 
 |         HRESULT EnumCertificates( | 
 |             [in]    HCAPICERTSTORE hc, | 
 |             [in]    DWORD dwUsage, | 
 |             [in]    PCX509CERT pPrev, | 
 |             [out]   PCX509CERT *ppCert); | 
 |  | 
 |         HRESULT GetCertificateName( | 
 |             [in]    const PCX509CERT pX509Cert, | 
 |             [in]    const CERTNAMETYPE cn, | 
 |             [out]   LPSTR *ppszName); | 
 |  | 
 |         HRESULT GetMessageType( | 
 |             [in]    const HWND hwndParent, | 
 |             [in]    IMimeBody */*const*/ pBody, | 
 |             [out]   DWORD */*const*/ pdwSecType); | 
 |  | 
 |         HRESULT GetCertData( | 
 |             [in]        const PCX509CERT pX509Cert, | 
 |             [in]        const CERTDATAID dataid, | 
 |             [out, ref]  LPPROPVARIANT pValue); | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(fd853cd1-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeHeaderTable : IPersistStream | 
 |     { | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(fd853cec-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimePropertySchema : IUnknown | 
 |     { | 
 |         typedef enum tagMIMEPROPFLAGS | 
 |         { | 
 |             MPF_INETCSET            = 0x01, | 
 |             MPF_RFC1522             = 0x02, | 
 |             MPF_ADDRESS             = 0x04, | 
 |             MPF_HASPARAMS           = 0x08, | 
 |             MPF_MIME                = 0x10, | 
 |             MPF_READONLY            = 0x20 | 
 |         } MIMEPROPFLAGS; | 
 |  | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(fd853cd3-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimePropertySet : IPersistStreamInit | 
 |     { | 
 |         typedef [unique] IMimePropertySet *LPMIMEPROPERTYSET; | 
 |  | 
 |         cpp_quote("#define PDF_ENCODED              0x00000001") | 
 |         cpp_quote("#define PDF_NAMEINDATA           0x00000002") | 
 |         cpp_quote("#define PDF_HEADERFORMAT        (0x00000004 | PDF_ENCODED)") | 
 |         cpp_quote("#define PDF_NOCOMMENTS           0x00000008") | 
 |         cpp_quote("#define PDF_SAVENOENCODE         0x00000010") | 
 |         cpp_quote("#define PDF_VECTOR               0x00000020") | 
 |  | 
 |         typedef struct tagMIMEPARAMINFO | 
 |         { | 
 |             LPSTR           pszName; | 
 |             LPSTR           pszData; | 
 |         } MIMEPARAMINFO, *LPMIMEPARAMINFO; | 
 |  | 
 |         typedef enum tagPROPINFOMASK | 
 |         { | 
 |             PIM_CHARSET           = 0x01, | 
 |             PIM_ENCODINGTYPE      = 0x02, | 
 |             PIM_ROWNUMBER         = 0x04, | 
 |             PIM_FLAGS             = 0x08, | 
 |             PIM_PROPID            = 0x10, | 
 |             PIM_VALUES            = 0x20, | 
 |             PIM_VTDEFAULT         = 0x40, | 
 |             PIM_VTCURRENT         = 0x80 | 
 |         } PROPINFOMASK; | 
 |  | 
 |         typedef struct tagMIMEPROPINFO | 
 |         { | 
 |             DWORD           dwMask; | 
 |             HCHARSET        hCharset; | 
 |             ENCODINGTYPE    ietEncoding; | 
 |             DWORD           dwRowNumber; | 
 |             DWORD           dwFlags; | 
 |             DWORD           dwPropId; | 
 |             DWORD           cValues; | 
 |             VARTYPE         vtDefault; | 
 |             VARTYPE         vtCurrent; | 
 |         } MIMEPROPINFO, *LPMIMEPROPINFO; | 
 |         typedef const MIMEPROPINFO *LPCMIMEPROPINFO; | 
 |  | 
 |         HRESULT GetPropInfo( | 
 |             [in]        LPCSTR               pszName, | 
 |             [in,out]    LPMIMEPROPINFO       pInfo); | 
 |  | 
 |         HRESULT SetPropInfo( | 
 |             [in]        LPCSTR               pszName, | 
 |             [in]        LPCMIMEPROPINFO      pInfo); | 
 |  | 
 | cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") | 
 | cpp_quote("#undef GetProp") | 
 | cpp_quote("#undef SetProp") | 
 | cpp_quote("#undef EnumProps") | 
 | cpp_quote("#endif") | 
 |         HRESULT GetProp( | 
 |             [in]        LPCSTR               pszName, | 
 |             [in]        DWORD                dwFlags, | 
 |             [in,out]    LPPROPVARIANT        pValue); | 
 |  | 
 |         HRESULT SetProp( | 
 |             [in]        LPCSTR               pszName, | 
 |             [in]        DWORD                dwFlags, | 
 |             [in]        LPCPROPVARIANT       pValue); | 
 |  | 
 |         HRESULT AppendProp( | 
 |             [in]        LPCSTR               pszName, | 
 |             [in]        DWORD                dwFlags, | 
 |             [in]        LPPROPVARIANT        pValue); | 
 |  | 
 |         HRESULT DeleteProp( | 
 |             [in]        LPCSTR               pszName); | 
 |  | 
 |         HRESULT CopyProps( | 
 |             [in]        ULONG                cNames, | 
 |             [in,unique] LPCSTR               *prgszName, | 
 |             [in]        IMimePropertySet     *pPropertySet); | 
 |  | 
 |         HRESULT MoveProps( | 
 |             [in]        ULONG                cNames, | 
 |             [in]        LPCSTR               *prgszName, | 
 |             [in]        IMimePropertySet     *pPropertySet); | 
 |  | 
 |         HRESULT DeleteExcept( | 
 |             [in]        ULONG                cNames, | 
 |             [in]        LPCSTR               *prgszName); | 
 |  | 
 |         HRESULT QueryProp( | 
 |             [in]        LPCSTR               pszName, | 
 |             [in]        LPCSTR               pszCriteria, | 
 |             [in]        boolean              fSubString, | 
 |             [in]        boolean              fCaseSensitive); | 
 |  | 
 |         HRESULT GetCharset( | 
 |             [out]       LPHCHARSET           phCharset); | 
 |  | 
 |         HRESULT SetCharset( | 
 |             [in]        HCHARSET             hCharset, | 
 |             [in]        CSETAPPLYTYPE        applytype); | 
 |  | 
 |         HRESULT GetParameters( | 
 |             [in]        LPCSTR               pszName, | 
 |             [out]       ULONG                *pcParams, | 
 |             [out]       LPMIMEPARAMINFO      *pprgParam); | 
 |  | 
 |         HRESULT IsContentType( | 
 |             [in]        LPCSTR               pszPriType, | 
 |             [in,unique] LPCSTR               pszSubType); | 
 |  | 
 |         HRESULT BindToObject( | 
 |             [in]        REFIID               riid, | 
 |             [out,iid_is(riid)] void          **ppvObject); | 
 |  | 
 |         HRESULT Clone( | 
 |             [out]       IMimePropertySet     **ppPropertySet); | 
 |  | 
 |         HRESULT SetOption( | 
 |             [in]        const TYPEDID        oid, | 
 |             [in]        LPCPROPVARIANT       pValue); | 
 |  | 
 |         HRESULT GetOption( | 
 |             [in]        const TYPEDID        oid, | 
 |             [in,out]    LPPROPVARIANT        pValue); | 
 |  | 
 |         cpp_quote("#define EPF_NONAME 0x00000001") | 
 |  | 
 |         HRESULT EnumProps( | 
 |             [in]        DWORD                dwFlags, | 
 |             [out]       IMimeEnumProperties  **ppEnum); | 
 |  | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(c558834a-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeAddressTable : IUnknown | 
 |     { | 
 |         typedef [unique] IMimeAddressTable *LPMIMEADDRESSTABLE; | 
 |  | 
 |         DECLARE_HANDLE(HADDRESS); | 
 |         typedef HADDRESS *LPHADDRESS; | 
 |         typedef DWORD IADDRESSTYPE; | 
 |  | 
 |         typedef enum tagADDRESSFORMAT | 
 |         { | 
 |             AFT_DISPLAY_FRIENDLY, | 
 |             AFT_DISPLAY_EMAIL, | 
 |             AFT_DISPLAY_BOTH, | 
 |             AFT_RFC822_DECODED, | 
 |             AFT_RFC822_ENCODED, | 
 |             AFT_RFC822_TRANSMIT, | 
 |         } ADDRESSFORMAT; | 
 |  | 
 |         typedef struct tagADDRESSPROPS | 
 |         { | 
 |             DWORD           dwProps; | 
 |             HADDRESS        hAddress; | 
 |             ENCODINGTYPE    ietFriendly; | 
 |             HCHARSET        hCharset; | 
 |             DWORD           dwAdrType; | 
 |             LPSTR           pszFriendly; | 
 |             LPWSTR          pwszReserved; | 
 |             LPSTR           pszEmail; | 
 |             CERTSTATE       certstate; | 
 |             THUMBBLOB       tbSigning; | 
 |             THUMBBLOB       tbEncryption; | 
 |             DWORD           dwCookie; | 
 |             DWORD           dwReserved1; | 
 |             DWORD           dwReserved2; | 
 |         } ADRESSPROPS, *LPADDRESSPROPS; | 
 |  | 
 |         typedef struct tagADDRESSLIST | 
 |         { | 
 |             ULONG           cAdrs; | 
 |             LPADDRESSPROPS  prgAdr; | 
 |         } ADDRESSLIST, *LPADDRESSLIST; | 
 |  | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(ee519f11-851a-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeWebDocument : IUnknown | 
 |     { | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(c558834c-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeBody : IMimePropertySet | 
 |     { | 
 |         typedef [unique] IMimeBody *LPMIMEBODY; | 
 |  | 
 |         typedef enum tagIMSGBODYTYPE | 
 |         { | 
 |             IBT_SECURE, | 
 |             IBT_ATTACHMENT, | 
 |             IBT_EMPTY, | 
 |             IBT_CSETTAGGED, | 
 |             IBT_AUTOATTACH, | 
 |         } IMSGBODYTYPE; | 
 |  | 
 |         typedef struct tagBODYOFFSETS | 
 |         { | 
 |             DWORD cbBoundaryStart; | 
 |             DWORD cbHeaderStart; | 
 |             DWORD cbBodyStart; | 
 |             DWORD cbBodyEnd; | 
 |         } BODYOFFSETS, *LPBODYOFFSETS; | 
 |  | 
 |         typedef struct tagTRANSMITINFO | 
 |         { | 
 |             ENCODINGTYPE ietCurrent; | 
 |             ENCODINGTYPE ietXmitMime; | 
 |             ENCODINGTYPE ietXmit822; | 
 |             ULONG cbLongestLine; | 
 |             ULONG cExtended; | 
 |             ULONG ulPercentExt; | 
 |             ULONG cbSize; | 
 |             ULONG cLines; | 
 |         } TRANSMITINFO, *LPTRANSMITINFO; | 
 |  | 
 |         HRESULT IsType( | 
 |             [in]        IMSGBODYTYPE     bodytype); | 
 |  | 
 |         HRESULT SetDisplayName( | 
 |             [in]        LPCSTR           pszDisplay); | 
 |  | 
 |         HRESULT GetDisplayName( | 
 |             [out]       LPSTR            *ppszDisplay); | 
 |  | 
 |         HRESULT GetOffsets( | 
 |             [out]       LPBODYOFFSETS     pOffsets); | 
 |  | 
 |         HRESULT GetCurrentEncoding( | 
 |             [out]       ENCODINGTYPE     *pietEncoding); | 
 |  | 
 |         HRESULT SetCurrentEncoding( | 
 |             [in]        ENCODINGTYPE     ietEncoding); | 
 |  | 
 |         HRESULT GetEstimatedSize( | 
 |             [in]        ENCODINGTYPE     ietEncoding, | 
 |             [out]       ULONG            *pcbSize); | 
 |  | 
 |         HRESULT GetDataHere( | 
 |             [in]        ENCODINGTYPE     ietEncoding, | 
 |             [in]        IStream          *pStream); | 
 |  | 
 |         HRESULT GetData( | 
 |             [in]        ENCODINGTYPE     ietEncoding, | 
 |             [out]       IStream          **ppStream); | 
 |  | 
 |         HRESULT SetData( | 
 |             [in]        ENCODINGTYPE     ietEncoding, | 
 |             [in,unique] LPCSTR           pszPriType, | 
 |             [in,unique] LPCSTR           pszSubType, | 
 |             [in]        REFIID           riid, | 
 |             [in,iid_is(riid)]  LPVOID    pvObject); | 
 |  | 
 |         HRESULT EmptyData(void); | 
 |  | 
 |         HRESULT CopyTo( | 
 |             [in]        IMimeBody        *pBody); | 
 |  | 
 |         HRESULT GetTransmitInfo( | 
 |             [in,out]    LPTRANSMITINFO   pTransmitInfo); | 
 |  | 
 |         HRESULT SaveToFile( | 
 |             [in]        ENCODINGTYPE     ietEncoding, | 
 |             [in]        LPCSTR           pszFilePath); | 
 |  | 
 |         HRESULT GetHandle( | 
 |            [out]        LPHBODY          phBody); | 
 |  | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(fd853cd4-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeMessageTree : IPersistStreamInit | 
 |     { | 
 |         typedef [unique] IMimeMessageTree *LPMIMEMESSAGETREE; | 
 |  | 
 |         const HBODY HBODY_ROOT = (HBODY)-1; | 
 |  | 
 |         typedef enum tagBODYLOCATION | 
 |         { | 
 |             IBL_ROOT, | 
 |             IBL_PARENT, | 
 |             IBL_FIRST, | 
 |             IBL_LAST, | 
 |             IBL_NEXT, | 
 |             IBL_PREVIOUS, | 
 |         } BODYLOCATION; | 
 |  | 
 |         typedef struct tagFINDBODY | 
 |         { | 
 |             LPSTR pszPriType; | 
 |             LPSTR pszSubType; | 
 |             DWORD dwReserved; | 
 |         } FINDBODY, *LPFINDBODY; | 
 |  | 
 |         HRESULT GetMessageSource( | 
 |             [out]       IStream **ppStream, | 
 |             [in]        DWORD dwFlags); | 
 |  | 
 |         HRESULT GetMessageSize( | 
 |             [out]       ULONG *pcbSize, | 
 |             [in]        DWORD dwFlags); | 
 |  | 
 |         HRESULT LoadOffsetTable( | 
 |             [in]        IStream *pStream); | 
 |  | 
 |         HRESULT SaveOffsetTable( | 
 |             [in]        IStream *pStream, | 
 |             [in]        DWORD dwFlags); | 
 |  | 
 |         HRESULT GetFlags( | 
 |             [out]       DWORD *pdwFlags); | 
 |  | 
 |         HRESULT Commit( | 
 |             [in]        DWORD dwFlags); | 
 |  | 
 |         HRESULT HandsOffStorage(); | 
 |  | 
 |         HRESULT BindToObject( | 
 |             [in]        const HBODY hBody, | 
 |             [in]        REFIID riid, | 
 |             [out, iid_is(riid)] void **ppvObject); | 
 |  | 
 |         HRESULT SaveBody( | 
 |             [in]        HBODY hBody, | 
 |             [in]        DWORD dwFlags, | 
 |             [in]        IStream *pStream); | 
 |  | 
 |         HRESULT InsertBody( | 
 |             [in]        BODYLOCATION location, | 
 |             [in]        HBODY hPivot, | 
 |             [out]       LPHBODY phBody); | 
 |  | 
 |         HRESULT GetBody( | 
 |             [in]        BODYLOCATION location, | 
 |             [in]        HBODY hPivot, | 
 |             [out]       LPHBODY phBody); | 
 |  | 
 |         HRESULT DeleteBody( | 
 |             [in]        HBODY hBody, | 
 |             [in]        DWORD dwFlags); | 
 |  | 
 |         HRESULT MoveBody( | 
 |             [in]        HBODY hBody, | 
 |             [in]        BODYLOCATION location); | 
 |  | 
 |         HRESULT CountBodies( | 
 |             [in]        HBODY hParent, | 
 |             [in]        boolean fRecurse, | 
 |             [out]       ULONG *pcBodies); | 
 |  | 
 |         HRESULT FindFirst( | 
 |             [in, out]   LPFINDBODY pFindBody, | 
 |             [out]       LPHBODY phBody); | 
 |  | 
 |         HRESULT FindNext( | 
 |             [in, out]   LPFINDBODY pFindBody, | 
 |             [out]       LPHBODY phBody); | 
 |  | 
 |         HRESULT ResolveURL( | 
 |             [in]        HBODY hRelated, | 
 |             [in]        LPCSTR pszBase, | 
 |             [in]        LPCSTR pszURL, | 
 |             [in]        DWORD dwFlags, | 
 |             [out]       LPHBODY phBody); | 
 |  | 
 |         HRESULT ToMultipart( | 
 |             [in]        HBODY hBody, | 
 |             [in]        LPCSTR pszSubType, | 
 |             [out]       LPHBODY phMultipart); | 
 |  | 
 |         HRESULT GetBodyOffsets( | 
 |             [in]        HBODY hBody, | 
 |             [in, out]   LPBODYOFFSETS pOffsets); | 
 |  | 
 |         HRESULT GetCharset( | 
 |             [out]       LPHCHARSET phCharset); | 
 |  | 
 |         HRESULT SetCharset( | 
 |             [in]        HCHARSET hCharset, | 
 |             [in]        CSETAPPLYTYPE applytype); | 
 |  | 
 |         HRESULT IsBodyType( | 
 |             [in]        HBODY hBody, | 
 |             [in]        IMSGBODYTYPE bodytype); | 
 |  | 
 |         HRESULT IsContentType( | 
 |             [in]        HBODY hBody, | 
 |             [in]        LPCSTR pszPriType, | 
 |             [in]        LPCSTR pszSubType); | 
 |  | 
 |         HRESULT QueryBodyProp( | 
 |             [in]        HBODY hBody, | 
 |             [in]        LPCSTR pszName, | 
 |             [in]        LPCSTR pszCriteria, | 
 |             [in]        boolean fSubString, | 
 |             [in]        boolean fCaseSensitive); | 
 |  | 
 |         HRESULT GetBodyProp( | 
 |             [in]        HBODY hBody, | 
 |             [in]        LPCSTR pszName, | 
 |             [in]        DWORD dwFlags, | 
 |             [in, out]   LPPROPVARIANT pValue); | 
 |  | 
 |         HRESULT SetBodyProp( | 
 |             [in]        HBODY hBody, | 
 |             [in]        LPCSTR pszName, | 
 |             [in]        DWORD dwFlags, | 
 |             [in]        LPCPROPVARIANT pValue); | 
 |  | 
 |         HRESULT DeleteBodyProp( | 
 |             [in]        HBODY hBody, | 
 |             [in]        LPCSTR pszName); | 
 |  | 
 |         HRESULT SetOption( | 
 |             [in]        const TYPEDID oid, | 
 |             [in]        LPCPROPVARIANT pValue); | 
 |  | 
 |         HRESULT GetOption( | 
 |             [in]        const TYPEDID oid, | 
 |             [in, out]   LPPROPVARIANT pValue); | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(fd853cd5-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeMessage : IMimeMessageTree | 
 |     { | 
 |         typedef [unique] IMimeMessage *LPMIMEMESSAGE; | 
 |  | 
 |         typedef DWORD TEXTTYPE; | 
 |  | 
 |         typedef enum tagIMSGFLAGS | 
 |         { | 
 |             IMF_ATTACHMENTS     = 0x00000001, | 
 |             IMF_MULTIPART       = 0x00000002, | 
 |             IMF_SUBMULTIPART    = 0x00000004, | 
 |             IMF_MIME            = 0x00000008, | 
 |             IMF_HTML            = 0x00000010, | 
 |             IMF_PLAIN           = 0x00000020, | 
 |             IMF_PARTIAL         = 0x00000040, | 
 |             IMF_SIGNED          = 0x00000080, | 
 |             IMF_ENCRYPTED       = 0x00000100, | 
 |             IMF_TNEF            = 0x00000200, | 
 |             IMF_MHTML           = 0x00000400, | 
 |             IMF_SECURE          = 0x00000800, | 
 |             IMF_TEXT            = 0x00001000, | 
 |             IMF_CSETTAGGED      = 0x00002000, | 
 |             IMF_NEWS            = 0x00004000, | 
 |             IMF_VOICEMAIL       = 0x00008000, | 
 |             IMF_HASVCARD        = 0x00010000, | 
 |             IMF_RFC1154         = 0x00020000, | 
 |         } IMSGFLAGS; | 
 |  | 
 |         typedef enum tagIMSGPRIORITY | 
 |         { | 
 |             IMSG_PRI_LOW    = 5, | 
 |             IMSG_PRI_NORMAL = 3, | 
 |             IMSG_PRI_HIGH   = 1, | 
 |         } IMSGPRIORITY; | 
 |  | 
 |         cpp_quote("#define WPF_HTML             0x00000001") | 
 |         cpp_quote("#define WPF_AUTOINLINE       0x00000002") | 
 |         cpp_quote("#define WPF_SLIDESHOW        0x00000004") | 
 |         cpp_quote("#define WPF_ATTACHLINKS      0x00000008") | 
 |         cpp_quote("#define WPF_IMAGESONLY       0x00000010") | 
 |         cpp_quote("#define WPF_NOMETACHARSET    0x00000020") | 
 |  | 
 |         typedef struct tagWEPAGEOPTIONS | 
 |         { | 
 |             DWORD cbSize; | 
 |             DWORD dwFlags; | 
 |             DWORD dwDelay; | 
 |             WCHAR wchQuote; | 
 |         } WEBPAGEOPTIONS, *LPWEBPAGEOPTIONS; | 
 |  | 
 |         cpp_quote("#define TXT_PLAIN       1") | 
 |         cpp_quote("#define TXT_HTML        2") | 
 |  | 
 |         HRESULT CreateWebPage( | 
 |             [in]        IStream *pRootStm, | 
 |             [in]        LPWEBPAGEOPTIONS pOptions, | 
 |             [in]        IMimeMessageCallback *pCallback, | 
 |             [out]       IMoniker **ppMoniker); | 
 |  | 
 |         HRESULT GetProp( | 
 |             [in]        LPCSTR pszName, | 
 |             [in]        DWORD dwFlags, | 
 |             [in,out]    LPPROPVARIANT pValue); | 
 |  | 
 |         HRESULT SetProp( | 
 |             [in]        LPCSTR pszName, | 
 |             [in]        DWORD dwFlags, | 
 |             [in]        LPCPROPVARIANT pValue); | 
 |  | 
 |         HRESULT DeleteProp( | 
 |             [in]        LPCSTR pszName); | 
 |  | 
 |         HRESULT QueryProp( | 
 |             [in]        LPCSTR pszName, | 
 |             [in]        LPCSTR pszCriteria, | 
 |             [in]        boolean fSubString, | 
 |             [in]        boolean fCaseSensitive); | 
 |  | 
 |         HRESULT GetTextBody( | 
 |             [in]        DWORD dwTxtType, | 
 |             [in]        ENCODINGTYPE ietEncoding, | 
 |             [out]       IStream **pStream, | 
 |             [out]       LPHBODY phBody); | 
 |  | 
 |         HRESULT SetTextBody( | 
 |             [in]        DWORD dwTxtType, | 
 |             [in]        ENCODINGTYPE ietEncoding, | 
 |             [in]        HBODY hAlternative, | 
 |             [in]        IStream *pStream, | 
 |             [out]       LPHBODY phBody); | 
 |  | 
 |         HRESULT AttachObject( | 
 |             [in]        REFIID riid, | 
 |             [in, iid_is(riid)] void *pvObject, | 
 |             [out]       LPHBODY phBody); | 
 |  | 
 |         HRESULT AttachFile( | 
 |             [in]        LPCSTR pszFilePath, | 
 |             [in]        IStream *pstmFile, | 
 |             [out]       LPHBODY phBody); | 
 |  | 
 |         HRESULT AttachURL( | 
 |             [in]        LPCSTR pszBase, | 
 |             [in]        LPCSTR pszURL, | 
 |             [in]        DWORD dwFlags, | 
 |             [in]        IStream *pstmURL, | 
 |             [out]       LPSTR *ppszCIDURL, | 
 |             [out]       LPHBODY phBody); | 
 |  | 
 |         HRESULT GetAttachments( | 
 |             [out]       ULONG *pcAttach, | 
 |             [out]       LPHBODY *pprghAttach); | 
 |  | 
 |         HRESULT GetAddressTable( | 
 |             [out]       IMimeAddressTable **ppTable); | 
 |  | 
 |         HRESULT GetSender( | 
 |             [in, out]   LPADDRESSPROPS pAddress); | 
 |  | 
 |         HRESULT GetAddressTypes( | 
 |             [in]        DWORD dwAdrTypes, | 
 |             [in]        DWORD dwProps, | 
 |             [in, out]   LPADDRESSLIST pList); | 
 |  | 
 |         HRESULT GetAddressFormat( | 
 |             [in]        DWORD dwAdrTypes, | 
 |             [in]        ADDRESSFORMAT format, | 
 |             [out]       LPSTR *ppszFormat); | 
 |  | 
 |         HRESULT EnumAddressTypes( | 
 |             [in]        DWORD dwAdrTypes, | 
 |             [in]        DWORD dwProps, | 
 |             [out]       IMimeEnumAddressTypes **ppEnum); | 
 |  | 
 |         HRESULT SplitMessage( | 
 |             [in]        ULONG cbMaxPart, | 
 |             [out]       IMimeMessageParts **ppParts); | 
 |  | 
 |         HRESULT GetRootMoniker( | 
 |             [out]       IMoniker **ppMoniker); | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(761aa741-7bda-11d1-8aa9-00c04fb951f3), | 
 |         object | 
 |     ] | 
 |     interface IMimeMessageCallback : IUnknown | 
 |     { | 
 |         HRESULT OnWebPageSplitter( | 
 |             [in]       DWORD cInlined, | 
 |             [in]       IStream *ppStream); | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(de4ad8da-555f-11d1-8dd0-00c04fb951f9), | 
 |         object | 
 |     ] | 
 |     interface IPersistMime : IPersist | 
 |     { | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(c558834f-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeMessageParts : IUnknown | 
 |     { | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(c558834d-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeEnumHeaderRows : IUnknown | 
 |     { | 
 |         typedef struct tagENUMHEADERROW | 
 |         { | 
 |             HHEADERROW   hRow; | 
 |             LPSTR        pszHeader; | 
 |             LPSTR        pszData; | 
 |             ULONG        cchData; | 
 |             DWORD_PTR    dwReserved; | 
 |         } ENUMHEADERROW, *LPENUMHEADERROW; | 
 |  | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(fd853cee-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeEnumProperties : IUnknown | 
 |     { | 
 |         typedef [unique] IMimeEnumProperties *LPMIMEENUMPROPERTIES; | 
 |  | 
 |         typedef struct tagENUMPROPERTY | 
 |         { | 
 |             LPSTR       pszName; | 
 |             HHEADERROW  hRow; | 
 |             DWORD       dwPropId; | 
 |         } ENUMPROPERTY, *LPENUMPROPERTY; | 
 |  | 
 |         HRESULT Next( | 
 |             [in]      ULONG cFetch, | 
 |             [in, out] LPENUMPROPERTY prgProp, | 
 |             [out]     ULONG *pcFetched); | 
 |  | 
 |         HRESULT Skip( | 
 |             [in]      ULONG cItems); | 
 |  | 
 |         HRESULT Reset(void); | 
 |  | 
 |         HRESULT Clone( | 
 |             [out]      IMimeEnumProperties **ppEnum); | 
 |  | 
 |         HRESULT Count( | 
 |             [out]      ULONG *pcItems); | 
 |  | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(c5588354-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeEnumAddressTypes : IUnknown | 
 |     { | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(c5588350-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeEnumMessageParts : IUnknown | 
 |     { | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(64577981-86d7-11d1-bdfc-00c04fa31009), | 
 |         object | 
 |     ] | 
 |     interface IHashTable : IUnknown | 
 |     { | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(c5588351-7f86-11d0-8252-00c04fd85ab4), | 
 |         object | 
 |     ] | 
 |     interface IMimeAllocator : IMalloc | 
 |     { | 
 |         typedef [unique] IMimeAllocator *LPMIMEALLOCATOR; | 
 |  | 
 |         HRESULT FreeParamInfoArray( | 
 |             [in] ULONG            cParams, | 
 |             [in] LPMIMEPARAMINFO  prgParam, | 
 |             [in] boolean          fFreeArray); | 
 |  | 
 |         HRESULT FreeAddressList( | 
 |             [in,out] LPADDRESSLIST pList); | 
 |  | 
 |         HRESULT FreeAddressProps( | 
 |             [in,out] LPADDRESSPROPS pAddress); | 
 |  | 
 |         HRESULT ReleaseObjects( | 
 |             [in] ULONG            cObjects, | 
 |             [in] IUnknown         **prgpUnknown, | 
 |             [in] boolean          fFreeArray); | 
 |  | 
 |         HRESULT FreeEnumHeaderRowArray( | 
 |             [in] ULONG            cRows, | 
 |             [in] LPENUMHEADERROW  prgRow, | 
 |             [in] boolean          fFreeArray); | 
 |  | 
 |         HRESULT FreeEnumPropertyArray( | 
 |             [in] ULONG            cProps, | 
 |             [in] LPENUMPROPERTY   prgProp, | 
 |             [in] boolean          fFreeArray); | 
 |  | 
 |         HRESULT FreeThumbprint( | 
 |             [in] THUMBBLOB         *pthumbprint); | 
 |  | 
 |         HRESULT PropVariantClear( | 
 |             [in] LPPROPVARIANT     pProp); | 
 |  | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(feceaffd-c441-11d1-960e-00c04fbd7c09), | 
 |         object | 
 |     ] | 
 |     interface IMimeObjResolver : IUnknown | 
 |     { | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(b0d17fc2-7bc4-11d1-bdfa-00c04fa31009), | 
 |         object | 
 |     ] | 
 |     interface IFontCache : IUnknown | 
 |     { | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(b0d17fc5-7bc4-11d1-bdfa-00c04fa31009), | 
 |         object | 
 |     ] | 
 |     interface IFontCacheNotify : IUnknown | 
 |     { | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(70183210-7b36-11d2-8c12-00c04fa31009), | 
 |         object | 
 |     ] | 
 |     interface IMimeEditTag : IUnknown | 
 |     { | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |         uuid(d09ee528-7b38-11d2-8c12-00c04fa31009), | 
 |         object | 
 |     ] | 
 |     interface IMimeEditTagCollection : IUnknown | 
 |     { | 
 |         /* FIXME: fill this in */ | 
 |     } | 
 |  | 
 |     [ | 
 |          uuid(ba715ae0-a740-11d2-8b22-0080c76b34c6), | 
 |          local | 
 |     ] | 
 |     interface IMimeSecurityCallback : IUnknown | 
 |     { | 
 |         /* FIXME: fill this in */ | 
 |  | 
 |         cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_UNKNOWN                0") | 
 |         cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_KEYTRANS               1") | 
 |         cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_KEYAGREE               2") | 
 |         cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_MAIL_LIST              3") | 
 |  | 
 |         cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_CERTIFICATE          0") | 
 |         cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_KEYTRANS             1") | 
 |         cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_PROVIDER             2") | 
 |         cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_EPHEMERAL_KEYAGREE   3") | 
 |         cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_STATIC_KEYAGREE      4") | 
 |  | 
 |         cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_CERTIFICATE           0") | 
 |         cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_ISSUERSERIAL          1") | 
 |         cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_KEY_ID                2") | 
 |  | 
 |     } | 
 | } | 
 |  | 
 | cpp_quote("#ifdef __cplusplus") | 
 | cpp_quote(" extern \"C\" {") | 
 | cpp_quote("#endif") | 
 |  | 
 | cpp_quote("") | 
 | cpp_quote("HRESULT WINAPI MimeOleSetCompatMode(DWORD);") | 
 | cpp_quote("HRESULT WINAPI MimeOleContentTypeFromUrl(LPCSTR,LPCSTR,LPSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleParseMhtmlUrl(LPSTR,LPSTR*,LPSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleObjectFromUrl(LPCSTR,BOOL,REFIID,LPVOID*,IUnknown**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleObjectFromMoniker(BINDF,IMoniker*,IBindCtx*,REFIID,LPVOID*,IMoniker**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleCombineURL(LPCSTR,ULONG,LPCSTR,ULONG,BOOL,LPSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetSubjectFileName(IMimePropertySet*,ULONG*,ULONG*,LPSTR,ULONG);") | 
 | cpp_quote("HRESULT WINAPI MimeOleCreateWebDocument(LPCSTR,LPCSTR,IMimeWebDocument**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetRelatedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetMixedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetAlternativeSection(IMimeMessageTree*,LPHBODY,boolean*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGenerateCID(LPSTR,ULONG,boolean);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGenerateMID(LPSTR,ULONG,boolean);") | 
 | cpp_quote("HRESULT WINAPI MimeOleCreateByteStream(IStream**);") | 
 | cpp_quote("HRESULT WINAPI MimeOlGetPropertySchema(IMimePropertySchema**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleQueryString(LPCSTR,LPCSTR,boolean,boolean);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetPropA(IMimePropertySet*,LPCSTR,DWORD,LPSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSetPropA(IMimePropertySet*,LPCSTR,DWORD,LPCSTR);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetPropW(IMimePropertySet*,LPCSTR,DWORD,LPWSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSetPropW(IMimePropertySet*,LPCSTR,DWORD,LPCWSTR);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCSTR);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPWSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCWSTR);") | 
 | cpp_quote("HRESULT WINAPI MimeOleCreateHeaderTable(IMimeHeaderTable**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleVariantFree(LPPROPVARIANT);") | 
 | cpp_quote("HRESULT WINAPI MimeOleVariantCopy(LPPROPVARIANT,LPPROPVARIANT);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetExtClassId(LPCSTR,LPCLSID);") | 
 | cpp_quote("HRESULT WINAPI MimeOleEncodeHeader(HCHARSET,LPPROPVARIANT,LPSTR*,LPRFC1522INFO);") | 
 | cpp_quote("HRESULT WINAPI MimeOleDecodeHeader(HCHARSET,LPCSTR,LPPROPVARIANT,LPRFC1522INFO);") | 
 | cpp_quote("HRESULT WINAPI MimeOleRfc1522Decode(LPCSTR,LPSTR,ULONG,LPSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleRfc1522Encode(LPCSTR,HCHARSET,LPSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetInternat(IMimeInternational**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleFindCharset(LPCSTR,LPHCHARSET);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetCharsetInfo(HCHARSET,LPINETCSETINFO);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetCodePageInfo(HCHARSET,LPCODEPAGEINFO);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetDefaultCharset(LPHCHARSET);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSetDefaultCharset(HCHARSET);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetCodePageCharset(CODEPAGEID,CHARSETTYPE,LPHCHARSET);") | 
 | cpp_quote("HRESULT WINAPI MimeOleCreateVirtualStream(IStream**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleOpenFileStream(LPCSTR,DWORD,DWORD,IStream**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleIsTnefStream(IStream*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGenerateFileName(LPCSTR,LPCSTR,LPCSTR,LPSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetFileExtension(LPCSTR,LPSTR,ULONG);") | 
 | cpp_quote("HRESULT WINAPI MimeOleCreateSecurity(IMimeSecurity**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleInetDateToFileTime(LPCSTR,LPFILETIME);") | 
 | cpp_quote("HRESULT WINAPI MimeOleFileTimeToInetDate(LPFILETIME,LPSTR,ULONG);") | 
 | cpp_quote("HRESULT WINAPI MimeOleCreateMessageParts(IMimeMessageParts**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetAllocator(IMimeAllocator**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleParseRfc822Address(DWORD,ENCODINGTYPE,LPCSTR,LPADDRESSLIST);") | 
 | cpp_quote("HRESULT WINAPI MimeOleCreateMessage(IUnknown*,IMimeMessage**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleMergePartialHeaders(IStream*,IStream*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleEscapeString(CODEPAGEID,LPCSTR,LPSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetExtContentType(LPCSTR,LPSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetContentTypeExt(LPCSTR,LPSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetFileInfo(LPSTR,LPSTR*,LPSTR*,LPSTR*,LPSTR*,LPSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleCreateBody(IMimeBody**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleCreatePropertySet(IUnknown*,IMimePropertySet**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleCreateMessageTree(IUnknown*,IMimeMessageTree**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleGetCertsFromThumbprints(THUMBBLOB*,X509CERTRESULT*,const HCERTSTORE*,DWORD);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSplitMessage(IMimeMessage*,ULONG,IMimeMessageParts**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleClearDirtyTree(IMimeMessageTree*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleConvertEnrichedToHTML(CODEPAGEID,IStream*,IStream*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSMimeCapsToDlg(LPBYTE,DWORD,DWORD,PCX509CERT*,HWND,DWORD,DWORD,DWORD);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSMimeCapsFromDlg(HWND,DWORD,DWORD,DWORD,LPBYTE,DWORD*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSMimeCapInit(LPBYTE,DWORD,LPVOID*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSMimeCapAddSMimeCap(LPBYTE,DWORD,LPVOID);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSMimeCapAddCert(LPBYTE,DWORD,BOOL,LPVOID);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSMimeCapGetEncAlg(LPVOID,LPBYTE,DWORD*,DWORD*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSMimeCapGetHashAlg(LPVOID,LPBYTE,DWORD*,DWORD*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSMimeCapRelease(LPVOID);") | 
 | cpp_quote("HRESULT WINAPI MimeOleAlgNameFromSMimeap(LPBYTE,DWORD,LPCSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleAlgStrengthFromSMimeCap(LPBYTE,DWORD,BOOL,DWORD*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleSMimeCapsFull(LPVOID,BOOL,BOOL,LPBYTE,DWORD*);") | 
 | cpp_quote("HRESULT WINAPI MimeOleCreateHashTable(DWORD,BOOL,IHashTable**);") | 
 | cpp_quote("HRESULT WINAPI MimeOleStripHeaders(IMimeMessage*,HBODY,LPCSTR,LPCSTR,IStream**);") | 
 |  | 
 | cpp_quote("HRESULT WINAPI MimeEditViewSource(HWND,IMimeMessage*);") | 
 | cpp_quote("HRESULT WINAPI MimeEditIsSafeToRun(HWND,LPCSTR);") | 
 | cpp_quote("HRESULT WINAPI MimeEditVerifyTrust(HWND,LPCSTR,LPCSTR);") | 
 | cpp_quote("HRESULT WINAPI MimeEditCreateMimeDocument(IUnknown*,IMimeMessage*,DWORD,IMimeMessage**);") | 
 | cpp_quote("HRESULT WINAPI MimeEditGetBackgroundImageUrl(IUnknown*,BSTR*);") | 
 | cpp_quote("HRESULT WINAPI MimeEditDocumentFromStream(IStream*,REFIID,void**);") | 
 |  | 
 | cpp_quote("#ifdef __cplusplus") | 
 | cpp_quote("}") | 
 | cpp_quote("#endif") |