Freigeben über


IoRegisterContainerNotification-Funktion (wdm.h)

Die IoRegisterContainerNotification Routine registriert einen Kernelmodustreiber, um Benachrichtigungen über eine bestimmte Ereignisklasse zu empfangen.

Syntax

NTSTATUS
IoRegisterContainerNotification(
    _In_ IO_CONTAINER_NOTIFICATION_CLASS NotificationClass,
    _In_ PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction,
    _In_reads_bytes_opt_(NotificationInformationLength) PVOID NotificationInformation,
    _In_ ULONG NotificationInformationLength,
    _Out_ PVOID * CallbackRegistration
    );

Parameter

[in] NotificationClass

Gibt die Ereignisklasse an, für die der Aufrufer (Treiber) Benachrichtigungen anfordert. Legen Sie diesen Parameter auf den folgenden IO_CONTAINER_NOTIFICATION_CLASS Enumerationswert fest:

  • IoSessionStateNotification-

Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

[in] CallbackFunction

Ein Zeiger auf eine Rückruffunktion, die vom Aufrufer (Treiber) implementiert wird. Der E/A-Manager ruft diese Funktion auf, um den Aufrufer zu benachrichtigen, wenn ein Ereignis der klasse auftritt, die durch NotificationClass angegeben wird. Bei NotificationClass = IoSessionStateNotificationist dieser Parameter ein Zeiger auf eine vom Aufrufer bereitgestellte IO_SESSION_NOTIFICATION_FUNCTION-Funktion. Der Aufrufer sollte diesen Funktionszeiger jedoch umwandeln, um PIO_CONTAINER_NOTIFICATION_FUNCTION einzugeben, um dem Parametertyp zu entsprechen. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

[in, optional] NotificationInformation

Ein Zeiger auf einen vom Aufrufer zugewiesenen Puffer, der die Benachrichtigungsinformationsstruktur für ein Ereignis der Klasse enthält, die durch NotificationClassangegeben wird. Für NotificationClass = IoSessionStateNotificationverweist NotificationInformation auf eine IO_SESSION_STATE_NOTIFICATION Struktur. Der Aufrufer muss diese Struktur ausfüllen, bevor IoRegisterContainerNotificationaufgerufen wird. Während dieses Aufrufs kopiert IoRegisterContainerNotification die Daten aus dieser Struktur, und der E/A-Manager greift nicht auf die Kopie der Treiberstruktur zu, nachdem der Aufruf zurückgegeben wurde.

[in] NotificationInformationLength

Die Größe der Benachrichtigungsinformationsstruktur in Bytes, die im Puffer enthalten ist, auf die durch NotificationInformationverwiesen wird. Legen Sie für NotificationClass = IoSessionStateNotificationdiesen Parameter auf Größe(IO_SESSION_STATE_NOTIFICATION) fest.

[out] CallbackRegistration

Ein Zeiger auf einen Speicherort, in den diese Routine die Adresse eines Containerbenachrichtigungsregistrierungsobjekts schreibt. Dieses Objekt ist ein undurchsichtiges Systemobjekt, in dem der E/A-Manager Informationen zur Containerbenachrichtigungsregistrierung des Anrufers speichert. Wenn Benachrichtigungen nicht mehr erforderlich sind, bricht der Aufrufer die Registrierung ab, indem dieser Objektzeiger an die IoUnregisterContainerNotification Routine übergeben wird.

Rückgabewert

IoRegisterContainerNotification gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich ist. Mögliche Fehlerrückgabewerte sind:

Rückgabecode Beschreibung
STATUS_INVALID_PARAMETER_1 Der Parameter NotificationClass- ist keine gültige IO_CONTAINER_NOTIFICATION_CLASS Enumerationskonstante.
STATUS_INVALID_PARAMETER_3 Die Informationen in der Struktur, auf die durch NotificationInformation verwiesen wird, sind falsch.
STATUS_INVALID_PARAMETER_4 Der Parameter NotificationInformationLength- entspricht nicht der Größe der Benachrichtigungsinformationsstruktur, die für die Verwendung mit dem angegebenen NotificationClass Parameterwert erforderlich ist.
STATUS_ALREADY_COMMITTED Der Treiber ist bereits registriert, um NotificationClass Benachrichtigungen über Ereignisse zu empfangen, die dem angegebenen E/A-Objekt zugeordnet sind.
STATUS_INSUFFICIENT_RESOURCES Das Betriebssystem verfügt über unzureichende Ressourcen zum Erstellen der angeforderten Registrierung.

Bemerkungen

Diese Routine kann potenziell Benachrichtigungen über Ereignisse in einer Vielzahl von Ereignisklassen unterstützen. In Windows 7 unterstützt diese Routine nur IoSessionStateNotification Benachrichtigungen, die einen Kernelmodustreiber über Änderungen am Status von Benutzersitzungen benachrichtigen, an denen der Treiber interessiert ist. Für Benutzermodusanwendungen füllt die WTSRegisterSessionNotification Funktion eine ähnliche Rolle aus.

Der Funktionszeigertyp für den parameter CallbackFunction ist wie folgt definiert:

typedef NTSTATUS
  (*PIO_CONTAINER_NOTIFICATION_FUNCTION)(
    );

Der Aufrufer sollte den Rückruffunktionspunkt auf diesen Typ umwandeln, um dem CallbackFunction Parametertyp zu entsprechen. IoRegisterContainerNotification bestimmt den tatsächlichen Typ des Rückruffunktionzeigers aus dem parameter NotificationClass. Für NotificationClass = IoSessionStateNotificationverweist CallbackFunction- auf eine IO_SESSION_NOTIFICATION_FUNCTION-Funktion.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows 7 und höheren Versionen des Windows-Betriebssystems.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= APC_LEVEL

Siehe auch

IO_CONTAINER_NOTIFICATION_CLASS

IO_SESSION_NOTIFICATION_FUNCTION

IO_SESSION_STATE_NOTIFICATION

IoUnregisterContainerNotification-

WTSRegisterSessionNotification