Freigeben über


Richtlinien zum Schreiben von PnP-Benachrichtigungsrückrufroutinen

Der PnP-Manager ruft Benachrichtigungsrückrufroutinen unter IRQL = PASSIVE_LEVEL auf.

Um einen reibungslosen Betrieb des PnP-Subsystems zu gewährleisten, muss eine PnP-Benachrichtigungsrückrufroutine die folgenden Richtlinien befolgen:

  1. Eine Benachrichtigungsrückrufroutine darf nicht blockiert werden.

  2. Eine Benachrichtigungsrückrufroutine darf keine synchronen Routinen aufrufen oder einen Aufruf von auslösen, die PnP-Ereignisse generieren, oder eine Routine, die das Warten auf die Installation oder Entfernung des Geräts blockiert.

    Das Aufrufen solcher Routinen während eines Benachrichtigungsrückrufs kann zu einem System-Deadlock führen.

    Beispielsweise darf ein Treiber IoReportTargetDeviceChange in einer Benachrichtigungsrückrufroutine nicht aufrufen. Rufen Sie stattdessen IoReportTargetDeviceChangeAsynchronous auf .

  3. Eine Benachrichtigungsrückrufroutine sollte für alle Ereignisse, für die kein expliziter Fehler auftritt, erfolgreich sein.

    Wenn sich ein Treiber für eine Benachrichtigung für eine Ereigniskategorie registriert, benachrichtigt der PnP-Manager den Treiber über alle Ereignisse in dieser Kategorie, die gegenwärtig und künftig sind. Wenn ein Treiber einen Fehler status für Ereignisse zurückgibt, die er nicht behandelt, besteht die Gefahr, dass ein neues Abfrageereignis versehentlich fehlschlägt.

    Ein Treiber gibt ordnungsgemäß einen Fehler status zurück, wenn der Treiber z. B. eine Abfragebenachrichtigung fehlschlägt, um ein Veto gegen das vorgeschlagene Ereignis einzufügen.

  4. Eine Benachrichtigungsrückrufroutine sollte ausgelagerter Code sein.