Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Windows Driver Frameworks (WDF) é um arcabouço em torno das interfaces do Microsoft Windows Driver Model (WDM). Embora a estrutura simplifique muitos conceitos do WDM e oculte outros completamente para que você não precise trabalhar com eles, você ainda deve entender alguns dos conceitos básicos dos drivers WDM. Especificamente, você deve entender os tipos de driver, pilhas de driver, pilhas de dispositivos e pacotes de solicitação de E/S.
Tipos de condutores
Os drivers baseados no Windows são divididos em três tipos: drivers de barramento, drivers de função e drivers de filtro. Os controladores de barramento suportam barramentos de E/S detetando dispositivos filho que estão conectados a um barramento pai e reportando as suas características. (Esta atividade é chamada de enumeração de barramento.) Os drivers de função controlam as operações de E/S para dispositivos e barramentos. Os drivers de filtro recebem, revisam e, possivelmente, modificam dados que fluem entre aplicativos de usuário e drivers, ou entre drivers individuais.
Os motoristas de ônibus são essencialmente motoristas de função que também enumeram crianças. Um motorista age como um "motorista de ônibus" quando enumera os dispositivos filho em um ônibus. Caso contrário, o mesmo driver atua como o "driver de função" para o barramento quando lida com operações de entrada/saída que acessam o hardware do adaptador de barramento.
O Driver Framework User-Mode (UMDF) não pode ser um controlador de barramento.
Conjuntos de drivers
No sistema operacional Windows, os drivers WDM são colocados em camadas em uma sequência de chamada vertical chamada de pilha de drivers. O driver mais alto da pilha normalmente recebe solicitações de E/S de aplicativos de usuário, depois que as solicitações passam pelo gerenciador de E/S do sistema operacional. As camadas inferiores do driver normalmente se comunicam com o hardware do computador.
Uma pilha de driver simples inclui um driver de barramento na parte inferior da pilha, que lida com operações de E/S específicas do barramento e enumera os dispositivos filho que estão conectados a ela. Normalmente, um ou mais drivers de função específicos do dispositivo estão acima do driver de barramento. Esses controladores de função lidam com operações de entrada/saída para os dispositivos que estão conectados ao barramento. Os drivers de filtro podem estar acima dos drivers de função ou podem residir entre um motorista de ônibus e um driver de função. Um sistema em execução tem várias pilhas de drivers que suportam diferentes tipos de dispositivos.
Pilhas de dispositivos
Cada pilha de drivers suporta uma ou mais pilhas de dispositivos. Uma pilha de dispositivos é um conjunto de objetos de dispositivo criados a partir das estruturas DEVICE_OBJECT definidas pelo WDM. Cada pilha de dispositivos representa um dispositivo. Cada driver cria um objeto de dispositivo para cada um dos seus dispositivos e liga cada objeto de dispositivo a uma pilha de dispositivos. As pilhas de dispositivos são criadas e removidas à medida que os dispositivos são conectados e desconectados, e cada vez que o sistema é reinicializado.
Quando um driver de barramento deteta que os dispositivos filho foram conectados ou desconectados, ele informa o gerenciador Plug and Play (PnP). Em resposta, o gestor PnP pede ao controlador de barramento que crie um objeto de dispositivo físico (PDO) para cada dispositivo filho que está conectado ao dispositivo pai (ou seja, o barramento). O PDO torna-se a base de uma pilha de dispositivos.
Em seguida, o gerenciador PnP carrega drivers de função e filtro para suportar cada dispositivo (se eles ainda não estiverem carregados) e, em seguida, o gerenciador PnP chama esses drivers para que cada um possa criar um objeto de dispositivo e adicioná-lo à parte superior da pilha de dispositivos. Os drivers de função criam objetos de dispositivo funcional (FDOs) e os drivers de filtro criam objetos de dispositivo de filtro (DOs de filtro).
Quando o gerenciador de E/S envia uma solicitação de E/S para os drivers de um dispositivo, ele passa a solicitação para o driver que criou o objeto de dispositivo mais alto na pilha de dispositivos. Se esse driver pedir ao gerenciador de E/S para passar a solicitação ao driver imediatamente inferior, o gerenciador de E/S usará a pilha de dispositivos para determinar o driver imediatamente inferior. (O driver imediatamente inferior é o driver que criou o objeto de dispositivo logo abaixo.)
O WDF cria um objeto de dispositivo de estrutura para cada objeto de dispositivo WDM. Os drivers baseados em estrutura acessam esses objetos de dispositivo de estrutura em vez de objetos de dispositivo WDM.
Pacotes de solicitação de E/S
O gerenciador de E/S envia as solicitações de E/S de um aplicativo para os drivers criando pacotes de solicitação de E/S (IRPs). Um IRP pode conter uma solicitação para executar uma operação de E/S (como uma operação de leitura/gravação) ou uma solicitação para executar uma ação de controle de E/S (IOCTL) (como retornar o status). Além disso, o gerenciador PnP cria IRPs que representam PnP e operações de gerenciamento de energia que os drivers devem executar, e envia esses IRPs para drivers.
Normalmente, o gerenciador de E/S cria um IRP de leitura ou gravação quando um aplicativo de usuário solicita uma operação de leitura ou gravação. O gerente de E/S passa o IRP para o driver na parte superior da pilha de drivers, e esse driver atende à solicitação ou passa a solicitação para o próximo driver inferior. Algumas solicitações viajam para a parte inferior da pilha, e algumas são completamente processadas por drivers de nível superior.
Cada vez que um driver recebe um IRP, o driver também recebe um ponteiro para o objeto de dispositivo que representa o dispositivo que deve manipular a operação. Portanto, os drivers em uma pilha de drivers usam objetos de dispositivo para determinar para qual de seus dispositivos conectados uma solicitação específica deve ir.
Os drivers WDF normalmente não acessam diretamente os IRPs. A estrutura converte os IRPs WDM que representam operações de controle de E/S de leitura, gravação e dispositivo em objetos de solicitação de estrutura que Kernel-Mode drivers KMDF (Driver Framework) e UMDF recebem em filas de E/S. A estrutura lida com PnP e IRPs de gerenciamento de energia internamente e usa funções de retorno de chamada de eventos para informar o driver de PnP e eventos de energia.