Um usuário conecta um dispositivo
No cenário a seguir, o nó do dispositivo inclui um driver de barramento KMDF e uma ou mais funções KMDF ou drivers de filtro que dão suporte a um dispositivo PnP.
Quando um usuário conecta o dispositivo ao barramento enquanto o sistema está em execução, o driver de barramento do dispositivo e a estrutura executam as seguintes tarefas:
O driver de barramento para o dispositivo detecta o dispositivo e chama WdfChildListAddOrUpdateChildDescriptionAsPresent. (Esse processo é conhecido como "enumeração dinâmica".
A estrutura chama a função de retorno de chamada EvtChildListCreateDevice do driver de barramento, para que o motorista do barramento possa chamar WdfDeviceCreate para criar um objeto de dispositivo de estrutura para o dispositivo físico (um PDO).
A estrutura chama as funções de retorno de chamada EvtDeviceResourcesQuery e EvtDeviceResourceRequirementsQuery do driver de barramento para determinar os recursos de hardware do sistema que o dispositivo requer.
Para obter mais informações sobre a sequência de energia de um motorista de ônibus KMDF, consulte Sequência de power-up para um motorista de ônibus.
Em seguida, o gerenciador PnP determina quais drivers adicionais (drivers de função e drivers de filtro) o dispositivo requer. Se esses drivers ainda não estiverem carregados, o gerenciador PnP os carregará e chamará suas rotinas de DriverEntry . Para cada função ou driver de filtro, as seguintes ações ocorrem:
A estrutura chama a função de retorno de chamada EvtDriverDeviceAdd de cada driver adicional para que o driver possa chamar WdfDeviceCreate para criar um objeto de dispositivo de estrutura que representa o dispositivo para o driver. Os drivers de função criam um FDO (objeto de dispositivo funcional) e os drivers de filtro criam um objeto de dispositivo de filtro (Filter DO).
A estrutura chama cada função e filtra a função de retorno de chamada EvtDeviceFilterRemoveResourceRequirements do driver e, em seguida, a função de retorno de chamada EvtDeviceFilterAddResourceRequirements de cada driver. Imediatamente antes de o dispositivo ser iniciado, a estrutura chama a função de retorno de chamada EvtDeviceRemoveAddedResources . Essas três funções de retorno de chamada permitem que o filtro e os drivers de função modifiquem a lista de recursos de hardware exigidos pelo dispositivo, antes que o gerenciador PnP atribua recursos ao dispositivo. Para obter mais informações, consulte Recursos de hardware para drivers de Framework-Based
A estrutura garante que o dispositivo tenha atingido seu estado de energia de trabalho (D0).
Para cada driver de função e 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 ela existir) e passa 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 a função de retorno de chamada EvtInterruptEnable do driver (se existir) para cada interrupção e, em seguida, chama a função de retorno de chamada EvtDeviceD0EntryPostInterruptsEnabled do driver (se existir), 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 (se existirem) para cada canal DMA criado.
- A estrutura chama a função de retorno de chamada EvtChildListScanForChildren do driver (se ela existir).
- A estrutura inicia 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 EvtDeviceSelfManagedIoInit do driver.
Para obter mais informações sobre a sequência de energia para a função KMDF ou drivers de filtro, a Sequência de Power-Up para um Driver de Função ou Filtro.