Pacotes de solicitação de E/S
A maioria das solicitações enviadas aos drivers de dispositivo é empacotada 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 do 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 envia o IRP.
Normalmente, um IRP é processado por vários drivers organizados em uma 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 (Filtro DO) na parte superior da pilha de dispositivos.
Passar de um IRP para a pilha do dispositivo
Suponha que o gerenciador 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, o passa para o FDO (objeto de dispositivo funcional), 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 para o PDO (objeto de dispositivo físico). Outros IRPs nunca alcançam o PDO porque são concluídos por um dos drivers acima do PDO.
IRPs são autossuficientes
A estrutura do IRP é autossuficiente 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 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.