Compartilhar via


Criando objetos de solicitação de estrutura

Os objetos de solicitação de estrutura representam solicitações de E/S que o gerenciador de E/S enviou a um driver. Os drivers baseados em estrutura processam cada solicitação de E/S chamando métodos de objeto de solicitação de estrutura.

Cada solicitação de E/S contém um pacote de solicitação de E/S do WDM (estrutura IRP ), mas os drivers baseados em estrutura normalmente não precisam acessar a estrutura IRP.

A maioria dos objetos de solicitação de estrutura é criada pela estrutura, mas o driver também pode criar objetos de solicitação.

Objetos de solicitação criados pela estrutura

Quando um driver baseado em estrutura recebe um IRP (pacote de solicitação de E/S) do gerenciador de E/S, a estrutura intercepta o IRP e cria um objeto de solicitação de estrutura. A estrutura coloca o objeto de solicitação em uma fila de E/S e, se o driver tiver registrado manipuladores de solicitação para a fila, chamará o manipulador apropriado.

O diagrama a seguir ilustra as etapas que ocorrem quando a estrutura cria um objeto de solicitação para uma operação de leitura.

Diagrama ilustrando as etapas para criar um objeto de solicitação para uma operação de leitura em um driver baseado em estrutura.

As etapas a seguir correspondem aos números no diagrama anterior:

  1. Um aplicativo de modo de usuário lê um arquivo chamando a função ReadFile do Microsoft Win32.

  2. A função ReadFile chama o gerenciador de E/S, que é executado no modo kernel.

  3. O gerenciador de E/S aloca uma estrutura IRP e armazena um código de função IRP_MJ_READ na estrutura .

  4. O gerente de E/S chama a rotina de driver padrão DispatchRead para o driver x, passando um ponteiro para a estrutura IRP. Como o driver x é um driver baseado em estrutura, a estrutura fornece a rotina DispatchRead do driver.

  5. A estrutura cria um objeto de solicitação que representa a estrutura IRP. A estrutura adiciona o objeto de solicitação a um dos objetos de fila do driver.

  6. A estrutura chama o manipulador de solicitação EvtIoRead do driver, passando um identificador de objeto de fila e um identificador de objeto de solicitação.

Solicitar objetos criados por um driver

Os drivers baseados em estrutura também podem criar objetos de solicitação. Por exemplo, um driver poderá criar objetos de solicitação se receber uma solicitação de leitura ou gravação para uma quantidade de dados maior do que os destinos de E/S do driver podem manipular ao mesmo tempo. Nessa situação, o driver pode dividir os dados em várias solicitações menores e usar objetos de solicitação adicionais para enviar essas solicitações menores para um ou mais destinos de E/S.

Para criar um objeto de solicitação, o driver deve chamar WdfRequestCreate seguido por métodos de objeto de estrutura que inicializam a solicitação, como WdfUsbTargetPipeFormatRequestForRead.

Se um driver receber IRPs do WDM em uma rotina de expedição do WDM e, em seguida, os serviços ou encaminhá-los usando a estrutura, o driver poderá chamar WdfRequestCreateFromIrp.