Der PnP-Manager verteilt Systemressourcen.
Wenn ein Benutzer einem System ein Gerät hinzufügt und das Gerät Systemressourcen benötigt, die der PnP-Manager bereits einem anderen Gerät zugewiesen hat, versucht der PnP-Manager, Ressourcen neu zuzuweisen.
Während dieses Vorgangs beendet der PnP-Manager Geräte und hebt sie aus ihrem Arbeitszustand (D0) heraus. Anschließend werden neue Ressourcenlisten an die Geräte übermittelt, damit sie mithilfe der neuen Ressourcen neu gestartet werden können.
Beim Verteilen von Ressourcen ändert der PnP-Manager die Ressourcenzuweisung eines Geräts nicht, wenn einer der Gerätetreiber folgendes aufweist:
Heißt WdfDeviceSetSpecialFileSupport und eine spezielle Datei ist auf dem Gerät geöffnet.
Es wurde eine EvtDeviceQueryStop-Rückruffunktion bereitgestellt, und die Rückruffunktion hat ein Veto gegen die erneute Zuweisung erteilt.
Power-Down Sequenz
Für jeden Funktions- und Filtertreiber, der das angehaltene Gerät unterstützt, führt das Framework nacheinander die folgenden Schritte durch, beginnend mit dem Treiber, der am höchsten im Treiberstapel ist:
Wenn der Treiber selbstverwaltete E/A verwendet, ruft das Framework die Rückruffunktion EvtDeviceSelfManagedIoSuspend des Treibers auf.
Das Framework beendet alle stromverwalteten E/A-Warteschlangen des Geräts.
Wenn die Hardware und der Treiber DMA unterstützen, ruft das Framework die Rückruffunktionen EvtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlush und EvtDmaEnablerDisable für jeden erstellten DMA-Kanal auf.
Ruft die Rückruffunktionen EvtDeviceD0ExitPreInterruptsDisabled und EvtInterruptDisable des Treibers (sofern vorhanden) auf, damit der Treiber Geräteunterbrechungen deaktivieren kann.
Das Framework ruft die Rückruffunktion EvtDeviceD0Exit des Treibers auf (sofern vorhanden).
Das Framework ruft die EvtDeviceReleaseHardware-Rückruffunktion des Treibers auf (sofern vorhanden), und übergibt die Liste der Hardwareressourcen, die der PnP-Manager dem Gerät zugewiesen hat.
Der Bustreiber ist der niedrigste Treiber im Stapel und wird zuletzt aufgerufen. Wenn das Framework die EvtDeviceD0Exit-Rückruffunktion des Bustreibers aufruft, übergibt es ein Handle an das Frameworkgeräteobjekt, das die PDO des Geräts und den TargetState-Wert von WdfPowerDeviceD3Final darstellt. Der Bustreiber kann steuern, wann das Framework seine EvtDeviceReleaseHardware-Rückruffunktion aufruft , indem er WdfDeviceInitSetReleaseHardwareOrderOnFailure aufruft.
Power-Up Sequenz
Der erste Treiber, der aufgerufen wird, ist der Bustreiber. Wenn das Framework die EvtDeviceD0Entry-Rückruffunktion des Bustreibers aufruft, stellt die Rückruffunktion das Gerät (ein untergeordnetes Gerät des Busses) in seinen Betriebszustand (D0) zurück.
Für jeden Funktions- und Filtertreiber, der das Gerät unterstützt, führt das Framework nacheinander die folgenden Schritte durch, beginnend mit dem Treiber, der am niedrigsten im Treiberstapel ist:
Das Framework ruft die EvtDevicePrepareHardware-Rückruffunktion des Treibers auf (sofern vorhanden), und übergibt die Liste der Hardwareressourcen, die der PnP-Manager dem Gerät zugewiesen hat.
Das Framework ruft die EvtDeviceD0Entry-Rückruffunktion des Treibers auf (sofern vorhanden).
Das Framework ruft die Rückruffunktionen EvtInterruptEnable und EvtDeviceD0EntryPostInterruptsEnabled des Treibers auf (sofern vorhanden), damit der Treiber Geräteunterbrechungen aktivieren kann.
Wenn die Hardware und der Treiber DMA unterstützen, ruft das Framework die Rückruffunktionen EvtDmaEnablerFill, EvtDmaEnablerEnable und EvtDmaEnablerSelfManagedIoStart des Treibers für jeden erstellten DMA-Kanal auf.
Das Framework ruft die Rückruffunktion EvtChildListScanForChildren des Treibers auf (sofern vorhanden).
Das Framework startet alle stromverwalteten E/A-Warteschlangen des Geräts neu.
Wenn der Treiber selbstverwaltete E/A verwendet, ruft das Framework die Rückruffunktion EvtDeviceSelfManagedIoRestart des Treibers auf.