Criando objetos de dispositivo em um driver de função
Cada driver de função cria um objeto de dispositivo de estrutura para cada um de seus dispositivos com suporte que existe no sistema. Como esses objetos de dispositivo são criados por drivers de função, eles são chamados de FDOs (objetos de dispositivo funcionais). Cada FDO é a representação de um dispositivo por um driver de função.
Um driver de função deve criar um objeto de dispositivo de estrutura sempre que a estrutura chamar a função de retorno de chamada EvtDriverDeviceAdd do driver. A estrutura chama essa função de retorno de chamada para informar ao driver que um de seus dispositivos com suporte existe no sistema.
A função de retorno de chamada EvtDriverDeviceAdd do driver recebe um ponteiro para uma estrutura de WDFDEVICE_INIT . O driver 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 função podem chamar métodos de inicialização FDO da estrutura.
A criação de um objeto de dispositivo de estrutura em um driver de função normalmente inclui as seguintes etapas:
Registrando funções de retorno de chamada de PnP, energia e política de energia.
A maioria dos drivers de função chama WdfDeviceInitSetPnpPowerEventCallbacks para registrar funções de retorno de chamada de energia e PnP. Para obter mais informações sobre essas funções de retorno de chamada, consulte Suporte a PnP e gerenciamento de energia em drivers de função.
Se o dispositivo der suporte a ociosidade de baixa potência ou tiver recursos de ativação, o driver de função normalmente também chamará WdfDeviceInitSetPowerPolicyEventCallbacks para registrar funções de retorno de chamada da política de energia. Para obter mais informações sobre essas funções de retorno de chamada, consulte Propriedade do Power Policy.
Registrando funções de retorno de chamada específicas do driver de função.
Alguns drivers de função chamam WdfFdoInitSetEventCallbacks, se precisarem participar da especificação dos recursos de hardware do sistema que um dispositivo requer. Para obter mais informações sobre recursos de hardware, consulte Recursos de hardware para drivers de Framework-Based.
Registrando funções de retorno de chamada de evento de arquivo.
Se o driver precisar responder quando um aplicativo abrir ou fechar um arquivo em um dispositivo, o driver deverá chamar WdfDeviceInitSetFileObjectConfig para registrar funções de retorno de chamada para o objeto de arquivo de estrutura. Para obter mais informações, consulte Usando objetos de arquivo de estrutura.
Definindo atributos de solicitação de E/S.
Se o driver receber solicitações de E/S de objetos de fila de estrutura, o driver poderá chamar WdfDeviceInitSetRequestAttributes para configurar a memória de contexto que a estrutura atribuirá aos objetos de solicitação de um dispositivo. Para obter mais informações, consulte Usando o contexto de objeto de solicitação.
Definindo características do dispositivo.
Normalmente, um driver de função chama alguns dos seguintes métodos para especificar as características de um dispositivo:
- WdfDeviceInitSetDeviceType, para identificar o tipo de hardware compatível com o driver.
- WdfDeviceInitSetIoType, para identificar um método para acessar buffers de dados, se o driver manipular solicitações de E/S de aplicativos.
- WdfDeviceInitSetCharacteristics, para definir características do dispositivo, como se o dispositivo é somente leitura ou dá suporte a mídia removível.
- WdfDeviceInitSetExclusive, se o dispositivo exigir acesso exclusivo por um aplicativo por vez.
- WdfDeviceInitSetPowerInrush, se o dispositivo exigir um inrush de atual quando ele fizer a transição de um estado de baixa potência para seu estado de trabalho (D0).
- WdfDeviceInitSetPowerPageable ou WdfDeviceInitSetPowerNotPageable, para indicar se o driver deve acessar dados pagináveis enquanto o sistema está fazendo a transição entre um estado de suspensão e o estado de trabalho (S0).
- WdfDeviceInitAssignName, para atribuir um nome ao objeto do dispositivo.
- WdfDeviceInitAssignSDDLString, para atribuir um descritor de segurança ao objeto do dispositivo.
- WdfDeviceInitSetDeviceClass, para identificar a classe de instalação do dispositivo.
Obtendo propriedades do dispositivo.
Às vezes, os drivers de função devem obter informações sobre as propriedades do dispositivo que o driver do barramento do dispositivo ou outro driver de nível inferior definiu. O driver pode chamar WdfFdoInitQueryProperty ou WdfFdoInitAllocAndQueryProperty para obter essas informações. Novos drivers direcionados Windows 8.1 e posteriores podem chamar WdfFdoInitQueryPropertyEx e WdfFdoInitAllocAndQueryPropertyEx.
Acessando a chave do Registro do dispositivo.
Alguns drivers de função devem obter informações sobre o dispositivo ou driver que outro driver, um usuário ou um pacote de instalação colocou no registro. O driver pode chamar WdfFdoInitOpenRegistryKey para abrir a chave do registro do dispositivo ou do driver. Para obter mais informações, consulte Usando o Registro em drivers de Framework-Based.
Criando uma configuração de lista filho padrão a ser usada para enumeração dinâmica.
Se você estiver escrevendo um driver de função para um barramento e se o driver executar uma enumeração dinâmica de dispositivos filho conectados ao barramento, o driver deverá chamar WdfFdoInitSetDefaultChildListConfig. Para obter mais informações, consulte Enumerando os dispositivos em um barramento.
Criando o objeto de dispositivo.
A etapa final na criação de um objeto de dispositivo é chamar WdfDeviceCreate.