Condividi tramite


Registrazione per ricevere notifiche

I client in ascolto chiamano il metodo RegisterForPrintAsyncNotifications per eseguire la registrazione per la ricezione di notifiche. Il client di ascolto può essere un'applicazione o può essere eseguito all'interno dello spooler. Winspool.drv espone questa funzionalità indipendentemente dalla posizione in cui è 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 che si collegano 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:

  1. Una stampante locale/remota o un nome del server.

  2. Tipo di notifica a cui è interessato il listener.

  3. 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.

  4. Filtro dello stile della conversazione. Il client può specificare la comunicazione unidirezionale o bidirezionale.

  5. 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'identificatore 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 della sessione del canale e alla sessione di registrazione del client, oltre che al filtro della sessione del 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 la comunicazione bidirezionale, se sono presenti canali bidirezionali aperti, la comunicazione continua fino a quando non vengono chiuse.

HRESULT
 UnRegisterForPrintAsyncNotifications(
    IN HANDLE
    );