IO_SESSION_NOTIFICATION_FUNCTION Rückruffunktion (wdm.h)

Der IO_SESSION_NOTIFICATION_FUNCTION Funktionstyp definiert eine Rückrufroutine, über die ein Treiber Benachrichtigungen über Änderungen im Status der Benutzersitzungen empfängt, an denen der Treiber interessiert ist.

Syntax

IO_SESSION_NOTIFICATION_FUNCTION IoSessionNotificationFunction;

NTSTATUS IoSessionNotificationFunction(
  [in] PVOID SessionObject,
  [in] PVOID IoObject,
  [in] ULONG Event,
  [in] PVOID Context,
  [in] PVOID NotificationPayload,
  [in] ULONG PayloadLength
)
{...}

Parameter

[in] SessionObject

Zeiger auf ein undurchsichtiges Systemobjekt, das Informationen zur Benutzersitzung enthält. Der Treiber kann diesen Zeigerwert an die IoGetContainerInformation-Routine als ContainerObject-Parameterwert übergeben.

[in] IoObject

Zeiger auf ein I/O-Objekt, das dem Treiber gehört. Dieser Parameter ist der I/O-Objektzeiger, den der Treiber an die IoRegisterContainerNotification-Routine übergeben hat, wenn der Treiber zuvor registriert wurde, um Benachrichtigungen über Sitzungsereignisse zu empfangen. Der Parameter "NotificationInformation" der IoRegisterContainerNotification-Routine verweist auf eine IO_SESSION_STATE_NOTIFICATION Struktur, deren IoObject-Element auf das I/O-Objekt verweist.

[in] Event

Eine IO_SESSION_EVENT Enumerationskonstante, die angibt, welches Sitzungsereignis den Benachrichtigungsrückruf verursacht hat.

[in] Context

Der Kontextwert, den der Treiber zuvor der IoRegisterContainerNotification-Routine bereitgestellt hat, wenn der Treiber registriert wurde, um Benachrichtigungen über Sitzungsereignisse zu erhalten. Im IoRegisterContainerNotification-Aufruf hat der Treiber einen Zeiger auf eine IO_SESSION_STATE_NOTIFICATION Struktur bereitgestellt, deren Kontextelement den Kontextwert enthält.

[in] NotificationPayload

Zeiger auf einen Nutzlastpuffer, der eine IO_SESSION_CONNECT_INFO Struktur enthält.

[in] PayloadLength

Die Größe des Puffers in Bytes, auf die durch NotificationPayload verwiesen wird. Die Puffergröße muss niemals den Konstantenwert IO_SESSION_MAX_PAYLOAD_SIZE überschreiten, der in der Wdm.h-Headerdatei definiert ist.

Rückgabewert

Wenn die Routine erfolgreich ist, muss STATUS_SUCCESS zurückgegeben werden. Andernfalls muss eine der fehlerstatuswerte zurückgegeben werden, die in der Ntstatus.h-Headerdatei definiert sind.

Bemerkungen

Ein Kernelmodustreiber implementiert diese Routine. Der I/O-Manager ruft diese Routine auf, um den Treiber von Sitzungsereignissen zu benachrichtigen.

Um Benachrichtigungen über Sitzungsereignisse zu erhalten, ruft ein Treiber die IoRegisterContainerNotification-Routine auf und legt den CallbackFunction-Parameter dieser Routine fest, um auf die IO_SESSION_NOTIFICATION_FUNCTION Routine des Treibers zu verweisen. Das I/O-Objekt, das der Treiber an IoRegisterContainerNotification übergibt, bestimmt, ob der Treiber Benachrichtigungen über Ereignisse in einer bestimmten Benutzersitzung oder von Ereignissen in allen Sitzungen empfängt. Weitere Informationen finden Sie unter IO_SESSION_STATE_NOTIFICATION.

Beispiele

Um eine I/O-Sitzungsbenachrichtigungsroutine zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückrufroutine identifiziert. Windows stellt eine Reihe von Rückruffunktionstypen für Treiber bereit. Das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen hilft der Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Wenn Sie beispielsweise eine I/O-Sitzungsbenachrichtigungsroutine definieren möchten, die benannt MyIoSessionNotificationist, verwenden Sie den IO_SESSION_NOTIFICATION_FUNCTION Typ, wie in diesem Codebeispiel gezeigt:

IO_SESSION_NOTIFICATION_FUNCTION MyIoSessionNotification;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

_Use_decl_annotations_
NTSTATUS
  MyIoSessionNotification(
    PVOID  SessionObject,
    PVOID  IoObject,
    ULONG  Event,
    PVOID  Context,
    PVOID  NotificationPayload,
    ULONG  PayloadLength
    )
  {
      // Function body
  }

Der IO_SESSION_NOTIFICATION_FUNCTION Funktionstyp wird in der Wdm.h-Headerdatei definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzufügen. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen, die auf den Funktionstyp IO_SESSION_NOTIFICATION_FUNCTION in der Kopfzeilendatei angewendet werden, verwendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für WDM-Treiber. Informationen zu Use_decl_annotations finden Sie unter Annotating Function Behavior.

Anforderungen

   
Unterstützte Mindestversion (Client) Unterstützt in Windows 7- und höher-Versionen des Windows-Betriebssystems.
Zielplattform Power BI Desktop
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
IRQL Bei IRQL <= APC_LEVEL aufgerufen.

Weitere Informationen

IO_SESSION_CONNECT_INFO

IO_SESSION_EVENT

IO_SESSION_STATE_NOTIFICATION

IoGetContainerInformation

IoRegisterContainerNotification