Freigeben über


IoUnregisterPlugPlayNotificationEx-Funktion (wdm.h)

Die IoUnregisterPlugPlayNotificationEx Routine bricht die Registrierung der Rückrufroutine eines Treibers für Benachrichtigungen über Plug and Play -Ereignisse (PnP) ab.

Syntax

NTSTATUS IoUnregisterPlugPlayNotificationEx(
  [in] PVOID NotificationEntry
);

Parameter

[in] NotificationEntry

Ein Zeiger auf einen undurchsichtigen Wert, der die Registrierung darstellt, die abgebrochen werden soll. Der Aufrufer hat diesen Wert zuvor durch Aufrufen der IoRegisterPlugPlayNotification Routine abgerufen.

Rückgabewert

IoUnregisterPlugPlayNotificationEx gibt STATUS_SUCCESS zurück, wenn der parameter NotificationEntry gültig ist.

Bemerkungen

Ein Kernelmodustreiber ruft diese Routine auf, um eine Registrierung für den Empfang von PnP-Benachrichtigungen zu entfernen. Das heißt, ein IoUnregisterPlugPlayNotificationEx Anruf bricht die Registrierung einer Treiberrückrufroutine für eine PnP-Ereigniskategorie ab. Der Treiber hat diese Registrierung zuvor erhalten, indem er die IoRegisterPlugPlayNotification Routine aufruft.

Nachdem ein IoUnregisterPlugPlayNotificationEx Aufruf zurückgegeben wurde, wird die angegebene Registrierung abgebrochen, und es können keine weiteren Rückrufe ausgeführt werden.

Die IoUnregisterPlugPlayNotification Routine ähnelt IoUnregisterPlugPlayNotificationEx, mit der Ausnahme, dass keine weiteren Rückrufe nach einem IoUnregisterPlugPlayNotification Aufruf zurückgegeben werden können.

Häufig ruft ein Treiber IoUnregisterPlugPlayNotificationEx aus einer Benachrichtigungsrückrufroutine auf. In den meisten Fällen kann der Treiber die Registrierung der Benachrichtigungsrückrufroutine auf diese Weise sicher löschen. Für eine Rückrufroutine für Benachrichtigungen ist es jedoch nicht sicher, IoUnregisterPlugPlayNotificationEx- die Registrierung aufzuheben, wenn beides zutrifft:

  • Der Treiber legt das PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES Flag im EventCategoryFlags Parameterwert fest, der an den IoRegisterPlugPlayNotification Aufruf übergeben wird, der die Benachrichtigungsrückrufroutine registriert.

  • Der IoRegisterPlugPlayNotification Anruf, der die Benachrichtigungsrückrufroutine registriert, wurde noch nicht zurückgegeben.

Die Rückrufroutine darf keine Routine aufrufen, die die Ausführung des Threads blockieren kann, auf dem die Rückrufroutine ausgeführt wird. Wenn beispielsweise eine schlecht gestaltete Rückrufroutine eine Arbeitsaufgabe platziert, die IoUnregisterPlugPlayNotificationEx in der Arbeitsaufgabenwarteschlange aufruft und dann wartet, bis ein Arbeitsthread die Arbeitsaufgabe abgeschlossen hat, würde dies zu einem Deadlock des Betriebssystems führen.

Treiber sollten die Registrierung einer Benachrichtigungsrückrufroutine zuerst abbrechen und dann einen Kontextpuffer freigeben, der der Routine zugeordnet ist.

Ein Treiber kann erst entladen werden, wenn er alle PnP-Benachrichtigungsregistrierungen entfernt, da jede aktive Registrierung einen gezählten Verweis auf das Treiberobjekt enthält, das das geladene Bild des Treibers darstellt.

Weitere Informationen finden Sie unter Using PnP Notification.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar ab Windows 7.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- PASSIVE_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

Siehe auch

IoRegisterPlugPlayNotification-

IoUnregisterPlugPlayNotification-