Compartilhar via


Exemplo de objetos de dispositivo WDM

A figura a seguir ilustra os objetos de dispositivo que representam os dispositivos de teclado e mouse mostrados anteriormente na figura ilustrando configurações de hardware do mouse e teclado. Os drivers de teclado e mouse mostrados na figura que ilustra as Camadas de Driver de Teclado e Mouse criam esses objetos de dispositivo chamando uma rotina de suporte de E/S (IoCreateDevice).

objetos de dispositivo de teclado e mouse.

Para os dispositivos de teclado e mouse, os respectivos drivers de porta e classe criam objetos de dispositivo. O driver de porta cria um PDO (objeto de dispositivo físico) para representar a porta física. Cada driver de classe cria seu próprio FDO (objeto de dispositivo funcional) para representar o dispositivo de teclado ou mouse como um destino para solicitações de E/S.

Cada driver de classe chama uma rotina de suporte de E/S para obter um ponteiro para o objeto de dispositivo do driver de nível inferior, para que o driver de classe possa se encadear acima desse driver, que é o driver de porta. Em seguida, o driver de classe pode enviar solicitações de E/S para o driver de porta para o PDO de destino que representa seu dispositivo físico.

Um driver de filtro opcional adicionado à configuração criaria um objeto de dispositivo de filtro (filtro DO). Assim como o driver de classe, um driver de filtro opcional se encadeia ao driver inferior seguinte na pilha do dispositivo e envia solicitações de E/S para o PDO de destino para o driver inferior seguinte.

Conforme mostrado anteriormente na figura Camadas do Driver do Teclado e do Mouse , cada driver de porta é um driver de barramento (de nível mais baixo), portanto, cada driver de porta de um dispositivo que gera interrupções deve configurar objetos de interrupção e registrar um ISR.

Um driver de porta de dispositivo duplo, como o driver i8042 para o teclado e o controlador de dispositivo auxiliar mostrado na figura Configurações de Hardware do Teclado e mouse , deve configurar objetos de interrupção específicos do dispositivo se cada dispositivo usar um vetor de interrupção diferente. Ao escrever esse driver, você pode implementar ISRs separados para cada dispositivo ou implementar um único ISR para ambos os dispositivos.