Compartilhar via


Registrando-se para receber notificações

Os clientes ouvintes chamam o método RegisterForPrintAsyncNotifications para se registrarem para receber notificações. O cliente ouvinte pode ser um aplicativo ou pode ser executado dentro do spooler. Winspool.drv expõe essa funcionalidade independentemente de onde ela está carregada.

Spoolss.lib expõe essa funcionalidade para que os monitores de porta possam se registrar para notificações. Os componentes executados dentro do spooler e que vinculam ao Spoolss.lib podem chamar RegisterForPrintAsyncNotifications. O procedimento a seguir detalha as informações que devem ser passadas em uma chamada para essa função. A primeira etapa do procedimento se aplica ao primeiro parâmetro, a segunda etapa se aplica ao segundo parâmetro e assim por diante.

HRESULT
 RegisterForPrintAsyncNotifications(
    IN LPCWSTR,
    IN PrintAsyncNotificationType*,
    IN PrintAsyncNotifyUserFilter,
    IN PrintAsyncNotifyConversationStyle,
    IN IPrintAsyncNotifyCallback*,
    OUT HANDLE*
    );

Para se registrar para notificações, especifique o seguinte:

  1. Um nome de impressora ou servidor local/remoto.

  2. O tipo de notificação em que o ouvinte está interessado.

  3. O filtro de usuário, que indica o usuário do qual o cliente está interessado em receber notificações, seja o mesmo usuário que o remetente de notificação ou todos os usuários.

  4. O filtro de estilo de conversa. O cliente pode especificar a comunicação unidirecional ou bidirecional.

  5. A interface IPrintAsyncNotifyCallback a ser chamada quando uma notificação retorna da outra extremidade do canal. Esse parâmetro não pode ser NULL.

Quando essa função retorna, o sexto parâmetro (do tipo HANDLE*) aponta para um identificador de registro. O identificador de registro é uma estrutura opaca que o cliente recebe. O registro está associado à identidade do usuário do thread que está fazendo a chamada de registro. O spooler filtra clientes ouvintes com base no filtro de sessão do canal e na sessão de registro do cliente, além do filtro da sessão do cliente.

Para notificar o spooler de que o cliente ouvinte não deve mais receber notificações, o cliente deve usar esse identificador quando chamar UnRegisterForPrintAsyncNotifications. Para comunicação unidirecional, todas as notificações pendentes no lado do servidor são descartadas. Para comunicação bidirecional, se houver canais bidirecionais abertos, a comunicação continuará até que eles sejam fechados.

HRESULT
 UnRegisterForPrintAsyncNotifications(
    IN HANDLE
    );