mirror of https://github.com/UMSKT/xpmgr.git
850 lines
49 KiB
Plaintext
850 lines
49 KiB
Plaintext
//+-------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1997-2005
|
|
//
|
|
// File: oestore.idl
|
|
//
|
|
// Contents: Windows Mail API
|
|
//
|
|
// History: 11-Oct-1997 SteveBailey Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
cpp_quote("#ifndef MSOEAPI_H")
|
|
cpp_quote("#define MSOEAPI_H")
|
|
|
|
|
|
import "ocidl.idl";
|
|
import "objidl.idl";
|
|
import "mimeole.idl";
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
// Interfaces
|
|
//--------------------------------------------------------------------------
|
|
interface IOutlookExpress;
|
|
interface IStoreNamespace;
|
|
interface IStoreFolder;
|
|
|
|
cpp_quote("//+-------------------------------------------------------------------------")
|
|
cpp_quote("// GUID Definitions")
|
|
cpp_quote("//--------------------------------------------------------------------------")
|
|
cpp_quote("#pragma comment(lib,\"uuid.lib\")")
|
|
cpp_quote("")
|
|
cpp_quote("// {3338DF69-4660-11d1-8A8D-00C04FB951F3}")
|
|
cpp_quote("DEFINE_GUID(CLSID_OutlookExpress, 0x3338df69, 0x4660, 0x11d1, 0x8a, 0x8d, 0x0, 0xc0, 0x4f, 0xb9, 0x51, 0xf3);")
|
|
cpp_quote("")
|
|
cpp_quote("// {0006F01A-0000-0000-C000-0000000046}")
|
|
cpp_quote("DEFINE_GUID(CLSID_Envelope, 0x0006F01A, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);")
|
|
cpp_quote("")
|
|
cpp_quote("// {3338DF6A-4660-11d1-8A8D-00C04FB951F3}")
|
|
cpp_quote("DEFINE_GUID(IID_IOutlookExpress, 0x3338df6a, 0x4660, 0x11d1, 0x8a, 0x8d, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xf3);")
|
|
cpp_quote("")
|
|
cpp_quote("// {E70C92A9-4BFD-11d1-8A95-00C04FB951F3}")
|
|
cpp_quote("DEFINE_GUID(CLSID_StoreNamespace, 0xe70c92a9, 0x4bfd, 0x11d1, 0x8a, 0x95, 0x0, 0xc0, 0x4f, 0xb9, 0x51, 0xf3);")
|
|
cpp_quote("")
|
|
cpp_quote("// {E70C92AA-4BFD-11d1-8A95-00C04FB951F3}")
|
|
cpp_quote("DEFINE_GUID(IID_IStoreNamespace, 0xe70c92aa, 0x4bfd, 0x11d1, 0x8a, 0x95, 0x0, 0xc0, 0x4f, 0xb9, 0x51, 0xf3);")
|
|
cpp_quote("")
|
|
cpp_quote("// {E70C92AC-4BFD-11d1-8A95-00C04FB951F3}")
|
|
cpp_quote("DEFINE_GUID(IID_IStoreFolder, 0xe70c92ac, 0x4bfd, 0x11d1, 0x8a, 0x95, 0x0, 0xc0, 0x4f, 0xb9, 0x51, 0xf3);")
|
|
cpp_quote("")
|
|
cpp_quote("//+-------------------------------------------------------------------------")
|
|
cpp_quote("// Errors Definition Macros")
|
|
cpp_quote("//--------------------------------------------------------------------------")
|
|
cpp_quote("#ifndef FACILITY_INTERNET")
|
|
cpp_quote("#define FACILITY_INTERNET 12")
|
|
cpp_quote("#endif")
|
|
cpp_quote("#ifndef HR_E")
|
|
cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)")
|
|
cpp_quote("#endif")
|
|
cpp_quote("#ifndef HR_S")
|
|
cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)")
|
|
cpp_quote("#endif")
|
|
cpp_quote("#ifndef HR_CODE")
|
|
cpp_quote("#define HR_CODE(hr) (INT)(hr & 0xffff)")
|
|
cpp_quote("#endif")
|
|
cpp_quote("")
|
|
cpp_quote("//+-------------------------------------------------------------------------")
|
|
cpp_quote("// MSOEAPI Failure Return Values")
|
|
cpp_quote("//--------------------------------------------------------------------------")
|
|
cpp_quote("#define MSOEAPI_E_FILE_NOT_FOUND HR_E(0xCF65)")
|
|
cpp_quote("#define MSOEAPI_E_STORE_INITIALIZE HR_E(0xCF66)")
|
|
cpp_quote("#define MSOEAPI_E_INVALID_STRUCT_SIZE HR_E(0xCF67)")
|
|
cpp_quote("#define MSOEAPI_E_CANT_LOAD_MSOERT HR_E(0xCF68)")
|
|
cpp_quote("#define MSOEAPI_E_CANT_LOAD_INETCOMM HR_E(0xCF69)")
|
|
cpp_quote("#define MSOEAPI_E_CANT_LOAD_MSOEACCT HR_E(0xCF70)")
|
|
cpp_quote("#define MSOEAPI_E_CANT_MSOERT_BADVER HR_E(0xCF71)")
|
|
cpp_quote("#define MSOEAPI_E_CANT_INETCOMM_BADVER HR_E(0xCF72)")
|
|
cpp_quote("#define MSOEAPI_E_CANT_MSOEACCT_BADVER HR_E(0xCF73)")
|
|
cpp_quote("")
|
|
cpp_quote("//+-------------------------------------------------------------------------")
|
|
cpp_quote("// String Definition Macros")
|
|
cpp_quote("//--------------------------------------------------------------------------")
|
|
cpp_quote("#ifdef __cplusplus")
|
|
cpp_quote("#define EXTERN_C extern \"C\"")
|
|
cpp_quote("#else")
|
|
cpp_quote("#define EXTERN_C extern")
|
|
cpp_quote("#endif")
|
|
cpp_quote("")
|
|
cpp_quote("#ifndef STRCONSTA")
|
|
cpp_quote("#ifdef DEFINE_STRCONST")
|
|
cpp_quote("#define STRCONSTA(x,y) EXTERN_C const char x[] = y")
|
|
cpp_quote("#define STRCONSTW(x,y) EXTERN_C const WCHAR x[] = L##y")
|
|
cpp_quote("#else")
|
|
cpp_quote("#define STRCONSTA(x,y) EXTERN_C const char x[]")
|
|
cpp_quote("#define STRCONSTW(x,y) EXTERN_C const WCHAR x[]")
|
|
cpp_quote("#endif STRCONSTA")
|
|
cpp_quote("#endif")
|
|
cpp_quote("")
|
|
cpp_quote("//+-------------------------------------------------------------------------")
|
|
cpp_quote("// Strings")
|
|
cpp_quote("//--------------------------------------------------------------------------")
|
|
cpp_quote("STRCONSTA(STR_MSOEAPI_INSTANCECLASS, \"OutlookExpressHiddenWindow\");")
|
|
cpp_quote("STRCONSTA(STR_MSOEAPI_IPSERVERCLASS, \"OutlookExpressInProccessServer\");")
|
|
cpp_quote("STRCONSTA(STR_MSOEAPI_INSTANCEMUTEX, \"Local\\\\OutlookExpress_InstanceMutex_101897\");")
|
|
cpp_quote("STRCONSTA(STR_MSOEAPI_DLLNAME, \"MSOE.DLL\");")
|
|
cpp_quote("STRCONSTA(STR_MSOEAPI_START, \"CoStartOutlookExpress\");")
|
|
cpp_quote("STRCONSTA(STR_MSOEAPI_SHUTDOWN, \"CoShutdownOutlookExpress\");")
|
|
cpp_quote("STRCONSTA(STR_MSOEAPI_CREATE, \"CoCreateOutlookExpress\");")
|
|
cpp_quote("")
|
|
cpp_quote("//+-------------------------------------------------------------------------")
|
|
cpp_quote("// Function Typedefs")
|
|
cpp_quote("//--------------------------------------------------------------------------")
|
|
cpp_quote("typedef HRESULT (APIENTRY *PFNSTART)(DWORD dwFlags, LPCSTR pszCmdLine, INT nCmdShow);")
|
|
cpp_quote("typedef HRESULT (APIENTRY *PFNSHUTDOWN)(DWORD dwReserved);")
|
|
cpp_quote("typedef HRESULT (APIENTRY *PFNCREATE)(IUnknown *pUnkOuter, IUnknown **ppUnknown);")
|
|
cpp_quote("")
|
|
|
|
//+-------------------------------------------------------------------------
|
|
// Constants
|
|
//--------------------------------------------------------------------------
|
|
const DWORD MSOEAPI_ACDM_CMDLINE = 1;
|
|
const DWORD MSOEAPI_ACDM_NOTIFY = 2;
|
|
const DWORD MSOEAPI_ACDM_ODBNOTIFY = 3;
|
|
const DWORD MSOEAPI_ACDM_STGNOTIFY = 4;
|
|
|
|
//+-------------------------------------------------------------------------
|
|
// DECLARE_HANDLE Macro
|
|
//--------------------------------------------------------------------------
|
|
#ifndef DECLARE_HANDLE
|
|
#define DECLARE_HANDLE(name) \
|
|
struct name##__ { DWORD unused; }; \
|
|
typedef struct name##__ _far* name
|
|
#endif // DECLARE_HANDLE
|
|
|
|
//;begin_internal
|
|
//--------------------------------------------------------------------------
|
|
// FOLDERIDs and MESSAGEIDs in Windows Mail are 64 bits, and do not employ
|
|
// handle semantics. Currently, this doesn't affect folders accessible through
|
|
// these interfaces (local folders only -- special, or user-created, folders).
|
|
// The children of FOLDERID_LOCAL_STORE are still saved into the primary
|
|
// Folders table, so compatibility is retained.
|
|
//
|
|
// If in future the IStoreNamespace/IStoreFolder implementations are extended
|
|
// to allow access to NNTP and IMAP folders, we will need new interface
|
|
// definitions to access the altered store.
|
|
//--------------------------------------------------------------------------
|
|
//;end_internal
|
|
|
|
//;begin_internal
|
|
//--------------------------------------------------------------------------
|
|
// Work Around: The declaration of DECLARE_HANDLE is not remoting friendly.
|
|
// It declares the handle as a pointer to a structure, when it's actually used
|
|
// like a dword. RPC will try to marshal what the handle points to, which
|
|
// won't work, since the handle isn't really being used as a pointer. This
|
|
// declaration of DECLARE_HANDLE_TRANSMITTED_AS_INT uses the
|
|
// [transmit_as(INT)] attribute to indicate to rpc that the handle will be
|
|
// transmitted as an INT. For every handle that is declared, we have to provide
|
|
// functions to convert to and from the transmitted type, and functions to free
|
|
// memory allocated for the transmitted type and the user type (4 functions
|
|
// total). DECLARE_HANDLE_TRANSMITTED_AS_INT is for porting legacy interfaces
|
|
// that use DECLARE_HANDLE only. Do not use DECLARE_HANDLE or
|
|
// DECLARE_HANDLE_TRANSMITTED_AS_INT in new code! Instead use the
|
|
// [context_handle] attribute to create handles in idl files.
|
|
//--------------------------------------------------------------------------
|
|
//;end_internal
|
|
#ifndef DECLARE_HANDLE_TRANSMITTED_AS_INT
|
|
#define DECLARE_HANDLE_TRANSMITTED_AS_INT(name) \
|
|
struct name##__ { DWORD unused; }; \
|
|
typedef [transmit_as(INT)] struct name##__ _far* name
|
|
#endif // DECLARE_HANDLE_TRANSMITTED_AS_INT
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
// HENUMSTORE
|
|
//--------------------------------------------------------------------------
|
|
DECLARE_HANDLE_TRANSMITTED_AS_INT(HENUMSTORE);
|
|
typedef HENUMSTORE *LPHENUMSTORE;
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1995-1998.
|
|
//
|
|
// Contents: IOutlookExpress
|
|
//
|
|
// History: 11-Oct-1997 SteveBailey Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
cpp_quote("#ifndef __LPOUTLOOKEXPRESS_DEFINED")
|
|
cpp_quote("#define __LPOUTLOOKEXPRESS_DEFINED")
|
|
[
|
|
object,
|
|
uuid(3338DF6A-4660-11d1-8A8D-00C04FB951F3),
|
|
pointer_default(unique)
|
|
]
|
|
interface IOutlookExpress : IUnknown
|
|
{
|
|
typedef IOutlookExpress *LPOUTLOOKEXPRESS;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Flags used in IOutlookExpress::Start
|
|
//----------------------------------------------------------------------
|
|
cpp_quote("#define MSOEAPI_START_SHOWSPLASH 0x00000001")
|
|
cpp_quote("#define MSOEAPI_START_MESSAGEPUMP 0x00000002")
|
|
cpp_quote("#define MSOEAPI_START_ALLOWCOMPACTION 0x00000004")
|
|
cpp_quote("#define MSOEAPI_START_INSTANCEMUTEX 0x00000008")
|
|
cpp_quote("#define MSOEAPI_START_SHOWERRORS 0x00000010")
|
|
cpp_quote("#define MSOEAPI_START_APPWINDOW 0x00000020")
|
|
cpp_quote("#define MSOEAPI_START_DEFAULTIDENTITY 0x00000040")
|
|
cpp_quote("#define MSOEAPI_START_ALREADY_RUNNING 0x00000080")
|
|
cpp_quote("#define MSOEAPI_START_STOREVALIDNODELETE 0x00000100")
|
|
cpp_quote("#define MSOEAPI_START_NOSTORE 0x00000200")
|
|
|
|
//+---------------------------------------------------------------------
|
|
// MSOEAPI_START_APPLICATION
|
|
//----------------------------------------------------------------------
|
|
cpp_quote("#define MSOEAPI_START_APPLICATION \\")
|
|
cpp_quote(" (MSOEAPI_START_SHOWSPLASH | \\")
|
|
cpp_quote(" MSOEAPI_START_SHOWERRORS | \\")
|
|
cpp_quote(" MSOEAPI_START_MESSAGEPUMP | \\")
|
|
cpp_quote(" MSOEAPI_START_ALLOWCOMPACTION | \\")
|
|
cpp_quote(" MSOEAPI_START_INSTANCEMUTEX | \\")
|
|
cpp_quote(" MSOEAPI_START_APPWINDOW)")
|
|
|
|
//+---------------------------------------------------------------------
|
|
// MSOEAPI_START_COMOBJECT
|
|
//----------------------------------------------------------------------
|
|
cpp_quote("#define MSOEAPI_START_COMOBJECT \\")
|
|
cpp_quote(" MSOEAPI_START_SHOWERRORS")
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Methods
|
|
//----------------------------------------------------------------------
|
|
HRESULT Start(
|
|
[in] DWORD dwFlags,
|
|
[in] LPCSTR pszCmdLine,
|
|
[in] INT nCmdShow);
|
|
}
|
|
|
|
cpp_quote("#endif // __LPOUTLOOKEXPRESS_DEFINED")
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1995-1998.
|
|
//
|
|
// Contents: IStoreNamespace
|
|
//
|
|
// History: 11-Oct-1997 SteveBailey Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
cpp_quote("#ifndef __LPSTORENAMESPACE_DEFINED")
|
|
cpp_quote("#define __LPSTORENAMESPACE_DEFINED")
|
|
[
|
|
object,
|
|
uuid(E70C92AA-4BFD-11d1-8A95-00C04FB951F3),
|
|
pointer_default(unique)
|
|
]
|
|
interface IStoreNamespace : IUnknown
|
|
{
|
|
typedef IStoreNamespace *LPSTORENAMESPACE;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// STOREFOLDERID - folderIds are persistable
|
|
//----------------------------------------------------------------------
|
|
typedef DWORD STOREFOLDERID;
|
|
typedef STOREFOLDERID *LPSTOREFOLDERID;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Some Special FOLDER Values
|
|
//----------------------------------------------------------------------
|
|
const DWORD FOLDERID_ROOT = 0;
|
|
const DWORD FOLDERID_INVALID = 0xffffffff;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// MESSAGEID
|
|
//----------------------------------------------------------------------
|
|
typedef DWORD MESSAGEID;
|
|
typedef MESSAGEID *LPMESSAGEID;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Some Special MESSAGEID values
|
|
//----------------------------------------------------------------------
|
|
const DWORD MESSAGEID_INVALID = 0xffffffff;
|
|
const DWORD MESSAGEID_FIRST = 0xffffffff;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Consts
|
|
//----------------------------------------------------------------------
|
|
const DWORD CCHMAX_FOLDER_NAME = 256;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Notification Messages
|
|
//----------------------------------------------------------------------
|
|
cpp_quote("#define WM_FOLDERNOTIFY (WM_USER + 1600) // IStoreNamespace Notification - lparam=LPFOLDERNOTIFYEX, client must call CoTaskMemFree(lParam)")
|
|
cpp_quote("#define WM_NEWMSGS (WM_USER + 1650) // IStoreFolder Notification: wParam=MESSAGEID, lParam=Reserved")
|
|
cpp_quote("#define WM_DELETEMSGS (WM_USER + 1651) // IStoreFolder Notification: wParam=prgdwMsgId, lParam=cMsgs")
|
|
cpp_quote("#define WM_DELETEFOLDER (WM_USER + 1652) // IStoreFolder Notification: wParam=STOREFOLDERID or HFOLDER")
|
|
|
|
// If wParam is equal to 0xffffffff then that means that all messages in the folder
|
|
// were either marked as read (WM_MARKEDASREAD) or unread (WM_MARKEDASUNREAD)
|
|
cpp_quote("#define WM_MARKEDASREAD (WM_USER + 1653) // IStoreFolder Notification: wParamprgdwMsgId, lParam=cMsgs")
|
|
cpp_quote("#define WM_MARKEDASUNREAD (WM_USER + 1654) // IStoreFolder Notification: wParamprgdwMsgId, lParam=cMsgs")
|
|
|
|
//+---------------------------------------------------------------------
|
|
// FOLDERNOTIFYTYPE
|
|
//----------------------------------------------------------------------
|
|
typedef enum tagFOLDERNOTIFYTYPE {
|
|
NEW_FOLDER = 1,
|
|
DELETE_FOLDER,
|
|
RENAME_FOLDER,
|
|
MOVE_FOLDER,
|
|
UNREAD_CHANGE,
|
|
IMAPFLAG_CHANGE,
|
|
UPDATEFLAG_CHANGE,
|
|
FOLDER_PROPS_CHANGED
|
|
} FOLDERNOTIFYTYPE;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// FOLDERNOTIFYEX
|
|
//----------------------------------------------------------------------
|
|
typedef struct tagFOLDERNOTIFYEX {
|
|
FOLDERNOTIFYTYPE type;
|
|
STOREFOLDERID idFolderOld; // not used for CREATEFOLDER and DELETEFOLDER
|
|
STOREFOLDERID idFolderNew;
|
|
} FOLDERNOTIFYEX, *LPFOLDERNOTIFYEX;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// MESSAGEIDLIST - A list of message ids (DWORDs)
|
|
//----------------------------------------------------------------------
|
|
typedef struct tagMESSAGEIDLIST {
|
|
DWORD cbSize; // Sizeof this structure
|
|
DWORD cMsgs; // Number of elements in prghMessage
|
|
[size_is(cMsgs)] LPMESSAGEID prgdwMsgId; // Array of handles to messages
|
|
} MESSAGEIDLIST, *LPMESSAGEIDLIST;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// SPECIALFOLDER - How to identify a special folder
|
|
//----------------------------------------------------------------------
|
|
typedef enum tagSPECIALFOLDER {
|
|
FOLDER_NOTSPECIAL = -1, // Not a special folder
|
|
FOLDER_INBOX, // Default receive folder
|
|
FOLDER_OUTBOX, // Default send folder
|
|
FOLDER_SENT, // Things that have been sent
|
|
FOLDER_DELETED, // Things that have been deleted
|
|
FOLDER_DRAFT, // Things that are in progress
|
|
FOLDER_MAX // Don't use
|
|
} SPECIALFOLDER;
|
|
|
|
//----------------------------------------------------------------------
|
|
// FOLDERPROPS - Properties of a folder
|
|
//----------------------------------------------------------------------
|
|
//;begin_internal
|
|
// Work Around: The FOLDERPROPS stores the size of itself as one of
|
|
// its fields. This does not work well with remoting across the
|
|
// 32/64-bit boundary. The size on size of the structure on the 32-bit
|
|
// side will be different from the size on the 64-bit side. However,
|
|
// cbSize will not change to indicate this difference. If the caller
|
|
// or callee then check to make sure that cbSize==sizeof(FOLDERPROPS),
|
|
// then they will assume there is a version problem. To solve this,
|
|
// a new type is being created (which is just a DWORD) that is labeled
|
|
// [transmit_as(DWORD)]. This allows us to change the value of cbSize
|
|
// when it comes off the wire at the destination.
|
|
//;end_internal
|
|
typedef [transmit_as(DWORD)] DWORD FOLDERPROPSSIZE;
|
|
//;begin_internal
|
|
// Work Around: MIDL emits a 16 bit value for the SPECIALFOLDER enum
|
|
// and RPC verifies that it is high bit clean. This isn't the case for
|
|
// FOLDER_NOTSPECIAL == -1 == 0xffff
|
|
//;end_internal
|
|
typedef [transmit_as(DWORD)] SPECIALFOLDER SPECIALFOLDER_XMIT;
|
|
typedef struct tagFOLDERPROPS {
|
|
FOLDERPROPSSIZE cbSize; // Size of this structure
|
|
STOREFOLDERID dwFolderId; // Handle of this folder
|
|
INT cSubFolders; // Number of sub-folders
|
|
SPECIALFOLDER_XMIT sfType; // Special folder type
|
|
DWORD cUnread; // Number of un-read messages
|
|
DWORD cMessage; // Total # of messages
|
|
CHAR szName[CCHMAX_FOLDER_NAME]; // The Folder Name
|
|
} FOLDERPROPS, *LPFOLDERPROPS;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Methods
|
|
//----------------------------------------------------------------------
|
|
cpp_quote("#define NAMESPACE_INITIALIZE_CURRENTIDENTITY 0x00000001")
|
|
HRESULT Initialize( // Initialize the object
|
|
[in,unique] HWND hwndOwner, // Window owner for things like compaction dialog
|
|
[in] DWORD dwReserved); // Reserved for future use
|
|
|
|
HRESULT GetDirectory( // Get the location of the store (filepath)
|
|
[in,out,size_is(cchMaxPath)] LPSTR pszPath, // Buffer to put path of store into
|
|
[in] DWORD cchMaxPath); // in: byte count size of pszPath, out: char count size of pszPath
|
|
|
|
HRESULT OpenSpecialFolder(
|
|
[in] SPECIALFOLDER_XMIT sfType, // Special folder type
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[out] IStoreFolder **ppFolder); // Pointer to an IStoreFolder
|
|
|
|
HRESULT OpenFolder(
|
|
[in] STOREFOLDERID dwFolderId, // Folder to open
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[out] IStoreFolder **ppFolder); // Pointer to an IStoreFolder
|
|
|
|
HRESULT CreateFolder(
|
|
[in] STOREFOLDERID dwParentId, // Parent of the new folder, can use FOLDERID_ROOT
|
|
[in] LPCSTR pszName, // Name of new folder, must be less than MAX_FOLDER_NAME
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[out] LPSTOREFOLDERID pdwFolderId); // Handle to the new folder
|
|
|
|
HRESULT RenameFolder(
|
|
[in] STOREFOLDERID dwFolderId, // Folder to rename
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in] LPCSTR pszNewName); // New folder name, must be less than MAX_FOLDER_NAME
|
|
|
|
HRESULT MoveFolder(
|
|
[in] STOREFOLDERID dwFolderId, // Folder to move
|
|
[in] STOREFOLDERID dwParentId, // FolderId of the new Parent
|
|
[in] DWORD dwReserved); // Reserved for future use
|
|
|
|
HRESULT DeleteFolder(
|
|
[in] STOREFOLDERID dwFolderId, // Folder to delete
|
|
[in] DWORD dwReserved); // Reserved for future use
|
|
|
|
[local]
|
|
HRESULT GetFolderProps(
|
|
[in] STOREFOLDERID dwFolderId, // FolderId to get info for
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in,out] LPFOLDERPROPS pProps); // in: set cbSize, out: Holds folder information
|
|
|
|
//;begin_internal
|
|
// Work Around: GetFolderProps is not remoting friendly. Set GetMessageProps below for details.
|
|
//;end_internal
|
|
[call_as(GetFolderProps)]
|
|
HRESULT GetFolderPropsRemote(
|
|
[in] STOREFOLDERID dwFolderId, // FolderId to get info for
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in,out] LPFOLDERPROPS pProps); // in: set cbSize, out: Holds folder information
|
|
|
|
cpp_quote("// CLocalStore::CopyMoveMessages flags - dwFlags == 0 is copy")
|
|
cpp_quote("#define CMF_MOVE 0x0001 // msgs deleted from src fldr after copy")
|
|
cpp_quote("#define CMF_DELETE 0x0002 // same as CMF_MOVE but uses delete string for status")
|
|
HRESULT CopyMoveMessages(
|
|
[in] IStoreFolder *pSource, // Source store folder
|
|
[in] IStoreFolder *pDest, // Destination Store Folder
|
|
[in] LPMESSAGEIDLIST pMsgIdList, // List of MESSAGEIDs to move/copy
|
|
[in] DWORD dwFlags, // CMF_xxx Flags
|
|
[in] DWORD dwFlagsRemove, // MSG_xxx Flags to remove from copied/moved messages
|
|
[in] IProgressNotify *pProgress); // Store progress callback (client implements)
|
|
|
|
[local]
|
|
HRESULT RegisterNotification(
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in] HWND hwnd); // Handle to window to send notifications
|
|
|
|
[call_as(RegisterNotification)]
|
|
HRESULT RegisterNotificationRemote(
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in] IUnknown *pUnkObj); // Store event dispatcher callback (implemented in the client stub)
|
|
|
|
HRESULT UnregisterNotification(
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in] HWND hwnd); // Handle to window to un-register for notifications
|
|
|
|
HRESULT CompactAll( // Compacts all folders in the store
|
|
[in] DWORD dwReserved); // Reserved for future use
|
|
|
|
HRESULT GetFirstSubFolder( // Enumerate sub folders
|
|
[in] STOREFOLDERID dwFolderId, // Pass FOLDERID_ROOT to enum root folders
|
|
[in,out] LPFOLDERPROPS pProps, // If function succeeds, contents are valid
|
|
[out] LPHENUMSTORE phEnum); // Use in call to GetNextSubFolder, and then GetSubFolderClose
|
|
|
|
HRESULT GetNextSubFolder( // Get the next subfolder, returns S_FALSE if no more folders
|
|
[in] HENUMSTORE hEnum, // Handle received from GetFirstSubFolder
|
|
[in,out] LPFOLDERPROPS pProps); // If function returns S_OK, contains folder properties
|
|
|
|
HRESULT GetSubFolderClose( // Closes the handle associated with a folder enumeration
|
|
[in] HENUMSTORE hEnum); // Handle received from GetFirstSubFolder
|
|
}
|
|
|
|
cpp_quote("#endif // __LPSTORENAMESPACE_DEFINED")
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1995-1998.
|
|
//
|
|
// Contents: IStoreFolder
|
|
//
|
|
// History: 11-Oct-1997 SteveBailey Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
cpp_quote("#ifndef __LPSTOREFOLDER_DEFINED")
|
|
cpp_quote("#define __LPSTOREFOLDER_DEFINED")
|
|
[
|
|
object,
|
|
uuid(E70C92AC-4BFD-11d1-8A95-00C04FB951F3),
|
|
pointer_default(unique)
|
|
]
|
|
interface IStoreFolder : IUnknown
|
|
{
|
|
typedef IStoreFolder *LPSTOREFOLDER;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Message State Flags used in MESSAGEINFO::dwState
|
|
//----------------------------------------------------------------------
|
|
cpp_quote("#define MSG_DELETED 0x0001 // The message has been deleted, compaction will remove it")
|
|
cpp_quote("#define MSG_UNREAD 0x0002 // The message is marked as un-read")
|
|
cpp_quote("#define MSG_SUBMITTED 0x0004 // For messages waiting to be sent: OUTBOX ONLY")
|
|
cpp_quote("#define MSG_UNSENT 0x0008 // For msgs-in-progress saved to a folder")
|
|
cpp_quote("#define MSG_RECEIVED 0x0010 // For messages that came from a server")
|
|
cpp_quote("#define MSG_NEWSMSG 0x0020 // For news messages")
|
|
cpp_quote("#define MSG_NOSECUI 0x0040 // For messages where the user wants to die")
|
|
cpp_quote("#define MSG_VOICEMAIL 0x0080 // The message has the X-Voicemail header set...")
|
|
cpp_quote("#define MSG_REPLIED 0x0100 // The message has been replied to")
|
|
cpp_quote("#define MSG_FORWARDED 0x0200 // The message has been forwarded to")
|
|
cpp_quote("#define MSG_RCPTSENT 0x0400 // S/MIME Receipt has been sent")
|
|
cpp_quote("#define MSG_FLAGGED 0x0800 // The message is currently flaged")
|
|
cpp_quote("#define MSG_LAST 0x0200 // ** Keep this updated!! **")
|
|
cpp_quote("#define MSG_EXTERNAL_FLAGS 0x00fe")
|
|
cpp_quote("#define MSG_FLAGS 0x000f")
|
|
|
|
//----------------------------------------------------------------------
|
|
// MESSAGEPROPS
|
|
//----------------------------------------------------------------------
|
|
//;begin_internal
|
|
// Work Around: The MESSAGEPROPS stores the size of itself as one of
|
|
// its fields. See the comment above FOLDERPROPS for a description of
|
|
// the problem and solution.
|
|
//;end_internal
|
|
typedef [transmit_as(DWORD)] DWORD MESSAGEPROPSSIZE;
|
|
typedef struct tagMESSAGEPROPS {
|
|
MESSAGEPROPSSIZE cbSize; // Size of this structure
|
|
DWORD dwReserved; // Reserved don't use
|
|
MESSAGEID dwMessageId; // Handle to this message
|
|
DWORD dwLanguage; // Codepage of this message
|
|
DWORD dwState; // MSG_xxx Flags
|
|
|
|
// Things you don't get when MSGPROPS_FAST
|
|
DWORD cbMessage; // Size of the message
|
|
IMSGPRIORITY priority; // Message Priority
|
|
FILETIME ftReceived; // When the message was received
|
|
FILETIME ftSent; // When the message was sent
|
|
LPSTR pszSubject; // The subject of the message
|
|
LPSTR pszDisplayTo; // The display to line of the message
|
|
LPSTR pszDisplayFrom; // The display from line of the message
|
|
LPSTR pszNormalSubject; // The normalized subject of the message
|
|
DWORD dwFlags; // IMF_xxx Flags defined in mimeole.idl
|
|
IStream *pStmOffsetTable; // Use with IMimeMessage::LoadOffsetTable
|
|
} MESSAGEPROPS, *LPMESSAGEPROPS;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// HBATCHLOCK
|
|
//----------------------------------------------------------------------
|
|
DECLARE_HANDLE_TRANSMITTED_AS_INT(HBATCHLOCK);
|
|
typedef HBATCHLOCK *LPHBATCHLOCK;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Method
|
|
//----------------------------------------------------------------------
|
|
HRESULT GetFolderProps( // Get folder info for this folder
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in,out] LPFOLDERPROPS pProps); // in: set cbSize, out: contains folder information
|
|
|
|
cpp_quote("#define MSGPROPS_FAST 0x00000001 // See MESSAGEPROPS structure, improved performance")
|
|
[local]
|
|
HRESULT GetMessageProps(
|
|
[in] MESSAGEID dwMessageId, // Message Identifier
|
|
[in] DWORD dwFlags, // GETMSGINFO_xxx Flags
|
|
[in,out] LPMESSAGEPROPS pProps); // Message Info - set cbSize before calling
|
|
|
|
//;begin_internal
|
|
// Work Around: GetMessageProps and LPMESSAGEPROPS are not remoting
|
|
// friendly. The problem is that pProps is declared as [in,out], which
|
|
// implies that all of pProps will be initialized by the caller
|
|
// when a call is made. However, the only field of pProps that we know
|
|
// will be initialized on the way in is cbSize. The rest of the
|
|
// structure will contain random memory. When RPC tries to marshal the
|
|
// structure on the way in, it will try to dereference pointers that are
|
|
// uninitialized. To work around this without breaking IStoreNamespace
|
|
// clients, GetMessagePropsRemote was created with the
|
|
// [call_as(GetMessageProps)] attribute. This means that when a client
|
|
// has a remote reference to an IStoreNamespace and they make a call to
|
|
// GetMessageProps, that call will be remoted using
|
|
// GetMessagePropsRemote. We must provide 2 functions to support this.
|
|
// The first function, which acts as a proxy, takes the parameters that
|
|
// are passed in to GetMessageProps, and converts them to a form that
|
|
// GetMessagePropsRemote and RPC can use. The other function, which acts
|
|
// as a stub, converts the parameters from the remotable form back
|
|
// into the form that is understood by GetMessageProps, then makes the
|
|
// call to GetMessageProps on the server. In our case, the proxy
|
|
// function zero-initializes the fields of pProps, and the stub function
|
|
// only passes the remoted pProps on to GetMessageProps.
|
|
//;end_internal
|
|
[call_as(GetMessageProps)]
|
|
HRESULT GetMessagePropsRemote(
|
|
[in] MESSAGEID dwMessageId, // Message Identifier
|
|
[in] DWORD dwFlags, // GETMSGINFO_xxx Flags
|
|
[in,out] LPMESSAGEPROPS pProps); // Message Info - set cbSize before calling
|
|
|
|
HRESULT FreeMessageProps( // Handles the case where pMsgInfo->dwMask has MIP_BYREF
|
|
[in,out] LPMESSAGEPROPS pProps); // Pointer to MESSAGEINFO structure to free
|
|
|
|
HRESULT DeleteMessages(
|
|
[in] LPMESSAGEIDLIST pMsgIdList, // List of HMESSAGEs
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in] IProgressNotify *pProgress); // Progress information
|
|
|
|
HRESULT SetLanguage(
|
|
[in] DWORD dwLanguage, // MLANG Codepage ID of message
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in] LPMESSAGEIDLIST pMsgIdList); // List of HMESSAGEs to apply new language to
|
|
|
|
HRESULT MarkMessagesAsRead(
|
|
[in] BOOL fRead, // Mark as Read or Unread
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in] LPMESSAGEIDLIST pMsgIdList); // List of HMESSAGEs to mark as (un)read
|
|
|
|
[local]
|
|
HRESULT SetFlags( // Modify the flags of a message
|
|
[in] LPMESSAGEIDLIST pMsgIdList, // Array of messages to modify flags for
|
|
[in] DWORD dwState, // MSG_xxx Flags to set on pMsgIdList
|
|
[in] DWORD dwStatemask, // ~dwStateMask == MSG_xxx Flags to mask out
|
|
[in,out,unique] LPDWORD prgdwNewFlags); // optional caller allocated Array of new message state flags that match pMsgIdList array
|
|
|
|
[call_as(SetFlags)]
|
|
HRESULT SetFlagsRemote( // Modify the flags of a message
|
|
[in] LPMESSAGEIDLIST pMsgIdList, // Array of messages to modify flags for
|
|
[in] DWORD dwState, // MSG_xxx Flags to set on pMsgIdList
|
|
[in] DWORD dwStatemask, // MSG_xxx Flags to allow set on messages
|
|
[in] DWORD cMsgs, // if (prgdwNewFlags != NULL) size of caller array passed for new flags
|
|
[in,out,unique,size_is(cMsgs)] LPDWORD prgdwNewFlags); // Array of new message state flags that match pMsgIdList array
|
|
|
|
[local]
|
|
HRESULT OpenMessage( // Open a message (get a stream or a message object)
|
|
[in] MESSAGEID dwMessageId, // Handle to the message to open
|
|
[in] REFIID riid, // IID_IStream or IID_IMimeMessage stream is readonly
|
|
[out,iid_is(riid)] LPVOID *ppvObject); // The object, you must ->Release it
|
|
|
|
//;begin_internal
|
|
// Workaround: IMimeMessageW is not remoteable, so we'll
|
|
// simply take an IStream and re-create the mime message on the other end
|
|
//;end_internal
|
|
[call_as(OpenMessage)]
|
|
HRESULT OpenMessageRemote( // Open a message (get a stream or a message object)
|
|
[in] MESSAGEID dwMessageId, // Handle to the message to open
|
|
[in] REFIID riid, // IID_IStream or IID_IMimeMessage stream is readonly
|
|
[out,iid_is(riid)] LPVOID *ppvObject); // The object, you must ->Release it
|
|
|
|
[local]
|
|
HRESULT SaveMessage( // Add a new entry to a folder.
|
|
[in] REFIID riid, // IID_IStream or IID_IMimeMessage
|
|
[in,iid_is(riid)] LPVOID pvObject, // Pointer to a stream or mime message
|
|
[in] DWORD dwMsgFlags, // MSG_xxx Flags
|
|
[out] LPMESSAGEID pdwMessageId); // Handle to the new message
|
|
|
|
[call_as(SaveMessage)]
|
|
HRESULT SaveMessageRemote( // Add a new entry to a folder.
|
|
[in] REFIID riid, // IID_IStream or IID_IMimeMessage
|
|
[in,iid_is(riid)] LPVOID pvObject, // Pointer to a stream or mime message
|
|
[in] DWORD dwMsgFlags, // MSG_xxx Flags
|
|
[out] LPMESSAGEID pdwMessageId); // Handle to the new message
|
|
|
|
HRESULT BatchLock( // Lock to prepare for a batch operation
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[out] LPHBATCHLOCK phBatchLock); // Handle to newly created lock
|
|
|
|
HRESULT BatchFlush( // Flush the current batch operation
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in] HBATCHLOCK hBatchLock); // Folder lock obtained from BatchLock
|
|
|
|
HRESULT BatchUnlock( // Unlocks a batched operation
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in] HBATCHLOCK hBatchLock); // Handle to lock obtained from BatchLock
|
|
|
|
HRESULT CreateStream( // Create a new stream in a folder
|
|
[in] HBATCHLOCK hBatchLock, // Handle to a folder lock, optional if doing a one-of
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[out] IStream **ppStream, // Pointer to new stream can be used for read/write
|
|
[out] LPMESSAGEID pdwMessageId); // Handle to the new message
|
|
|
|
cpp_quote("#define COMMITSTREAM_REVERT 0x00000001 // Don't add this stream/message to the folder")
|
|
HRESULT CommitStream( // Commit/Revert a stream created with CreateStream
|
|
[in] HBATCHLOCK hBatchLock, // Folder lock obtained from BatchLock
|
|
[in] DWORD dwFlags, // COMMITSTREAM_xxx Flags
|
|
[in] DWORD dwMsgFlags, // MSG_xxx Flags
|
|
[in] IStream *pStream, // Stream obtained from CreateStream
|
|
[in] MESSAGEID dwMessageId, // dwMessageId obtained from CreateStream
|
|
[in] IMimeMessage *pMessage); // Message to commit, if not passed in, pStream will be pared.
|
|
|
|
[local]
|
|
HRESULT RegisterNotification(
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in] HWND hwnd); // Handle to window to send notifications
|
|
|
|
[call_as(RegisterNotification)]
|
|
HRESULT RegisterNotificationRemote(
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in] IUnknown *pUnkObj); // Store event dispatcher callback (implemented in the client stub)
|
|
|
|
HRESULT UnregisterNotification(
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in] HWND hwnd); // Handle to window to un-register for notifications
|
|
|
|
HRESULT Compact( // Compacts this folder
|
|
[in] DWORD dwReserved); // Reserved for future use
|
|
|
|
[local]
|
|
HRESULT GetFirstMessage( // Get the first message in a folder
|
|
[in] DWORD dwFlags, // MSGPROPS_xxx Flags
|
|
[in] DWORD dwMsgFlags, // MSG_xxx Flags to enumerate on, pass 0 for none
|
|
[in] MESSAGEID dwMsgIdFirst, // MessageId to start enumerating at, Use MESSAGEID_FIRST
|
|
[in,out] LPMESSAGEPROPS pProps, // When function returns S_OK, contains message properties
|
|
[out] LPHENUMSTORE phEnum); // Upon successful return, contains handle to enumeration
|
|
|
|
//;begin_internal
|
|
// Work Around: GetFirstMessage and LPMESSAGEPROPS are not remoting
|
|
// friendly. See the comment above GetMessagePropsRemote for a
|
|
// description of the problem and solution.
|
|
//;end_internal
|
|
[call_as(GetFirstMessage)]
|
|
HRESULT GetFirstMessageRemote( // Get the first message in a folder
|
|
[in] DWORD dwFlags, // MSGPROPS_xxx Flags
|
|
[in] DWORD dwMsgFlags, // MSG_xxx Flags to enumerate on, pass 0 for none
|
|
[in] MESSAGEID dwMsgIdFirst, // MessageId to start enumerating at, Use MESSAGEID_FIRST
|
|
[in,out] LPMESSAGEPROPS pProps, // When function returns S_OK, contains message properties
|
|
[out] LPHENUMSTORE phEnum); // Upon successful return, contains handle to enumeration
|
|
|
|
// GetNextMessage() return values:
|
|
// S_FALSE is returned if no more items are found.
|
|
[local]
|
|
HRESULT GetNextMessage( // Get the next message in the enumeration
|
|
[in] HENUMSTORE hEnum, // Handle to the enumeration received in GetFirstMessage
|
|
[in] DWORD dwFlags, // MSGPROPS_xxx Flags
|
|
[in,out] LPMESSAGEPROPS pProps); // When function returns S_OK, contains message properties
|
|
|
|
//;begin_internal
|
|
// Work Around: GetNextMessage and LPMESSAGEPROPS are not remoting
|
|
// friendly. See the comment above GetMessagePropsRemote for a
|
|
// description of the problem and solution.
|
|
//;end_internal
|
|
[call_as(GetNextMessage)]
|
|
HRESULT GetNextMessageRemote( // Get the next message in the enumeration
|
|
[in] HENUMSTORE hEnum, // Handle to the enumeration received in GetFirstMessage
|
|
[in] DWORD dwFlags, // MSGPROPS_xxx Flags
|
|
[in,out] LPMESSAGEPROPS pProps); // When function returns S_OK, contains message properties
|
|
|
|
HRESULT GetMessageClose(
|
|
[in] HENUMSTORE hEnum); // Handle to the enumeration received in GetFirstMessage
|
|
}
|
|
|
|
cpp_quote("#endif // __LPSTOREFOLDER_DEFINED")
|
|
|
|
cpp_quote("//+-------------------------------------------------------------------------")
|
|
cpp_quote("// Outlook Express Exported C API Functions")
|
|
cpp_quote("//--------------------------------------------------------------------------")
|
|
cpp_quote("#ifdef __cplusplus")
|
|
cpp_quote("extern \"C\" {")
|
|
cpp_quote("#endif")
|
|
cpp_quote("")
|
|
cpp_quote("//+-------------------------------------------------------------------------")
|
|
cpp_quote("// API Name Decoration")
|
|
cpp_quote("//--------------------------------------------------------------------------")
|
|
cpp_quote("#if !defined(_MSOEAPI_)")
|
|
cpp_quote("#define MSOEAPI DECLSPEC_IMPORT HRESULT WINAPI")
|
|
cpp_quote("#define MSOEAPI_(_type_) DECLSPEC_IMPORT _type_ WINAPI")
|
|
cpp_quote("#else")
|
|
cpp_quote("#define MSOEAPI HRESULT WINAPI")
|
|
cpp_quote("#define MSOEAPI_(_type_) _type_ WINAPI")
|
|
cpp_quote("#endif")
|
|
cpp_quote("")
|
|
cpp_quote("//+-------------------------------------------------------------------------")
|
|
cpp_quote("// Prototypes")
|
|
cpp_quote("//--------------------------------------------------------------------------")
|
|
cpp_quote("MSOEAPI CoStartOutlookExpress(")
|
|
cpp_quote(" /* IN */ DWORD dwFlags,")
|
|
cpp_quote(" /* IN */ LPCSTR pszCmdLine,")
|
|
cpp_quote(" /* IN */ INT nCmdShow);")
|
|
cpp_quote("")
|
|
cpp_quote("MSOEAPI CoCreateOutlookExpress(")
|
|
cpp_quote(" /* IN */ IUnknown *pUnkOuter,")
|
|
cpp_quote(" /* OUT */ IUnknown **ppUnknown);")
|
|
cpp_quote("")
|
|
cpp_quote("#ifdef __cplusplus")
|
|
cpp_quote("}")
|
|
cpp_quote("#endif")
|
|
|
|
//
|
|
// Windows Mail interfaces
|
|
//
|
|
cpp_quote("#if (_WIN32_OE >= 0x0700)")
|
|
|
|
[
|
|
object,
|
|
uuid(DECAED7F-2DA8-4074-B62A-DB6D8C82C385),
|
|
pointer_default(unique)
|
|
]
|
|
interface IStoreNamespace2 : IStoreNamespace
|
|
{
|
|
typedef IStoreNamespace2 *LPSTORENAMESPACE2;
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Methods
|
|
//----------------------------------------------------------------------
|
|
HRESULT GetMessageID( // Get the Message ID from a path
|
|
[in] LPCWSTR pszPath, // Path being queried
|
|
[out] LPSTOREFOLDERID pdwFolderId, // Folder ID of the path, if it was found in the database
|
|
[out] LPMESSAGEID pdwMessageId); // Message ID of the path, if it was found in the database
|
|
|
|
HRESULT GetParentId( // Get folder's parent folder id
|
|
[in] STOREFOLDERID dwFolderId, // child folder id
|
|
[out] LPSTOREFOLDERID pdwParentId); // parent folder id
|
|
|
|
HRESULT GetDirectoryW( // Get the location of the store (filepath)
|
|
[in,out,size_is(cchMaxPath)] LPWSTR pwszPath, // Buffer to put path of store into
|
|
[in] DWORD cchMaxPath); // in: byte count size of pszPath, out: char count size of pszPath
|
|
|
|
HRESULT CreateFolderW(
|
|
[in] STOREFOLDERID dwParentId, // Parent of the new folder, can use FOLDERID_ROOT
|
|
[in] LPCWSTR pwszName, // Name of new folder, must be less than MAX_FOLDER_NAME
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[out] LPSTOREFOLDERID pdwFolderId); // Handle to the new folder
|
|
|
|
HRESULT RenameFolderW(
|
|
[in] STOREFOLDERID dwFolderId, // Folder to rename
|
|
[in] DWORD dwReserved, // Reserved for future use
|
|
[in] LPCWSTR pwszNewName); // New folder name, must be less than MAX_FOLDER_NAME
|
|
}
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(5642F741-46B7-4A22-B496-F064E4C5F302),
|
|
pointer_default(unique)
|
|
]
|
|
interface IStoreFolder2 : IStoreFolder
|
|
{
|
|
typedef IStoreFolder2 *LPSTOREFOLDER2;
|
|
//+---------------------------------------------------------------------
|
|
// Methods
|
|
//----------------------------------------------------------------------
|
|
HRESULT GetMessagePath( // Get folder info for this folder
|
|
[in] MESSAGEID dwMessageId, // Message ID being queried for
|
|
[in,out,size_is(cchBufferSize)] LPWSTR pszPath, // Buffer in which to put the path of the message, if it exists
|
|
[in] DWORD cchBufferSize); // Size of szBuffer
|
|
}
|
|
|
|
cpp_quote("#endif // (_WIN32_OE >= 0x0700)")
|
|
|
|
cpp_quote("#endif // MSOEAPI_H")
|
|
|
|
|