Freigeben über


Registrieren zum Empfangen von Benachrichtigungen

Lauschende Clients rufen die RegisterForPrintAsyncNotifications-Methode auf, um sich für den Empfang von Benachrichtigungen zu registrieren. Der Lauschclient kann eine Anwendung sein oder innerhalb des Spoolers ausgeführt werden. Winspool.drv macht diese Funktionalität unabhängig davon verfügbar, wo sie geladen wird.

Spoolss.lib macht diese Funktionalität verfügbar, damit Portmonitore sich für Benachrichtigungen registrieren können. Komponenten, die innerhalb des Spoolers ausgeführt werden und mit Spoolss.lib verknüpft sind, können RegisterForPrintAsyncNotifications aufrufen. Die folgende Prozedur enthält die Informationen, die bei einem Aufruf dieser Funktion übergeben werden müssen. Der erste Schritt der Prozedur gilt für den ersten Parameter, der zweite Schritt gilt für den zweiten Parameter usw.

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

Geben Sie Folgendes an, um sich für Benachrichtigungen zu registrieren:

  1. Ein lokaler/Remotedrucker- oder Servername.

  2. Der Typ der Benachrichtigung, an der der Listener interessiert ist.

  3. Der Benutzerfilter, der den Benutzer angibt, von dem der Client Benachrichtigungen erhalten möchte, entweder derselbe Benutzer wie der Benachrichtigungssender oder alle Benutzer.

  4. Der Unterhaltungsstilfilter. Der Client kann entweder eine unidirektionale oder bidirektionale Kommunikation angeben.

  5. Die IPrintAsyncNotifyCallback-Schnittstelle , die aufgerufen werden soll, wenn eine Benachrichtigung vom anderen Ende des Kanals zurückgegeben wird. Dieser Parameter darf nicht NULL sein.

Wenn diese Funktion zurückgibt, verweist der sechste Parameter (vom Typ HANDLE*) auf ein Registrierungshandle. Das Registrierungshandle ist eine undurchsichtige Struktur, die der Client empfängt. Die Registrierung ist der Benutzeridentität des Registrierungsaufrufs des Threads zugeordnet. Der Spooler filtert lauschende Clients basierend auf dem Sitzungsfilter des Kanals und der Registrierungssitzung des Clients, zusätzlich zum Filter der Clientsitzung.

Um den Spooler darüber zu benachrichtigen, dass der lauschende Client keine Benachrichtigungen mehr empfangen soll, muss der Client dieses Handle verwenden, wenn er UnRegisterForPrintAsyncNotifications aufruft. Für die unidirektionale Kommunikation werden alle ausstehenden Benachrichtigungen auf der Serverseite verworfen. Wenn bei bidirektionaler Kommunikation offene bidirektionale Kanäle vorhanden sind, wird die Kommunikation fortgesetzt, bis sie geschlossen werden.

HRESULT
 UnRegisterForPrintAsyncNotifications(
    IN HANDLE
    );