Introdução aos objetos de dispositivo
O sistema operacional representa dispositivos por objetos de dispositivo. Um ou mais objetos de dispositivo são associados a cada dispositivo. Os objetos de dispositivo servem como o destino de todas as operações no dispositivo.
Os drivers no modo kernel devem criar pelo menos um objeto de dispositivo para cada dispositivo, com as seguintes exceções:
Minidrivers que têm uma classe associada ou driver de porta não precisam criar seus próprios objetos de dispositivo. O driver de classe ou porta cria os objetos do dispositivo e envia operações para o minidriver.
Os drivers que fazem parte de subsistemas específicos do tipo de dispositivo, como drivers de miniporto NDIS, têm seus objetos de dispositivo criados pelo subsistema.
Consulte a documentação do tipo de dispositivo específico para determinar se o driver cria seus próprios objetos de dispositivo.
Alguns objetos de dispositivo não representam dispositivos físicos. Um driver somente de software, que lida com solicitações de E/S, mas não passa essas solicitações para hardware, ainda deve criar um objeto de dispositivo para representar o destino de suas operações.
Para obter mais informações sobre como o driver pode criar objetos de dispositivo, consulte Criando um objeto de dispositivo.
Os dispositivos geralmente são representados por vários objetos de dispositivo, um para cada driver na pilha de driver que manipula solicitações de E/S para o dispositivo. Os objetos de dispositivo de um dispositivo são organizados em uma pilha de dispositivos. Sempre que uma operação é executada em um dispositivo, o sistema passa uma estrutura de dados IRP para o driver do objeto de dispositivo superior na pilha do dispositivo. Cada driver manipula o IRP ou o passa para o driver associado ao objeto de dispositivo mais baixo na pilha do dispositivo. Para obter mais informações sobre pilhas de dispositivos, consulte Exemplo de pilha de dispositivos WDM. Para obter mais informações sobre IRPs, consulte Manipulando IRPs.
Os objetos de dispositivo são representados por estruturas DEVICE_OBJECT , que são gerenciadas pelo gerenciador de objetos. O gerenciador de objetos fornece os mesmos recursos para objetos de dispositivo que ele faz para outros objetos do sistema. Em particular, um objeto de dispositivo pode ser nomeado e um objeto de dispositivo nomeado pode ter identificadores abertos nele. Para obter mais informações sobre objetos de dispositivo nomeados, consulte Objetos de dispositivo nomeados.
O sistema fornece armazenamento dedicado para cada objeto de dispositivo, chamado de extensão de dispositivo, que o driver pode usar para armazenamento específico do dispositivo. A extensão do dispositivo é criada e liberada pelo sistema junto com o objeto do dispositivo. Para obter mais informações, consulte Extensões de dispositivo.
A figura a seguir ilustra a relação entre objetos de dispositivo e o gerenciador de E/S.
A figura mostra os membros da estrutura DEVICE_OBJECT que são de interesse de um gravador de driver. Para obter mais informações sobre esses membros, consulte Creating a Device Object, Initializing a Device Object e Properties of Device Objects.