Introdução aos objetos de driver

O gerenciador de E/S cria um objeto de driver para cada driver que foi instalado e carregado. Os objetos de driver são definidos usando estruturas DRIVER_OBJECT .

Quando o gerente de E/S chama a rotina DriverEntry de um driver, ele fornece o endereço do objeto de driver do driver. O objeto driver contém armazenamento para pontos de entrada para muitas das rotinas padrão de um driver. O driver é responsável por preencher esses pontos de entrada.

A figura a seguir ilustra um objeto de driver, com o conjunto de rotinas padrão definidas pelo sistema que os drivers de nível mais baixo e superior podem ou devem ter.

Cada rotina padrão com um asterisco ao lado de seu nome recebe um IRP (pacote de solicitação de E/S) como entrada. Cada uma dessas rotinas padrão também recebe um ponteiro para o objeto de dispositivo de destino para a solicitação de E/S.

diagrama ilustrando um objeto de driver.

O gerenciador de E/S define o tipo de objeto de driver e usa objetos de driver para registrar e rastrear informações sobre as imagens carregadas dos drivers. Observe que os pontos de entrada de expedição (DDDispatchXxx por meio de DDDispatchYyy) no objeto driver correspondem aos códigos de função principais (IRP_MJ_XXX) que são passados nos locais de pilha de E/S de IRPs.

O gerenciador de E/S encaminha cada IRP primeiro para uma rotina de expedição fornecida pelo driver. Uma rotina de expedição de um driver de nível mais baixo geralmente chama uma rotina de suporte de E/S (IoStartPacket) para enfileirar (ou passar) cada IRP que tenha argumentos válidos para a rotina StartIo do driver. A rotina StartIo inicia a operação de E/S solicitada em um dispositivo específico. Os drivers de nível superior geralmente não têm rotinas StartIo , mas podem.