Pilhas de drivers

A maioria das solicitações enviadas aos drivers de dispositivo são empacotadas em pacotes de solicitação de E/S (IRPs). 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, em seguida, 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 drivers para nos referirmos ao conjunto de drivers em camadas 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 uma 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 de dispositivos para o nó Meu dispositivo de armazenamento USB. Disk.sys passa o IRP pela pilha de dispositivos 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 é de propriedade do motorista, 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ó USB Mass Storage Device e o driver FDO para o nó USB Root Hub. Não é importante decidir se o IRP pertence ao par (PDO, Usbhub.sys) ou ao par (FDO, Usbhub.sys). O IRP é de propriedade do motorista, Usbhub.sys, e o motorista 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 miniporta e Usbport.sys é um driver de porta. O par (miniport, port) desempenha o papel de um único driver. Nesse caso, o driver de miniporta e o driver de porta são escritos pela Microsoft. O par (Usbuhci.sys, Usbport.sys) é o driver PDO para o nó USB Root Hub, e o par (Usbuhci.sys, Usbport.sys) também é o driver FDO para o nó USB Host Controller. O par (Usbuhci.sys, Usbport.sys) faz a comunicação real com o hardware do controlador host, que por sua vez se comunica com o dispositivo de armazenamento USB físico.

A pilha de drivers 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 visão da sequência concentrando-nos nos drivers em vez de nos nós do dispositivo e suas 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 drivers, 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 drivers 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 de dispositivos 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 uma ramificação da árvore de dispositivos.

Pilhas de drivers 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 blocos semelhante a muitos dos que aparecem na documentação do Windows Driver Kit (WDK).

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

No diagrama, a pilha de drivers é dividida em três seções. Podemos pensar em cada seção como pertencente a uma tecnologia específica ou a um componente ou parte específica do sistema operacional. Por exemplo, podemos dizer que a primeira seção na parte superior da pilha de drivers 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 a aparência de todo o diagrama de blocos de núcleo USB.

Diagrama mostrando a pilha de driver de tecnologia para possível bloco de núcleo USB .

Um diagrama de blocos que mostra todos os drivers para uma tecnologia específica ou um componente específico ou parte do sistema operacional é chamado de pilha de drivers de tecnologia. Normalmente, as pilhas de drivers de tecnologia recebem nomes como a pilha de drivers USB Core, a pilha de armazenamento, a pilha de drivers 1394 e a pilha de drivers de áudio.

Nota: O diagrama de bloco de núcleo USB neste artigo mostra uma das várias maneiras possíveis de ilustrar as pilhas de driver de tecnologia para USB 1.0 e 2.0. Para obter os diagramas oficiais das pilhas de drivers USB 1.0, 2.0 e 3.0, consulte USB Driver Stack Architecture.

Nós de dispositivo e pilhas de dispositivos

Minidrivers e pares de drivers

Conceitos para todos os desenvolvedores de drivers