Registrazione per ricevere notifiche
I client in ascolto chiamano il metodo RegisterForPrintAsyncNotifications per eseguire la registrazione per la ricezione delle notifiche. Il client in ascolto può essere un'applicazione o può essere eseguito all'interno dello spooler. Winspool.drv espone questa funzionalità indipendentemente dalla posizione in cui viene caricata.
Spoolss.lib espone questa funzionalità in modo che i monitoraggi delle porte possano registrarsi per le notifiche. I componenti eseguiti all'interno dello spooler e il collegamento a Spoolss.lib possono chiamare RegisterForPrintAsyncNotifications. La procedura seguente illustra in dettaglio le informazioni che devono essere passate in una chiamata a questa funzione. Il primo passaggio della procedura si applica al primo parametro, il secondo passaggio si applica al secondo parametro e così via.
HRESULT
RegisterForPrintAsyncNotifications(
IN LPCWSTR,
IN PrintAsyncNotificationType*,
IN PrintAsyncNotifyUserFilter,
IN PrintAsyncNotifyConversationStyle,
IN IPrintAsyncNotifyCallback*,
OUT HANDLE*
);
Per eseguire la registrazione per le notifiche, specificare quanto segue:
Nome locale/remoto della stampante o del server.
Tipo di notifica a cui è interessato il listener.
Filtro utente, che indica l'utente da cui il client è interessato a ricevere notifiche, lo stesso utente del mittente della notifica o tutti gli utenti.
Filtro dello stile della conversazione. Il client può specificare una comunicazione unidirezionale o bidirezionale.
Interfaccia IPrintAsyncNotifyCallback da chiamare quando viene restituita una notifica dall'altra estremità del canale. Questo parametro non può essere NULL.
Quando questa funzione viene restituita, il sesto parametro (di tipo HANDLE*) punta a un handle di registrazione. L'handle di registrazione è una struttura opaca ricevuta dal client. La registrazione è associata all'identità utente del thread che effettua la chiamata di registrazione. Lo spooler filtra i client in ascolto in base al filtro di sessione del canale e alla sessione di registrazione del client, oltre al filtro della sessione client.
Per notificare allo spooler che il client in ascolto non deve più ricevere notifiche, il client deve usare questo handle quando chiama UnRegisterForPrintAsyncNotifications. Per le comunicazioni unidirezionali, tutte le notifiche in sospeso sul lato server vengono ignorate. Per le comunicazioni bidirezionali, se sono presenti canali bidirezionali aperti, la comunicazione continua fino a quando non vengono chiuse.
HRESULT
UnRegisterForPrintAsyncNotifications(
IN HANDLE
);