Interaction avec le spouleur MAPI
S’applique à : Outlook 2013 | Outlook 2016
Les méthodes de l’interface IXPLogon : IUnknown sont utilisées par le spouleur MAPI lors de l’appel du fournisseur de transport. Il devrait être possible pour la plupart des types de fournisseurs de transport d’implémenter la plupart de ces méthodes afin qu’ils reviennent rapidement. Cela est souhaitable, car si une méthode prend beaucoup de temps à retourner, elle doit être interrompue avec des appels au spouleur MAPI pour libérer le processeur pour d’autres tâches.
Le spouleur MAPI effectue son travail et effectue ses appels aux fournisseurs de transport lorsque les applications au premier plan sont inactives. Après avoir éventuellement affiché les boîtes de dialogue lorsque le fournisseur de transport est connecté pour la première fois (régis par les indicateurs passés de MAPI au fournisseur de transport), les fournisseurs de transport fonctionnent en arrière-plan, sauf s’ils sont appelés par le client pour vider les files d’attente d’envoi et de réception. Le vidage des files d’attente est le seul moment où un fournisseur de transport n’a pas besoin de libérer le processeur, puis uniquement si l’utilisateur est informé qu’une action potentiellement longue est en cours. Le spouleur MAPI demande généralement à un fournisseur de transport de vider ses files d’attente en réponse à une action de l’utilisateur, de sorte que le fournisseur de transport n’a généralement rien à faire pour s’assurer que l’utilisateur est informé.
Un fournisseur de transport peut décider indépendamment de vider une file d’attente et d’utiliser les bits STATUS_INBOUND_FLUSH et STATUS_OUTBOUND_FLUSH dans la propriété PR_STATUS_CODE (PidTagStatusCode) de sa ligne status pour informer le spouleur MAPI qu’il souhaite attirer l’attention afin qu’il puisse effectuer le travail. La ligne status est mise à jour à l’aide de la méthode IMAPISupport ::ModifyStatusRow. Dans ce cas, le fournisseur de transport doit probablement afficher un indicateur de progression ou une autre interface pour informer l’utilisateur qu’une action longue se produit.
Étant donné que l’activité réseau prend souvent plus de 0,2 seconde, les fournisseurs de transport doivent, dans la mesure du possible, utiliser des demandes réseau asynchrones. Cela leur permet de lancer une demande, de libérer le processeur en rappelant le spouleur MAPI et, lorsque le spouleur MAPI leur donne à nouveau le contrôle, de case activée pour voir si leur demande réseau est terminée. Si ce n’est pas encore fait, ils libèrent à nouveau le processeur en rappelant le spouleur MAPI avec la méthode IMAPISupport ::SpoolerYield .
Pendant le traitement des messages, entre IXPLogon ::SubmitMessage et IXPLogon ::EndMessage et pendant IXPLogon ::StartMessage, le fournisseur de transport effectue généralement de nombreux appels sur les objets qui lui sont exposés par le spouleur MAPI. Dans le cadre de sa gestion de ces objets, le spouleur MAPI aide le fournisseur de transport à se comporter de manière appropriée en tant que processus en arrière-plan en cliquant sur son propre compte, le cas échéant. Un fournisseur de transport nécessitant un traitement critique dans le temps peut déclarer une section critique au spouleur MAPI à l’aide de la méthode d’objet de prise en charge IMAPISupport ::SpoolerNotify . Dans ce cas, le processeur est libéré uniquement sur les appels SpoolerYield explicites par le fournisseur de transport jusqu’à ce que le fournisseur de transport termine le traitement de la section critique avec un autre appel à SpoolerNotify.
Remarque
Ce n’est pas la même chose qu’une section critique Win32. Cette opération ne doit être effectuée que lorsque le fournisseur de transport a besoin d’un contrôle en temps réel de ressources externes, telles que la lecture des données entrantes à partir d’une ligne de télécopie. Étant donné que cela augmente la priorité du processus de spouleur MAPI et peut empêcher la station de travail de répondre pendant la durée de l’opération, il est judicieux d’informer l’utilisateur qu’une action potentiellement longue est en cours et de fournir un indicateur de progression si possible.