Freigeben über


Benachrichtigungsdatenobjekt

Die Benachrichtigungsdaten werden als Objekt behandelt, das die IPrintAsyncNotifyDataObject-Schnittstelle verfügbar macht. Clients der Spooler-Benachrichtigungspipeline können ihr eigenes Datenschema definieren und jeden beliebigen Datentyp hin und her senden. Der Spooler fragt jedoch das Benachrichtigungsdatenobjekt für einen BYTE*-Zeiger, die Länge der Daten und den Benachrichtigungstyp ab. Der Benachrichtigungstyp ist eine GUID, wie in Benachrichtigungstypen beschrieben.

#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;
};

Der Benachrichtigungsabsender muss die Daten in einem IPrintAsyncNotifyDataObject-Objekt packen. Der Absender muss die IUnknown-Schnittstelle implementieren.

Der hörende Client ruft die Methode IPrintAsyncNotifyDataObject::AcquireData auf, um einen Zeiger auf die Benachrichtigungsdaten, die Größe der Benachrichtigungsdaten und den Benachrichtigungstyp abzurufen.

Wenn der Client mit den Daten fertig ist, muss er die IPrintAsyncNotifyDataObject::ReleaseData-Methode aufrufen. Die Clients der Spooler-Benachrichtigungspipeline müssen die IPrintAsyncNotifyDataObject-Schnittstelle so implementieren, dass das Objekt nicht freigegeben wird, wenn die IPrintAsyncNotifyDataObject::Release-Methode aufgerufen wird, bevor die IPrintAsyncNotifyDataObject::ReleaseData-Methode aufgerufen wird. Es wird empfohlen, dass ein Aufruf der IPrintAsyncNotifyDataObject::AcquireData-Methode die Referenzanzahl des Objekts erhöht und dass ein Aufruf der ReleaseData-Methode die Referenzanzahl des Objekts verringern soll.

Der Spooler definiert eine spezielle Benachrichtigungstyp-GUID mit dem Namen NOTIFICATION_RELEASE. Wenn der Spooler oder die Überwachungsanwendung ausfällt, meldet der Rundowncode das Ende des Kanals, indem die IPrintAsyncNotifyChannel::CloseChannel-Methode aufgerufen wird.

Ein Aufruf der IPrintAsyncNotifyDataObject::AcquireData-Methode für diese Benachrichtigung gibt zurück, dass der BYTE**-Parameter auf NULL, der ULONG*-Parameter auf 0 und der GUID*-Parameter auf NOTIFICATION_RELEASE festgelegt ist.