Freigeben über


Behandeln von Änderungsereignissen der Geräteschnittstelle

Wenn ein Treiber oder eine Benutzermoduskomponente eine Geräteschnittstelle instance aktiviert oder deaktiviert, ruft der PnP-Manager alle Benachrichtigungsrückrufroutinen auf, die für EventCategoryDeviceInterfaceChange-Ereignisse in der Geräteschnittstellenklasse registriert sind. Um den Grund für die Benachrichtigung anzugeben, legt der PnP-Manager den Event-Member des NotificationStructure-Parameters der Rückrufroutine auf GUID_DEVICE_INTERFACE_ARRIVAL oder GUID_DEVICE_INTERFACE_REMOVAL fest.

Bei der Behandlung eines GUID_DEVICE_INTERFACE_ARRIVAL-Ereignisses sollte eine Benachrichtigungsrückrufroutine:

  • Führen Sie vom Treiber definierte Aufgaben für die Behandlung der neuen Schnittstelle aus.

    In der Regel öffnet eine Benachrichtigungsrückrufroutine das Gerät direkt im Kontext des Rückrufs. Wenn das Öffnen des Geräts jedoch dazu führen kann, dass nachfolgende PnP-Ereignisse auftreten (z. B. die Enumeration untergeordneter Geräte), sollte die Rückrufroutine stattdessen eine Workerroutine in die Warteschlange stellen, um das Gerät zu öffnen. Andernfalls kann ein Deadlock auftreten.

    Eine Rückrufroutine kann als Reaktion auf die Verfügbarkeit der neuen Schnittstelle eine eigene Schnittstelle aktivieren.

Bei der Behandlung eines GUID_DEVICE_INTERFACE_REMOVAL-Ereignisses sollte eine Benachrichtigungsrückrufroutine Folgendes ausführen:

  • Machen Sie alle Vorgänge rückgängig, die beim Aktivieren der Schnittstelle ausgeführt wurden. Schließen Sie alle Dateihandles, die als Reaktion auf das Ereignis "Interface Arrival" geöffnet wurden.

Zusätzlich zu EventCategoryDeviceInterfaceChange muss sich der Treiber auch für EventCategoryTargetDeviceChange registrieren und das Dateihandle aus dem GUID_TARGET_DEVICE_QUERY_REMOVE Ereignisrückruf schließen. Wenn das Dateihandle geöffnet bleibt, wird das Entfernen mit einem Veto verhindert, und die geordnete Entfernung wird abgebrochen.