Compartilhar via


Packet-Driven E/S com IRPs Reutilizáveis

O gerenciador de E/S, o gerenciador de Plug and Play e o gerenciador de energia 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 no modo de usuário.

  • Cria IRPs para representar as solicitações de E/S.

  • Roteia os IRPs para os controladores apropriados.

  • Acompanha os IRPs até que 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 do sistema de arquivos, por meio de um driver 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 drivers.

Portanto, cada IRP tem uma parte fixa, além de um local da pilha de E/S específico para o 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 o identificador e os parâmetros do thread do chamador, o endereço do objeto do dispositivo no qual um arquivo está aberto, entre outros. A parte fixa também contém um bloco de status de E/S, 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 gerenciador de E/S, o gerenciador de Plug and Play ou o gerenciador de energia definem parâmetros específicos do driver, como o código de função da operação solicitada e o contexto que o driver correspondente utiliza para determinar o que deve fazer. Por sua vez, cada driver configura a localização da pilha de E/S do driver imediatamente inferior na pilha de drivers.

À medida que cada driver processa um IRP, ele pode acessar a posição da sua pilha de E/S dentro do IRP, permitindo que o IRP seja reutilizado 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 Como lidar com IRPs.