Compartilhar via


Conceitos do WDM para drivers WDF

O WDF (Windows Driver Frameworks) é um wrapper em torno de interfaces WDM (Modelo de Driver do Microsoft Windows). Embora a estrutura simplifique muitos conceitos de WDM e oculte completamente outros para que você não precise trabalhar com eles, você ainda deve entender alguns dos conceitos básicos dos drivers do WDM. Especificamente, você deve entender tipos de driver, pilhas de driver, pilhas de dispositivos e pacotes de solicitação de E/S.

Tipos de driver

Os drivers baseados no Windows são divididos em três tipos: drivers de ônibus, drivers de função e drivers de filtro. Os motoristas de ônibus dão suporte a ônibus de E/S detectando dispositivos filho conectados a um ônibus pai e relatando suas características. (Essa atividade é chamada de enumeração de barramento.) Os drivers de função controlam as operações de E/S para dispositivos e ônibus. Os drivers de filtro recebem, revisam e possivelmente modificam dados que fluem entre aplicativos e drivers de usuário ou entre drivers individuais.

Os motoristas de ônibus são essencialmente drivers de função que também enumeram crianças. Um motorista atua 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 E/S que acessam o hardware do adaptador de barramento.

Um motorista do UMDF (User-Mode Driver Framework) não pode ser um motorista de ônibus.

Pilhas de driver

No sistema operacional Windows, os drivers WDM são colocados em camadas em uma sequência de chamadas vertical chamada chamada que é chamada de pilha de driver. 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 motorista de ônibus 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 ele. Normalmente, um ou mais drivers de função específicos do dispositivo estão acima do motorista do ônibus. Esses drivers de função lidam com operações de E/S para os dispositivos 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 driver que dão suporte a diferentes tipos de dispositivos.

Pilhas de dispositivos

Cada pilha de driver dá suporte a uma ou mais pilhas de dispositivos. Uma pilha de dispositivos é um conjunto de objetos de dispositivo criados a partir de estruturas de DEVICE_OBJECTdefinidas pelo WDM. Cada pilha de dispositivos representa um dispositivo. Cada driver cria um objeto de dispositivo para cada um de seus dispositivos e anexa 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 sempre que o sistema é reiniciado.

Quando um motorista de barramento detecta que dispositivos filho foram conectados ou desconectados, ele informa o gerenciador de Plug and Play (PnP). Em resposta, o gerenciador PnP solicita ao motorista do barramento que crie um PDO (objeto de dispositivo físico) para cada dispositivo filho conectado ao dispositivo pai (ou seja, o barramento). O PDO se torna a parte inferior de uma pilha de dispositivos.

Em seguida, o gerenciador PnP carrega a função e os drivers de filtro para dar suporte a 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 do dispositivo. Os drivers de função criam FDOs (objetos de dispositivo funcionais) 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 do dispositivo. Se esse driver pedir ao gerente de E/S para passar a solicitação para o driver mais baixo, o gerente de E/S usará a pilha do dispositivo para determinar o driver mais baixo. (O driver mais baixo é o driver que criou o objeto de dispositivo mais baixo.)

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 gerente de E/S envia as solicitações de E/S de um aplicativo aos drivers criando IRPs (pacotes de solicitação de E/S). 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 status). Além disso, o gerenciador PnP cria IRPs que representam operações de gerenciamento de energia e PnP 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 do driver e esse driver atende à solicitação ou passa a solicitação para o driver mais baixo. Algumas solicitações viajam para a parte inferior da pilha, e algumas são completamente processadas por motoristas de nível superior.

Sempre que um driver recebe um IRP, o driver também recebe um ponteiro para o objeto do dispositivo que representa o dispositivo que deve lidar com a operação. Portanto, os drivers em uma pilha de driver usam objetos de dispositivo para determinar para qual dos dispositivos conectados uma solicitação específica deve ir.

Normalmente, os drivers do WDF não acessam diretamente os IRPs. A estrutura converte os IRPs do 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 kmdf (Driver Framework) e drivers 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 evento para informar o driver de eventos de energia e PnP.