Implementing Status Objects for Remote Transports

You should derive a C++ class from the IMAPIStatus class to implement this interface. Because IMAPIStatus inherits from the IMAPIProp and IUnknown classes, there are some methods from those interfaces that need to be implemented as well. Methods from those interfaces that are not listed here should be implemented as stubs which return MAPI_E_NO_SUPPORT.

Remote transport providers must implement the following IMAPIStatus methods:

IMAPIStatus::ChangePassword

IMAPIStatus::FlushQueues

IMAPIStatus::SettingsDialog

IMAPIStatus::ValidateState

Since remote transport providers, like other MAPI service providers, use the MAPI status table, they must implement some methods from the IMAPIProp interface to support client requests for property information. These methods are:

IMAPIProp::GetLastError

IMAPIProp::SaveChanges

IMAPIProp::GetProps

IMAPIProp::GetPropList

The only method from the IUnknown interface that is special for MAPI is the QueryInterface method.

The semantics of the QueryInterface method that a remote transport provider's implementation should follow are described in the Platform SDK. If the interface identifier passed in is one of IID_IMAPIStatus, IID_IMAPIProp, or IID_IUnknown, then a pointer to the status object should be passed back to the caller in the parameter provided for that purpose, and your status object's reference count must be incremented.

If the interface identifier passed in is IID_IMAPIFolder, then your implementation should return a pointer to the folder that contains the available message headers and increment the reference count for that folder. If no folder is present, one should be created and then returned.

If the interface identifier is anything else, QueryInterface should return MAPI_E_INTERFACE_NOT_SUPPORTED.