Compartilhar via


Enumeração estática

A enumeração estática é a capacidade do driver de detectar e relatar a existência de dispositivos durante a inicialização do sistema, com uma capacidade limitada de relatar alterações subsequentes à configuração do sistema.

Os motoristas de ônibus podem usar enumeração estática se o número e o tipo de dispositivos ou subunidades funcionais forem predeterminados e permanentes, e não dependerem da configuração do sistema no qual o driver está em execução.

Por exemplo, o driver de uma placa de som pode atuar como um motorista de ônibus e criar PDOs (objetos de dispositivo físicos) separados para cada uma das funcionalidades do cartão, como MIDI, áudio e joystick.

Listas de filhos estáticas

A framework permite que os drivers ofereçam suporte à enumeração estática ao fornecer listas de filhos estáticas. Cada lista filho estática representa uma lista de dispositivos filho conectados a um dispositivo pai. O controlador de barramento para o dispositivo pai deve identificar os dispositivos filhos do pai, adicioná-los à lista de filhos estática do dispositivo pai e criar um PDO para cada dispositivo filho.

Criando uma lista filho estática

Sempre que um driver cria um objeto de dispositivo de estrutura que representa um FDO (objeto de dispositivo funcional) para um dispositivo, a estrutura cria uma lista estática de filhos vazia para o dispositivo.

Quando o framework chama a função de retorno de chamada EvtDriverDeviceAdd de um driver de ônibus, a função de retorno de chamada deve chamar WdfDeviceCreate para criar um FDO para o dispositivo pai. Para obter mais informações sobre como criar um FDO, consulte Criando objetos de dispositivo em um driver de função.

Em seguida, o driver deve enumerar os filhos do dispositivo pai, criar PDOs para os filhos e adicionar os filhos à lista de filhos.

Opcionalmente, o driver pode chamar WdfDeviceSetBusInformationForChildren para fornecer à estrutura informações sobre o barramento. Isso é recomendado porque facilita que dispositivos e aplicativos filhos identifiquem o barramento.

Para criar um PDO para um dispositivo filho detectado, o motorista do ônibus deve:

  1. Chame WdfPdoInitAllocate para obter uma estrutura WDFDEVICE_INIT.

  2. Inicialize a estrutura de WDFDEVICE_INIT.

  3. Chame WdfDeviceCreate para criar um objeto de dispositivo de estrutura que represente um PDO.

Para obter mais informações sobre como criar um PDO, consulte Criando objetos de dispositivo em um driver de barramento.

Depois de chamar WdfDeviceCreate, o driver deve chamar WdfFdoAddStaticChild para adicionar o dispositivo filho à lista de filhos.

Modificando uma lista estática de filhos

Como os drivers devem usar apenas listas filho estáticas para configurações de dispositivo predeterminadas e permanentes, há pouca necessidade de um driver modificar uma lista filho estática depois de criá-la. Se o driver determinar que um dispositivo filho se tornou inacessível, o driver poderá chamar WdfPdoMarkMissing. (Se um dispositivo filho permanecer acessível, mas ficar sem resposta e inutilizável, o driver deverá definir o membro com falha da estrutura WDF_DEVICE_STATE como WdfTrue e chamar WdfDeviceSetDeviceState.)

Atravessando uma lista filho estática

Caso precise recuperar os conteúdos de uma lista filha estática, o driver poderá percorrer a lista com os seguintes passos:

  1. Chamando WdfFdoLockStaticChildListForIteration.

  2. Chamando WdfFdoRetrieveNextStaticChild quantas vezes for necessário.

  3. Chamando WdfFdoUnlockStaticChildListFromIteration.