Freigeben über


IoUnregisterPlugPlayNotificationEx-Funktion (wdm.h)

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

Syntax

NTSTATUS IoUnregisterPlugPlayNotificationEx(
  [in] PVOID NotificationEntry
);

Parameter

[in] NotificationEntry

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

Rückgabewert

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

Hinweise

Ein Kernelmodustreiber ruft diese Routine auf, um eine Registrierung zu entfernen, um PnP-Benachrichtigungen zu empfangen. Das heißt, ein IoUnregisterPlugPlayNotificationEx-Aufruf bricht die Registrierung einer Treiberrückrufroutine für eine PnP-Ereigniskategorie ab. Der Treiber hat diese Registrierung zuvor durch Aufrufen der IoRegisterPlugPlayNotification-Routine abgerufen.

Nachdem ein IoUnregisterPlugPlayNotificationEx-Aufruf zurückgegeben wird, wird die angegebene Registrierung abgebrochen, und es können keine weiteren Rückrufe mehr erfolgen.

Die IoUnregisterPlugPlayNotification-Routine ähnelt IoUnregisterPlugPlayNotificationEx, mit der Ausnahme, dass sie nicht garantieren kann, dass nach der Rückgabe eines IoUnregisterPlugPlayNotification-Aufrufs keine weiteren Rückrufe erfolgen können.

Häufig ruft ein Treiber IoUnregisterPlugPlayNotificationEx aus einer Benachrichtigungsrückrufroutine auf. In den meisten Fällen kann der Fahrer die Registrierung der Benachrichtigungsrückrufroutine auf diese Weise sicher löschen. Es ist jedoch unsicher, dass eine Benachrichtigungsrückrufroutine IoUnregisterPlugPlayNotificationEx aufruft, um die Registrierung selbst aufzuheben, wenn beides zutrifft:

  • Der Treiber legt das PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES-Flag im EventCategoryFlags-Parameterwert fest, der für den IoRegisterPlugPlayNotification-Aufruf bereitgestellt wird, der die Benachrichtigungsrückrufroutine registriert.

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

Die Rückrufroutine darf keine Routine aufrufen, die die Ausführung des Threads blockiert, in dem die Rückrufroutine ausgeführt wird. Wenn z. B. eine schlecht gestaltete Rückrufroutine ein Arbeitselement, das IoUnregisterPlugPlayNotificationEx aufruft, in der Arbeitselementwarteschlange platziert und dann wartet, bis ein Arbeitsthread das Arbeitselement abgeschlossen hat, würde dies zu einem Deadlock des Betriebssystems führen.

Treiber sollten zuerst die Registrierung einer Benachrichtigungsrückrufroutine abbrechen und dann jeden kontextbasierten Puffer 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 Image des Treibers darstellt.

Weitere Informationen finden Sie unter Verwenden von PnP-Benachrichtigungen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 7.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

Weitere Informationen

IoRegisterPlugPlayNotification

IoUnregisterPlugPlayNotification