Partager via


Initialiser un moniteur d’impression

Lorsque le spouleur appelle LoadLibrary pour charger une DLL de moniteur d’impression, le système appelle immédiatement la fonction DllEntryPoint de la DLL. Il est généralement judicieux pour la fonction de point d’entrée d’appeler DisableThreadLibraryCalls, de sorte que la DLL n’est pas inutilement avertie lorsque des threads sont créés et supprimés.

Chaque DLL exporte une fonction d’initialisation, que le spouleur appelle après avoir appelé LoadLibrary. Les DLL du moniteur de langage et les DLL de serveur de surveillance de port exportent une fonction InitializePrintMonitor2 . Les DLL d’interface utilisateur du moniteur de port exportent une fonction InitializePrintMonitorUI .

Ces deux fonctions d’initialisation sont chargées de renvoyer des pointeurs vers le reste des fonctions définies par les moniteurs d’impression, de sorte que le spouleur peut les appeler. Les fonctions d’initialisation peuvent également effectuer des opérations d’initialisation au moment du chargement. La fonction InitializePrintMonitor2 du moniteur retourne un instance de contrôle. Le moniteur doit allouer de la mémoire locale pour stocker des informations spécifiques à instance et utiliser le handle du moniteur comme identificateur de la mémoire allouée.

Lorsque le spouleur est démarré pour la première fois, il charge toutes les DLL du moniteur qui ont été installées. Après avoir appelé toutes les fonctions d’initialisation du moniteur, le spouleur appelle la fonction EnumPorts de chaque moniteur de port, qui énumère les ports pris en charge par le moniteur. (Un moniteur prend en charge un port si le port a été ajouté à la base de données du moniteur, comme décrit dans Ajout d’un port.) Chaque port pris en charge est ensuite ouvert, comme décrit dans Ouverture et fermeture d’un port.