Partilhar via


Pacotes de solicitação de E/S

A maioria das solicitações enviadas aos drivers de dispositivo são empacotadas em pacotes de solicitação de E/S (IRPs). Um componente do sistema operacional ou um driver envia um IRP para um driver chamando IoCallDriver, que tem dois parâmetros: um ponteiro para um DEVICE_OBJECT e um ponteiro para um IRP. O DEVICE_OBJECT tem um ponteiro para um DRIVER_OBJECT associado. Quando um componente chama IoCallDriver, dizemos que o componente envia o IRP para o objeto de dispositivo ou envia o IRP para o driver associado ao objeto de dispositivo. Às vezes usamos a frase passa o IRP ou encaminha o IRP em vez de enviar o IRP.

Normalmente, um IRP é processado por vários drivers que são organizados numa pilha. Cada driver na pilha está associado a um objeto de dispositivo. Para obter mais informações, consulte Nós de dispositivo e pilhas de dispositivos. Quando um IRP é processado por uma pilha de dispositivos, o IRP geralmente é enviado primeiro para o objeto de dispositivo superior na pilha de dispositivos. Por exemplo, se um IRP for processado pela pilha de dispositivos mostrada neste diagrama, o IRP será enviado primeiro para o objeto de dispositivo de filtro (Filter DO) na parte superior da pilha de dispositivos.

Diagrama de um nó de dispositivo e sua pilha de dispositivos.

Transmitir um IRP pela pilha de dispositivos abaixo

Suponha que o gerente de E/S envie um IRP para o filtro DO no diagrama. O driver associado ao filtro DO, AfterThought.sys, processa o IRP e, em seguida, passa-o para o objeto de dispositivo funcional (FDO), que é o próximo objeto de dispositivo inferior na pilha de dispositivos. Quando um driver passa um IRP para o próximo objeto de dispositivo inferior na pilha de dispositivos, dizemos que o driver passa o IRP para baixo na pilha de dispositivos.

Alguns IRPs são passados por toda a pilha de dispositivos até atingir o objeto de dispositivo físico (PDO). Outros IRPs nunca chegam à DOP porque são preenchidos por um dos drivers acima da DOP.

Os IRPs são independentes

A estrutura IRP é independente, no sentido de que contém todas as informações de que um driver precisa para lidar com uma solicitação de E/S. Algumas partes da estrutura do IRP contêm informações que são comuns a todos os drivers participantes na pilha. Outras partes do IRP contêm informações específicas de um driver específico na pilha.