Introdução aos objetos controller
Como o nome sugere, um objeto de controlador geralmente representa um controlador de dispositivo físico com dispositivos anexados. Um driver não WDM de nível mais baixo para um conjunto de dispositivos semelhantes coordenados por um controlador físico pode criar um objeto de controlador e usá-lo para sincronizar operações de E/S entre os dispositivos anexados. O driver implementa uma rotina ControllerControl e chama as rotinas de suporte do objeto do controlador do gerenciador de E/S.
Observação
Não há suporte para o uso de objetos de controlador em drivers WDM.
Em geral, os drivers usam objetos de controlador para sincronizar operações com dispositivos anexados se os seguintes critérios forem:
O controlador não realiza operações longas sem interromper, portanto, o driver não precisa criar um thread dedicado ao dispositivo ou usar threads de trabalho do sistema.
Os dispositivos conectados ao controlador são semelhantes. Ou seja, eles não são dispositivos com propriedades físicas ou funcionalidades operacionais totalmente diferentes, como os dispositivos de teclado e mouse que podem ser conectados ao teclado e ao controlador de dispositivo auxiliar.
O driver foi projetado para ser monolítico: em camada única em relação ao controlador de dispositivo e dispositivos físicos anexados, em vez de ser projetado como um driver de porta (para o controlador) com um ou mais drivers de classe (para dispositivos anexados) em camadas sobre o driver de porta.
Drivers de dispositivos com canais de E/S e um conjunto de objetos de dispositivo lógico também podem usar um objeto controlador para sincronizar suas operações de E/S entre ou entre os canais desse dispositivo.
Um objeto de controlador não tem nome e, portanto, não é o destino de solicitações de E/S. É simplesmente um mecanismo de sincronização para serializar a E/S de um conjunto de objetos de dispositivo. Como um objeto do controlador não tem nome, ele é invisível para subsistemas protegidos no modo de usuário, que não podem fazer solicitações de E/S do dispositivo sem obter um identificador para o objeto de arquivo que representa o objeto de dispositivo de destino. Um objeto de controlador também é invisível para drivers de nível superior, que não podem anexar seus próprios objetos de dispositivo a um objeto de controlador. Em outras palavras, nem o gerenciador de E/S nem um driver de nível superior podem configurar uma E/S de solicitação de IRP em um dispositivo representado por um objeto de controlador. As solicitações de E/S sempre são emitidas para objetos de dispositivo. Somente o driver pode usar o objeto do controlador.
Sincronização e E/S sobreposta
Drivers monolíticos de dispositivos físicos com recursos como os do controlador de disco "AT" não precisam usar um objeto de controlador para sincronizar as operações de E/S do dispositivo. Por exemplo, um gravador de driver pode tentar algo semelhante à seguinte técnica de sincronização em vez de usar um objeto de controlador:
Configure objetos de dispositivo nomeados para representar os dispositivos que são destinos para solicitações de E/S.
Mantenha informações de estado (talvez um conjunto de sinalizadores de Dispositivo Ocupado em cada extensão de dispositivo ou em uma única extensão de dispositivo) indicando qual objeto de dispositivo é o destino da operação de E/S atual.
Execute operações de E/S para o objeto de dispositivo ocupado no momento e requeira IRPs de entrada para outros objetos de dispositivo até que o IRP atual seja concluído.
A técnica de sincronização anterior serializa o processamento de IRP para todos os objetos de dispositivo de destino do driver. Observe que ele também força o driver a concluir o IRP atual antes que sua rotina StartIo possa começar a processar o próximo IRP, o que infelizmente diminui o desempenho do driver.
Se determinadas operações de dispositivo puderem ser sobrepostas, o uso de um objeto de controlador poderá aumentar a taxa de transferência de E/S de um driver, pois essa técnica de sincronização permite que o driver determine se ele pode sobrepor operações pouco antes de configurar o dispositivo físico. Por exemplo, um controlador de disco pode permitir que o driver sobreponha buscas em um disco com operações de leitura/gravação em outro disco.
Além disso, usar um objeto de controlador é uma maneira relativamente fácil de sincronizar operações de E/S para mais de um objeto de dispositivo de destino por meio de um único dispositivo físico, como um controlador de disco "AT". O uso de um objeto de controlador permite que um driver monolítico sincronize operações de E/S em um conjunto de objetos de dispositivo nomeados sem precisar manter o estado sobre cada dispositivo e o controlador de dispositivo em uma ou mais extensões de dispositivo e sem precisar reencaixar IRPs.
No entanto, alguns dispositivos projetados para sobrepor operações de E/S, como controladores seriais full-duplex ou adaptadores de barramento master, geralmente têm drivers que configuram filas internas para IRPs.