Pilhas de driver

A maioria das solicitações enviadas aos drivers de dispositivo é empacotada em IRPs (pacotes de solicitação de E/S ). Cada dispositivo é representado por um nó de dispositivo e cada nó de dispositivo tem uma pilha de dispositivos. Para obter mais informações, consulte Nós de dispositivo e pilhas de dispositivos. Para enviar uma solicitação de leitura, gravação ou controle para um dispositivo, o gerenciador de E/S localiza o nó do dispositivo para o dispositivo e envia um IRP para a pilha de dispositivos desse nó. Às vezes, mais de uma pilha de dispositivos está envolvida no processamento de uma solicitação de E/S. Independentemente de quantas pilhas de dispositivos estão envolvidas, a sequência geral de drivers que participam de uma solicitação de E/S é chamada de pilha de driver para a solicitação. Também usamos o termo pilha de driver para se referir ao conjunto em camadas de drivers para uma tecnologia específica.

Solicitações de E/S processadas por várias pilhas de dispositivos

Em alguns casos, mais de uma pilha de dispositivos está envolvida no processamento de um IRP. O diagrama a seguir ilustra um caso em que quatro pilhas de dispositivos estão envolvidas no processamento de um único IRP.

diagrama de quatro nós de dispositivo, cada um com uma pilha de dispositivos.

Veja como o IRP é processado em cada estágio numerado no diagrama:

  1. O IRP é criado por Disk.sys, que é o driver de função na pilha do dispositivo para o nó Meu Dispositivo de Armazenamento USB. Disk.sys passa o IRP para baixo na pilha do dispositivo para Usbstor.sys.

  2. Observe que Usbstor.sys é o driver PDO para o nó Meu Dispositivo de Armazenamento USB e o driver FDO para o nó Dispositivo de Armazenamento em Massa USB. Neste ponto, não é importante decidir se o IRP pertence ao par (PDO, Usbstor.sys) ou ao par (FDO, Usbstor.sys). O IRP pertence ao driver, Usbstor.sys e o driver tem acesso ao PDO e ao FDO.

  3. Quando Usbstor.sys terminar de processar o IRP, ele passa o IRP para Usbhub.sys. Usbhub.sys é o driver PDO para o nó dispositivo de armazenamento em massa USB e o driver FDO para o nó hub raiz USB. Não é importante decidir se o IRP pertence ao par (PDO, Usbhub.sys) ou ao par (FDO, Usbhub.sys). O IRP pertence ao driver, Usbhub.sys e o driver tem acesso ao PDO e ao FDO.

  4. Quando Usbhub.sys terminar de processar o IRP, ele passa o IRP para o par (Usbuhci.sys, Usbport.sys).

    Usbuhci.sys é um driver de miniporte e Usbport.sys é um driver de porta. O par (miniport, porta) desempenha a função de um único driver. Nesse caso, o driver de miniporto e o driver de porta são escritos pela Microsoft. O par (Usbuhci.sys, Usbport.sys) é o driver PDO para o nó hub raiz USB e o par (Usbuhci.sys, Usbport.sys) também é o driver FDO para o nó controlador de host USB. O par (Usbuhci.sys, Usbport.sys) faz a comunicação real com o hardware do controlador de host, que por sua vez se comunica com o dispositivo de armazenamento USB físico.

A pilha de driver para uma solicitação de E/S

Considere a sequência de quatro drivers que participaram da solicitação de E/S ilustrada no diagrama anterior. Podemos obter outra exibição da sequência focando nos drivers e não nos nós do dispositivo e nas pilhas de dispositivos individuais. O diagrama a seguir mostra os drivers em sequência de cima para baixo. Observe que Disk.sys está associado a um objeto de dispositivo, mas cada um dos outros três drivers está associado a dois objetos de dispositivo.

diagrama de uma pilha de driver, mostrando o driver superior associado apenas a um fdo e os outros três drivers associados a um pdo e um fdo.

A sequência de drivers que participam de uma solicitação de E/S é chamada de pilha de driver para a solicitação de E/S. Para ilustrar uma pilha de driver para uma solicitação de E/S, desenhamos os drivers de cima para baixo na ordem em que eles participam da solicitação.

Observe que a pilha de driver para uma solicitação de E/S é bem diferente da pilha do dispositivo para um nó de dispositivo. Observe também que a pilha de driver para uma solicitação de E/S não permanece necessariamente em um branch da árvore do dispositivo.

Pilhas de driver de tecnologia

Considere a pilha de driver para a solicitação de E/S mostrada no diagrama anterior. Se dermos a cada um dos drivers um nome amigável e fizermos algumas pequenas alterações no diagrama, teremos um diagrama de bloco semelhante a muitos dos que aparecem na documentação do WDK (Windows Driver Kit).

diagrama de uma pilha de driver mostrando nomes amigáveis para os drivers: driver de classe de disco na parte superior seguido pelo driver da porta de armazenamento USB e, em seguida, driver de hub usb e driver (miniporto USB 2, porta USB).

No diagrama, a pilha de driver é dividida em três seções. Podemos considerar cada seção como pertencente a uma tecnologia específica ou a um componente específico ou parte do sistema operacional. Por exemplo, podemos dizer que a primeira seção na parte superior da pilha de driver pertence ao Gerenciador de Volumes, a segunda seção pertence ao componente de armazenamento do sistema operacional e a terceira seção pertence à parte USB principal do sistema operacional.

Considere os drivers na terceira seção. Esses drivers são um subconjunto de um conjunto maior de drivers USB principais que a Microsoft fornece para lidar com vários tipos de solicitações USB e hardware USB. O diagrama a seguir mostra como pode ser todo o diagrama de bloco de núcleo USB.

diagrama mostrando a pilha do driver de tecnologia para possível bloco de núcleo usb.

Um diagrama de bloco que mostra todos os drivers de uma tecnologia específica ou um componente específico ou parte do sistema operacional é chamado de pilha de driver de tecnologia. Normalmente, as pilhas de driver de tecnologia recebem nomes como a Pilha de Driver do USB Core, a Pilha de Armazenamento, a Pilha de Driver 1394 e a Pilha do Driver de Áudio.

Nota O diagrama de bloco de núcleo USB neste tópico mostra uma das várias maneiras possíveis de ilustrar as pilhas de driver de tecnologia para USB 1.0 e 2.0. Para os diagramas oficiais das pilhas de driver USB 1.0, 2.0 e 3.0, consulte Arquitetura de pilha do driver USB.

Nós de dispositivo e pilhas de dispositivos

Minidrivers e pares de driver

Conceitos para todos os desenvolvedores de driver