Share via


PnP Manager Ridistribuisce le risorse di sistema

Se un utente aggiunge un dispositivo a un sistema e se il dispositivo richiede risorse di sistema già assegnate dal gestore PnP a un altro dispositivo, il gestore PnP tenta di riassegnare le risorse.

Durante questo processo, il gestore PnP arresta i dispositivi e li disconnette dagli stati di lavoro (D0). Distribuisce quindi nuovi elenchi di risorse ai dispositivi in modo che possano essere riavviati, usando le nuove risorse.

Durante la ridistribuzione delle risorse, il gestore PnP non modificherà l'assegnazione di risorse di un dispositivo se uno dei driver del dispositivo ha:

sequenza Power-Down

Per ogni driver di funzione e filtro che supporta l'arresto del dispositivo, il framework esegue le operazioni seguenti, in sequenza, un driver alla volta, a partire dal driver più alto nello stack di driver:

  1. Se il driver usa I/O autogestito, il framework chiama la funzione di callback EvtDeviceSelfManagedIoSuspend del driver.

  2. Il framework arresta tutte le code di I/O gestite dal dispositivo.

  3. Se l'hardware e il driver supportano DMA, il framework chiama le funzioni di callback EvtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlush e EvtDmaEnablerDisabler per ogni canale DMA creato.

  4. Chiama le funzioni di callback EvtDeviceD0ExitPreInterruptsDisabled e EvtInterruptDisable ( se esistenti) del driver in modo che il driver possa disabilitare gli interrupt del dispositivo.

  5. Il framework chiama la funzione di callback EvtDeviceD0Exit del driver (se esistente).

  6. Il framework chiama la funzione di callback EvtDeviceReleaseHardware del driver (se esistente) passando l'elenco di risorse hardware assegnate dal gestore PnP al dispositivo.

Il conducente dell'autobus è il driver più basso nello stack e viene chiamato per ultimo. Quando il framework chiama la funzione di callback EvtDeviceD0Exit del driver del bus, passa un handle all'oggetto dispositivo framework che rappresenta il PDO del dispositivo e un valore TargetState di WdfPowerDeviceD3Final. Il driver del bus può controllare quando il framework chiama la funzione di callback EvtDeviceReleaseHardware chiamando WdfDeviceInitSetReleaseHardwareOrderOnFailure.

sequenza Power-Up

Il primo autista chiamato è l'autista dell'autobus. Quando il framework chiama la funzione di callback EvtDeviceD0Entry del driver del bus, la funzione di callback ripristina il dispositivo (un dispositivo figlio del bus) sullo stato di funzionamento (D0).

Per ogni driver di funzione e filtro che supporta il dispositivo, il framework esegue le operazioni seguenti, in sequenza, un driver alla volta, a partire dal driver più basso nello stack di driver:

  1. Il framework chiama la funzione di callback EvtDevicePrepareHardware del driver (se esistente), passando l'elenco di risorse hardware assegnate dal manager PnP al dispositivo.

  2. Il framework chiama la funzione di callback EvtDeviceD0Entry del driver (se esistente).

  3. Il framework chiama le funzioni di callback EvtInterruptEnable e EvtDeviceD0EntryPostInterruptsEnabled del driver in modo che il driver possa abilitare gli interrupt del dispositivo.

  4. Se l'hardware e il driver supportano DMA, il framework chiama le funzioni di callback EvtDmaEnablerFill, EvtDmaEnablerEnabler e EvtDmaEnablerSelfManagedIoStart per ogni canale DMA creato.

  5. Il framework chiama la funzione di callback EvtChildListScanForChildren del driver (se esistente).

  6. Il framework riavvia tutte le code di I/O gestite dal dispositivo.

  7. Se il driver usa l'I/O autogestito, il framework chiama la funzione di callback EvtDeviceSelfManagedIoRestart del driver.