O Gerenciador PnP redistribui recursos do sistema
Se um usuário adicionar um dispositivo a um sistema e se o dispositivo exigir recursos do sistema que o gerenciador PnP já atribuiu a outro dispositivo, o gerenciador PnP tentará reatribuir recursos.
Durante esse processo, o gerenciador de PnP interrompe os dispositivos e os tira dos estados de trabalho (D0). Em seguida, ele fornece novas listas de recursos para os dispositivos para que eles possam reiniciar, usando os novos recursos.
Ao redistribuir recursos, o gerenciador de PnP não alterará a atribuição de recursos de um dispositivo se um dos drivers do dispositivo tiver:
Chamado WdfDeviceSetSpecialFileSupport e um arquivo especial está aberto no dispositivo.
Chamado WdfDeviceSetStaticStopRemove.
Forneceu uma função de retorno de chamada EvtDeviceQueryStop e a função de retorno de chamada vetou a reatribuição.
Sequência de Power-Down
Para cada função e driver de filtro que dá suporte ao dispositivo que está sendo interrompido, a estrutura faz o seguinte, em sequência, um driver por vez, começando com o driver mais alto na pilha de driver:
Se o driver estiver usando E/S autogerenciada, a estrutura chamará a função de retorno de chamada EvtDeviceSelfManagedIoSuspend do driver.
A estrutura interrompe todas as filas de E/S gerenciadas por energia do dispositivo.
Se o hardware e o driver derem suporte ao DMA, a estrutura chamará as funções de retorno de chamada EvtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlush e EvtDmaEnablerDisable do driver para cada canal DMA criado.
Chama as funções de retorno de chamada EvtDeviceD0ExitPreInterruptsDisabled e EvtInterruptDisable do driver (se existirem) para que o driver possa desabilitar interrupções de dispositivo.
A estrutura chama a função de retorno de chamada EvtDeviceD0Exit do driver (se existir).
A estrutura chama a função de retorno de chamada EvtDeviceReleaseHardware do driver (se existir) passando a lista de recursos de hardware que o gerenciador PnP atribuiu ao dispositivo.
O motorista do ônibus é o motorista mais baixo da pilha e é chamado de último. Quando a estrutura chama a função de retorno de chamada EvtDeviceD0Exit do driver de barramento, ela passa um identificador para o objeto de dispositivo de estrutura que representa o PDO do dispositivo e um valor TargetState de WdfPowerDeviceD3Final. O driver de barramento pode controlar quando a estrutura chama sua função de retorno de chamada EvtDeviceReleaseHardware chamando WdfDeviceInitSetReleaseHardwareOrderOnFailure.
Sequência de Power-Up
O primeiro motorista chamado é o motorista do ônibus. Quando a estrutura chama a função de retorno de chamada EvtDeviceD0Entry do driver de barramento, a função de retorno de chamada restaura o dispositivo (um dispositivo filho do barramento) para seu estado de trabalho (D0).
Para cada função e driver de filtro que dá suporte ao dispositivo, a estrutura faz o seguinte, em sequência, um driver por vez, começando com o driver mais baixo na pilha de driver:
A estrutura chama a função de retorno de chamada EvtDevicePrepareHardware do driver (se existir), passando a lista de recursos de hardware que o gerenciador PnP atribuiu ao dispositivo.
A estrutura chama a função de retorno de chamada EvtDeviceD0Entry do driver (se ela existir).
A estrutura chama as funções de retorno de chamada EvtInterruptEnable e EvtDeviceD0EntryPostInterruptsEnabled do driver (se existirem) para que o driver possa habilitar interrupções de dispositivo.
Se o hardware e o driver derem suporte ao DMA, a estrutura chamará as funções de retorno de chamada EvtDmaEnablerFill, EvtDmaEnablerEnable e EvtDmaEnablerSelfManagedIoStart do driver para cada canal DMA criado.
A estrutura chama a função de retorno de chamada EvtChildListScanForChildren do driver (se existir).
A estrutura reinicia todas as filas de E/S gerenciadas por energia do dispositivo.
Se o driver estiver usando E/S autogerenciada, a estrutura chamará a função de retorno de chamada EvtDeviceSelfManagedIoRestart do driver.