Compartilhar via


Enumeração estática

A enumeração estática é a capacidade de um 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 drivers de barramento poderão usar a 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, um driver de cartão de som pode atuar como um driver de barramento e criar PDOs (objetos de dispositivo físico) separados para cada uma das funcionalidades do cartão, como MIDI, áudio e joystick.

Listas de filhos estáticos

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

Criando uma lista de filhos estáticos

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 filho vazia e estática para o dispositivo.

Quando a estrutura chama a função de retorno de chamada EvtDriverDeviceAdd de um driver de barramento, 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 filho.

Opcionalmente, o driver pode chamar WdfDeviceSetBusInformationForChildren para fornecer à estrutura informações sobre o barramento. Isso é recomendado porque facilita a identificação do barramento por dispositivos e aplicativos filho.

Para criar um PDO para um dispositivo filho detectado, o motorista do barramento 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 representa 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 filho.

Modificando uma lista de filhos estáticos

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 após 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, em seguida, chamar WdfDeviceSetDeviceState.)

Atravessando uma lista de filhos estáticos

Se você precisar recuperar o conteúdo de uma lista filho estática, o driver poderá percorrer a lista fazendo o seguinte:

  1. Chamando WdfFdoLockStaticChildListForIteration.

  2. Chamando WdfFdoRetrieveNextStaticChild quantas vezes forem necessárias.

  3. Chamando WdfFdoUnlockStaticChildListFromIteration.