Introdução às rotinas de driver padrão

Cada driver de modo kernel é construído em torno de um conjunto de rotinas de driver padrão definidas pelo sistema. Os drivers de modo kernel processam IRPs ( pacotes de solicitação de E/S ) dentro dessas rotinas padrão chamando rotinas de suporte de driver fornecidas pelo sistema.

Todos os drivers, independentemente de seu nível em uma cadeia de drivers anexados, devem ter um conjunto básico de rotinas padrão para processar IRPs. Se um driver deve implementar rotinas padrão adicionais depende se o driver controla um dispositivo físico ou está em camadas sobre um driver de dispositivo físico, bem como sobre a natureza do dispositivo físico subjacente. Os drivers de nível mais baixo que controlam dispositivos físicos têm rotinas mais necessárias do que os drivers de nível superior, que normalmente passam IRPs para um driver inferior para processamento.

As rotinas de driver padrão podem ser divididas em dois grupos: aqueles que cada driver de modo kernel deve ter e aqueles que são opcionais, dependendo do tipo de driver e do local na pilha do dispositivo.

A tabela a seguir lista as rotinas padrão necessárias.

Rotinas de driver padrão necessárias Finalidade Onde descrito
DriverEntry Inicializa o driver e seu objeto de driver. Escrevendo uma rotina driverEntry
AddDevice Inicializa dispositivos e cria objetos de dispositivo. Escrevendo uma rotina AddDevice
Rotinas de expedição Receber e processar IRPs. Escrevendo rotinas de expedição
Descarregar Liberar recursos do sistema adquiridos pelo driver. Escrevendo uma rotina de descarregamento

A tabela a seguir lista várias rotinas opcionais.

Rotinas de driver padrão opcionais Finalidade Onde descrito
Reinicializar Conclui a inicialização do driver se DriverEntry não puder. Escrevendo uma rotina de reinicialização
StartIo Inicia uma operação de E/S em um dispositivo físico. Escrevendo uma rotina StartIo
Rotina de serviço de interrupção Salva o estado de um dispositivo quando ele interrompe. Escrevendo um ISR
Chamadas de procedimento adiado Conclui o processamento de uma interrupção de dispositivo depois que um ISR salva o estado do dispositivo. DPC Objects and DPCs
SynchCritSection Sincroniza o acesso aos dados do driver. Usando seções críticas
AdapterControl Inicia operações de DMA. Objetos do adaptador e DMA
IoCompletion Conclui o processamento de um IRP de um driver. Concluindo IRPs
Cancelar Cancela o processamento de um IRP de um driver. Cancelando IRPs
CustomTimerDpc, IoTimer Tempo e sincronização de eventos. Técnicas de sincronização

O IRP atual e o objeto de dispositivo de destino são parâmetros de entrada para muitas rotinas padrão. Cada driver processa cada IRP em estágios por meio de seu conjunto de rotinas padrão.

Por convenção, os drivers fornecidos pelo sistema anexam um prefixo específico do driver ou específico do dispositivo ao nome de cada rotina padrão, exceto DriverEntry. Por exemplo, esta documentação usa "DD", conforme mostrado na ilustração em Introdução aos Objetos de Driver. Seguir essa convenção facilita a depuração e a manutenção de drivers.