Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os dados de notificação são tratados como um objeto que expõe a interface IPrintAsyncNotifyDataObject . Os clientes do pipe de notificação do spooler podem definir o seu próprio esquema de dados e enviar qualquer tipo de dados bidirecionalmente. No entanto, o spooler consulta o objeto de dados de notificação para obter um ponteiro BYTE*, o comprimento dos dados e o tipo de notificação. O tipo de notificação é um GUID, conforme descrito em Tipos de notificação.
#define INTERFACE IPrintAsyncNotifyDataObject
DECLARE_INTERFACE_(IPrintAsyncNotifyDataObject, IUnknown)
{
STDMETHOD(QueryInterface)(
THIS_
REFIID riid,
void** ppvObj
) PURE;
STDMETHOD_(ULONG, AddRef)(
THIS
) PURE;
STDMETHOD_(ULONG, Release)(
THIS
) PURE;
STDMETHOD(AcquireData)(
THIS_
OUT BYTE**,
OUT ULONG*,
OUT PrintAsyncNotificationType**
) PURE;
STDMETHOD(ReleaseData)(
THIS
) PURE;
};
O remetente da notificação deve empacotar os dados em um objeto IPrintAsyncNotifyDataObject . O remetente deve implementar a interface IUnknown .
O cliente de escuta chama o método IPrintAsyncNotifyDataObject::AcquireData para obter um ponteiro direto para os dados de notificação, o tamanho dos dados de notificação e o tipo de notificação.
Quando o cliente de escuta terminar com os dados, ele deve chamar o método IPrintAsyncNotifyDataObject::ReleaseData . Os clientes do pipe de notificação do spooler devem implementar a interface IPrintAsyncNotifyDataObject de tal forma que, se o método IPrintAsyncNotifyDataObject::Release for chamado antes do método IPrintAsyncNotifyDataObject::ReleaseData ser chamado, o objeto não será liberado. É recomendável que uma chamada para o método IPrintAsyncNotifyDataObject::AcquireData aumente a contagem de referência do objeto e que uma chamada para o método ReleaseData diminua a contagem de referência do objeto.
O spooler define um GUID de tipo de notificação especial chamado NOTIFICATION_RELEASE. Quando o spooler ou o aplicativo de escuta morre, o código de resumo anuncia a extremidade "ainda viva" do canal chamando o método IPrintAsyncNotifyChannel::CloseChannel .
Uma chamada para o método IPrintAsyncNotifyDataObject::AcquireData contra essa notificação retorna com o parâmetro BYTE** definido como NULL, o parâmetro ULONG* definido como 0 e o parâmetro GUID* definido como NOTIFICATION_RELEASE.