Visão geral das classes de interface de dispositivos

Qualquer driver de um dispositivo físico, lógico ou virtual para o qual o código em modo utilizador possa direcionar pedidos de E/S deve fornecer um nome para os seus clientes em modo utilizador. Usando o nome, uma aplicação em modo utilizador (ou outro componente do sistema) identifica o dispositivo ao qual está a pedir E/S.

No Windows NT 4.0 e versões anteriores do sistema operativo baseado em NT, os drivers nomeavam os seus objetos de dispositivo e depois configuravam ligações simbólicas no registo entre esses nomes e um nome lógico Win32 visível pelo utilizador.

A partir do Windows 2000, os drivers não nomeiam os objetos do dispositivo. Em vez disso, utilizam interfaces de dispositivo agrupadas por classes de interface de dispositivo. Uma classe de interface de dispositivo é uma forma de exportar funcionalidades de dispositivos e drivers para outros componentes do sistema, incluindo outros drivers, bem como aplicações em modo utilizador. Um driver pode registar e ativar uma instância de interface de dispositivo da classe interface de dispositivo para cada objeto de dispositivo para o qual possam ser enviados pedidos de E/S em modo utilizador. Cada classe de interface de dispositivo deve representar uma funcionalidade conceptual que qualquer interface de dispositivo nessa classe deve suportar ou representar, como um contrato de E/S particular.

Cada classe de interface de dispositivo está associada a um GUID. O sistema define GUIDs para classes comuns de interface de dispositivo em ficheiros de cabeçalho específicos do dispositivo. Os fornecedores podem criar classes adicionais de interface de dispositivos.

Por exemplo, três tipos diferentes de dispositivos de rato poderiam registar interfaces de dispositivos que pertencem à mesma classe de interface de dispositivo, mesmo que uma se ligue por uma porta USB, uma segunda por uma porta série e a terceira por uma porta de infravermelhos. Cada driver regista o seu dispositivo como membro da classe de interface GUID_DEVINTERFACE_MOUSE. Este GUID está definido no ficheiro de cabeçalho Ntddmou.h.

Os drivers podem registar e ativar interfaces de dispositivo para um dispositivo que controlam, para tantas classes de interface de dispositivo quantas aquelas para as quais o dispositivo e o controlador suportem essa funcionalidade. Por exemplo, um driver para um disco que pode ser montado deve registar-se tanto para a sua classe de interface de disco (GUID_DEVINTERFACE_DISK) como para a classe de dispositivo montável (MOUNTDEV_MOUNTED_DEVICE_GUID).

Quando um driver regista uma instância de interface de dispositivo de uma classe de interface de dispositivo, o gestor de E/S associa o dispositivo e o GUID da classe de interface do dispositivo a um nome de ligação simbólico. O driver deve ativar a interface do dispositivo para que essa ligação simbólica seja utilizável para um driver ou aplicação enviar I/O. O registo do nome da ligação persiste ao longo dos inicios do sistema, mas a interface do dispositivo deve ser ativada pelo controlador em cada enumeração do dispositivo. Uma aplicação que utiliza uma determinada classe de interface de dispositivo pode consultar instâncias das interfaces de dispositivo nessa classe e receber uma lista de nomes de ligação simbólica que representam dispositivos que suportam a interface. A aplicação pode então usar o nome da ligação simbólica como destino para pedidos de E/S.

Não confunda interfaces de dispositivo com as interfaces que os drivers podem exportar em resposta a um pedido IRP_MN_QUERY_INTERFACE . Esse IRP é usado para passar pontos de entrada rotineiros entre controladores de modo kernel.