Criando objetos de dispositivo em um driver de barramento
Cada driver de barramento deve criar um objeto de dispositivo de estrutura quando descobrir que um dispositivo filho está conectado a um dispositivo pai. O dispositivo pai normalmente é um barramento, mas também pode ser um dispositivo multifuncional para o qual cada função requer um conjunto separado de drivers (como uma placa de som que dá suporte a áudio digital e MIDI). Os objetos de dispositivo que os drivers de barramento criam são chamados de PDOs (objetos de dispositivo físico) porque cada um representa uma conexão real de uma parte do hardware (o filho) com outro (o pai).
O processo de identificar e relatar os dispositivos conectados a um barramento é chamado de enumeração de barramento.
Se um driver de barramento executar enumeração de barramento dinâmico, sua função de retorno de chamada EvtChildListCreateDevice receberá um identificador para uma estrutura de WDFDEVICE_INIT .
Se um motorista de barramento executar enumeração de barramento estático, ele deverá chamar WdfPdoInitAllocate para obter um identificador para uma estrutura de WDFDEVICE_INIT.
Para obter mais informações sobre a enumeração de barramento, consulte Enumerando os dispositivos em um barramento.
Um driver de barramento pode chamar um conjunto de métodos de inicialização de objeto de dispositivo de estrutura, que armazenam informações na estrutura WDFDEVICE_INIT . Além disso, os drivers de barramento podem chamar métodos de inicialização PDO de estrutura.
A criação de um objeto de dispositivo de estrutura para um dispositivo filho enumerado normalmente inclui as seguintes etapas:
Registrando funções de retorno de chamada específicas do driver de barramento.
A maioria dos motoristas de barramento chama WdfPdoInitSetEventCallbacks, pois eles devem especificar os recursos de hardware do sistema que um dispositivo requer. Para obter mais informações sobre como especificar recursos de hardware, consulte Recursos de hardware para drivers de Framework-Based. Funções de retorno de chamada adicionais poderão ser registradas se o dispositivo e o driver derem suporte à ejeção.
Relatar cadeias de caracteres de identificação do dispositivo.
Os drivers de barramento devem relatar as cadeias de caracteres de identificação do dispositivo chamando WdfPdoInitAssignDeviceID, WdfPdoInitAssignInstanceID, WdfPdoInitAddCompatibleID e WdfPdoInitAddHardwareID para cada tipo de cadeia de caracteres compatível com o dispositivo. Além disso, os drivers de barramento que usam a versão 1.9 ou posterior da estrutura podem chamar WdfPdoInitAssignContainerID.
Relatar se o driver de barramento pode dar suporte ao dispositivo no modo bruto.
Se o driver de barramento der suporte ao modo bruto para o dispositivo, ele deverá chamar WdfPdoInitAssignRawDevice.
Fornecendo texto exibivel que descreve o dispositivo.
Os motoristas de barramento chamam WdfPdoInitAddDeviceText e WdfPdoInitSetDefaultLocale para fornecer texto que descreve o dispositivo aos usuários, em vários idiomas.
Criando o objeto de dispositivo.
A etapa final na criação de um objeto de dispositivo é chamar WdfDeviceCreate.
Se o driver encontrar um erro ao inicializar a estrutura WDFDEVICE_INIT obtida de WdfPdoInitAllocate, o driver deverá chamar WdfDeviceInitFree em vez de WdfDeviceCreate.
Depois que o driver de barramento tiver criado o objeto de dispositivo, ele normalmente chama WdfDeviceSetPnpCapabilities e WdfDeviceSetPowerCapabilities para relatar os recursos de Plug and Play e energia do dispositivo.
Cada driver de ônibus também é o driver de função para o adaptador de barramento. Portanto, o driver também deve fornecer uma função de retorno de chamada EvtDriverDeviceAdd . Essa função de retorno de chamada cria um FDO (objeto de dispositivo funcional) para cada adaptador de barramento no sistema. Para obter mais informações sobre como criar FDOs, consulte Criando objetos de dispositivo em um driver de função.