Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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