Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os objetos de solicitação de estrutura representam solicitações de E/S que o gerente 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 WDM (estrutura de IRP), mas os drivers baseados em estrutura normalmente não precisam acessar a estrutura de IRP.
A maioria dos objetos de solicitação de estrutura são criados pela estrutura, mas seu driver também pode criar objetos de solicitação.
Objetos de solicitação criados pela estrutura
Quando um driver baseado em estrutura recebe um pacote de solicitação de E/S (IRP) do gerenciador de E/S, a estrutura interceta o IRP e cria um objeto de solicitação de estrutura. A estrutura coloca o objeto de solicitação numa fila de I/O e, se o driver tiver registado manipuladores de solicitação para a fila, chama 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.
As etapas a seguir correspondem aos números no diagrama anterior:
Um aplicativo de modo de usuário lê um arquivo chamando a função Microsoft Win32 ReadFile.
A função ReadFile chama o gerenciador de E/S, que é executado no modo kernel.
O gerente de E/S aloca uma estrutura IRP e armazena um código de função IRP_MJ_READ na estrutura.
O gestor de E/S chama a rotina padrão de driver DispatchRead para o driver x, passando um ponteiro para a estrutura IRP. Como o driver x é um driver baseado em framework, o framework fornece a rotina DispatchRead do driver.
A estrutura cria um objeto de solicitação que representa a estrutura IRP. A estrutura adiciona o objeto de pedido a um dos objetos de fila do driver.
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 pode 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. Em tal 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 WDM numa rotina de despacho WDM e, em seguida, os atender ou encaminhar usando o framework, o driver poderá chamar WdfRequestCreateFromIrp.