IMSLogon::Advise
Applies to: Office 2010 | Outlook 2010 | Visual Studio
Registers an object with a message store provider for notifications about changes in the message store. The message store will then send notifications about changes to the registered object.
HRESULT Advise(
ULONG cbEntryID,
LPENTRYID lpEntryID,
ULONG ulEventMask,
LPMAPIADVISESINK lpAdviseSink,
ULONG FAR * lpulConnection
);
Parameters
cbEntryID
[in] The size, in bytes, of the entry identifier pointed to by the lpEntryID parameter.lpEntryID
[in] A pointer to the entry identifier of the object about which notifications should be generated. This object can be a folder, a message, or any other object in the message store. Alternatively, if MAPI sets the cbEntryID parameter to 0 and passes null for lpEntryID, the advise sink provides notifications about changes to the entire message store.ulEventMask
[in] An event mask of the types of notification events occurring for the object about which MAPI will generate notifications. The mask filters specific cases. Each event type has a structure associated with it that contains additional information about the event. The following table lists the possible event types along with their corresponding structures.Notification event type
Corresponding structure
fnevCriticalError
fnevNewMail
fnevObjectCreated
fnevObjectDeleted
fnevObjectModified
fnevObjectCopied
fnevObjectMoved
fnevSearchComplete
fnevStatusObjectModified
lpAdviseSink
[in] A pointer to an advise sink object to be called when an event occurs for the session object about which notification has been requested. This advise sink object must already exist.lpulConnection
[out] A pointer to a variable that upon a successful return holds the connection number for the notification registration. The connection number must be nonzero.
Return Value
S_OK
The call succeeded and has returned the expected value or values.MAPI_E_NO_SUPPORT
The operation is not supported by MAPI or by one or more service providers.
Remarks
Message store providers implement the IMSLogon::Advise method to register an object for notification callbacks. Whenever a change occurs to the indicated object, the provider checks to see what event mask bit was set in the ulEventMask parameter and, therefore, what type of change occurred. If a bit is set, the provider calls the IMAPIAdviseSink::OnNotify method for the advise sink object indicated by the lpAdviseSink parameter to report the event. Data passed in the notification structure to the OnNotify routine describes the event.
The call to OnNotify can occur during the call that changes the object, or at any later time. On systems that support multiple threads of execution, the call to OnNotify can occur on any thread. To safely handle a call to OnNotify that might happen at an inopportune time, a client application should use the HrThisThreadAdviseSink function.
To provide notifications, the message store provider that implements Advise needs to keep a copy of the pointer to the lpAdviseSink advise sink object; to do so, the provider calls the IUnknown::AddRef method for the advise sink to maintain its object pointer until notification registration is canceled with a call to the IMSLogon::Unadvise method. The Advise implementation should assign a connection number to the notification registration and call AddRef on this connection number before returning it in the lpulConnection parameter. Service providers can release the advise sink object before the registration is canceled, but they must not release the connection number until Unadvise has been called.
After a call to Advise has succeeded and before Unadvise has been called, providers must be prepared for the advise sink object to be released. Therefore, a provider should release its advise sink object after Advise returns, unless it has a specific long-term use for it.
For more information about the notification process, see Event Notification in MAPI.