Inizializzare un monitoraggio di stampa
Quando il spooler chiama LoadLibrary per caricare una DLL di monitoraggio di stampa, il sistema chiama immediatamente la funzione DllEntryPoint della DLL. In genere è consigliabile che la funzione del punto di ingresso chiami DisableThreadLibraryCalls, quindi la DLL non viene notificata inutilmente quando i thread vengono creati ed eliminati.
Ogni DLL esporta una funzione di inizializzazione, che il spooler chiama dopo aver chiamato LoadLibrary. Dll di monitoraggio del linguaggio e DLL del server di monitoraggio delle porte esportano una funzione InitializePrintMonitor2 . Le DLL dell'interfaccia utente di monitoraggio della porta esportano una funzione InitializePrintMonitorUI .
Queste due funzioni di inizializzazione sono responsabili della restituzione dei puntatori al resto delle funzioni definite dai monitoraggi di stampa, quindi lo spooler può chiamarli. Le funzioni di inizializzazione possono anche eseguire operazioni di inizializzazione in fase di caricamento. La funzione InitializePrintMonitor2 del monitoraggio restituisce un handle di istanza di monitoraggio. Il monitoraggio deve allocare memoria locale per archiviare informazioni specifiche dell'istanza e usare l'handle di monitoraggio come identificatore per la memoria allocata.
Al primo avvio del spooler, carica tutte le DLL di monitoraggio installate. Dopo aver chiamato tutte le funzioni di inizializzazione del monitoraggio, lo spooler chiama la funzione EnumPorts di ogni monitor porta, che enumera le porte supportate dal monitoraggio. Un monitoraggio supporta una porta se la porta è stata aggiunta al database del monitoraggio, come descritto in Aggiunta di una porta. Ogni porta supportata viene quindi aperta, come descritto in Apertura e chiusura di una porta.