Objeto de datos de notificación
Los datos de notificación se controlan como un objeto que expone la interfaz IPrintAsyncNotifyDataObject . Los clientes de la canalización de notificaciones del administrador de colas pueden definir su propio esquema de datos y pueden enviar cualquier tipo de datos hacia atrás y hacia adelante. Sin embargo, el administrador de trabajos de cola consulta el objeto de datos de notificación para un puntero BYTE*, la longitud de los datos y el tipo de notificación. El tipo de notificación es un GUID, como se describe en Tipos de notificación.
#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;
};
El remitente de la notificación debe empaquetar los datos en un objeto IPrintAsyncNotifyDataObject . El remitente debe implementar la interfaz IUnknown .
El cliente de escucha llama al método IPrintAsyncNotifyDataObject::AcquireData para obtener un puntero sin procesar a los datos de notificación, el tamaño de los datos de notificación y el tipo de notificación.
Cuando el cliente de escucha termine con los datos, debe llamar al método IPrintAsyncNotifyDataObject::ReleaseData . Los clientes de la canalización de notificación de cola deben implementar la interfaz IPrintAsyncNotifyDataObject de forma que, si se llama al método IPrintAsyncNotifyDataObject::Release antes de llamar al método IPrintAsyncNotifyDataObject::ReleaseData , el objeto no se libera. Se recomienda que una llamada al método IPrintAsyncNotifyDataObject::AcquireData incremente el recuento de referencias del objeto y que una llamada al método ReleaseData debe disminuir el recuento de referencias del objeto.
El administrador de trabajos define un GUID de tipo de notificación especial denominado NOTIFICATION_RELEASE. Cuando el administrador de colas o la aplicación de escucha mueren, el código de des rundown anuncia el final "todavía activo" del canal llamando al método IPrintAsyncNotifyChannel::CloseChannel .
Una llamada al método IPrintAsyncNotifyDataObject::AcquireData en esta notificación devuelve con el parámetro BYTE** establecido en NULL, el parámetro ULONG* establecido en 0 y el parámetro GUID* establecido en NOTIFICATION_RELEASE.