Packet-Driven E/S com IRPs reutilizáveis
O gerente de E/S, o gerenciador de Plug and Play e o power manager usam IRPs (pacotes de solicitação de E/S) para se comunicar com drivers no modo kernel e permitir que os drivers se comuniquem entre si.
O gerente de E/S executa as seguintes etapas:
Aceita solicitações de E/S, que geralmente se originam de aplicativos de modo de usuário.
Cria IRPs para representar as solicitações de E/S.
Roteia os IRPs para os drivers apropriados.
Rastreia os IRPs até que eles sejam concluídos.
Retorna o status para o solicitante original de cada operação de E/S.
Um IRP pode ser roteado para mais de um driver. Por exemplo, uma solicitação para abrir um arquivo em um disco pode ir primeiro para um driver de sistema de arquivos, por meio de um driver de espelho intermediário e, por fim, para um driver de disco e, possivelmente, para um driver de barramento de hardware PnP. Esse conjunto de drivers é conhecido como uma pilha de driver.
Portanto, cada IRP tem uma parte fixa, além de um local de pilha de E/S específico do driver para cada driver que controla o dispositivo:
Na parte fixa (ou cabeçalho), o gerenciador de E/S mantém informações sobre a solicitação original, como a ID de thread e os parâmetros do chamador, o endereço do objeto do dispositivo no qual um arquivo está aberto e assim por diante. A parte fixa também contém um bloco de E/S status, no qual os drivers definem informações sobre o status da operação de E/S solicitada.
No local de pilha de E/S do driver de nível mais alto, o gerente de E/S, o gerenciador de Plug and Play ou o power manager define parâmetros específicos do driver, como o código de função da operação solicitada e o contexto que o driver correspondente usa para determinar o que ele deve fazer. Por sua vez, cada driver configura o local da pilha de E/S do driver mais baixo na pilha do driver.
À medida que cada driver processa um IRP, ele pode acessar seu local de pilha de E/S no IRP, reutilizando o IRP em cada estágio das operações do driver. Além disso, os drivers de nível superior podem criar (ou reutilizar) IRPs para enviar solicitações até mesmo para drivers de nível inferior.
Para obter uma discussão detalhada sobre IRPs, consulte Manipulando IRPs.