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.