Behandeln eines GUID_TARGET_DEVICE_QUERY_REMOVE-Ereignisses
Bevor der PnP-Manager ein IRP_MN_QUERY_REMOVE_DEVICE IRP an die Treiber für ein Gerät sendet, ruft er alle Benachrichtigungsrückrufroutinen auf, die für EventCategoryTargetDeviceChange auf dem Gerät registriert sind. Der PnP-Manager gibt eine NotificationStructure an. Ereignis der GUID_TARGET_DEVICE_QUERY_REMOVE.
Als Reaktion auf eine solche Benachrichtigung bestimmt die Rückrufroutine, ob das Gerät entfernt werden kann, ohne das System zu unterbrechen.
Wenn das Gerät nicht entfernt werden soll, gibt die Rückrufroutine STATUS_UNSUCCESSFUL zurück. Als Reaktion auf diese status bricht der PnP-Manager die Verarbeitung von Abfragen ab, und das Gerät wird nicht entfernt.
Wenn das Gerät entfernt werden kann, sollte die Rückrufroutine alle geeigneten Vorgänge ausführen, um die Geräteentfernung vorzubereiten, z. B. das Schließen aller auf dem Gerät geöffneten Ziehpunkte (falls möglich). Wenn Handles auf dem Gerät geöffnet bleiben, kann der PnP-Manager das Gerät nicht entfernen, und der PnP-Manager bricht die Verarbeitung von Abfragen ab.
Bei der erfolgreichen Behandlung eines GUID_TARGET_DEVICE_QUERY_REMOVE-Ereignisses sollte eine Benachrichtigungsrückrufroutine:
Schließen Sie alle geöffneten Handles für das Gerät.
Wenn der Treiber über einen ausstehenden Verweis auf das Dateiobjekt verfügt, dereferenzieren Sie das Dateiobjekt.
Bleiben Sie für zukünftige EventCategoryTargetDeviceChange-Benachrichtigungen registriert. Dies ist wichtig, da der bevorstehende Entfernungsvorgang möglicherweise abgebrochen wird.
Durch das Schließen eines Handles für ein Gerät wird die Registrierung eines Treibers für die PnP-Zielgeräteänderungsbenachrichtigung nicht abgebrochen. Der PnP-Manager kann weiterhin die Benachrichtigungsrückrufroutine des Treibers aufrufen, aber in solchen Aufrufen ist das Dateiobjekt in der NotificationStructure ungültig.