Visão geral das classes de interface do dispositivo

Qualquer driver de um dispositivo físico, lógico ou virtual para o qual o código de modo de usuário pode direcionar solicitações de E/S deve fornecer um nome para seus clientes no modo de usuário. Usando o nome, um aplicativo de modo de usuário (ou outro componente do sistema) identifica o dispositivo do qual está solicitando E/S.

No Windows NT 4.0 e versões anteriores do sistema operacional baseado em NT, os drivers nomearam seus objetos de dispositivo e, em seguida, configuraram links simbólicos no registro entre esses nomes e um nome lógico Win32 visível pelo usuário.

A partir do Windows 2000, os drivers não nomeam objetos de dispositivo. Em vez disso, eles fazem uso de interfaces de dispositivo que são agrupadas por classes de interface do dispositivo. Uma classe de interface de dispositivo é uma maneira de exportar a funcionalidade de dispositivo e driver para outros componentes do sistema, incluindo outros drivers, bem como aplicativos de modo de usuário. Um driver pode registrar e habilitar uma instância de interface do dispositivo da classe de interface do dispositivo para cada objeto de dispositivo para o qual as solicitações de E/S do modo de usuário podem ser enviadas. Cada classe de interface do dispositivo deve representar uma funcionalidade conceitual que qualquer interface de dispositivo nessa classe deve dar suporte ou representar, como um contrato de E/S específico.

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

Por exemplo, três tipos diferentes de dispositivos de mouse podem registrar interfaces de dispositivo que são membros da mesma classe de interface do dispositivo, mesmo que uma se conecte por meio de uma porta USB, uma segunda por meio de uma porta serial e a terceira por meio de uma porta infravermelha. Cada driver registra seu dispositivo como membro da classe de interface GUID_DEVINTERFACE_MOUSE. Esse GUID é definido no arquivo de cabeçalho Ntddmou.h.

Os drivers podem registrar e habilitar interfaces de dispositivo para um dispositivo que controlam para o máximo de classes de interface do dispositivo para as quais o dispositivo e o driver dão suporte à funcionalidade. Por exemplo, um driver para um disco que pode ser montado deve registrar-se para sua classe de interface de disco (GUID_DEVINTERFACE_DISK) e a classe de dispositivo montável (MOUNTDEV_MOUNTED_DEVICE_GUID).

Quando um driver registra uma instância de interface do dispositivo de uma classe de interface do dispositivo, o gerenciador de E/S associa o dispositivo e o GUID da classe de interface do dispositivo a um nome de link simbólico. O driver deve habilitar a interface do dispositivo para que esse link simbólico possa ser usado para que um driver ou aplicativo envie E/S. O registro do nome do link persiste entre as inicializações do sistema, mas a interface do dispositivo deve ser habilitada pelo driver em cada enumeração do dispositivo. Um aplicativo que usa uma classe de interface de dispositivo específica pode consultar instâncias das interfaces de dispositivo nessa classe e receber uma lista de nomes de link simbólicos que representam dispositivos que dão suporte à interface. Em seguida, o aplicativo pode usar o nome do link simbólico como um destino para solicitações de E/S.

Não confunda interfaces de dispositivo com as interfaces que os drivers podem exportar em resposta a uma solicitação de IRP_MN_QUERY_INTERFACE . Esse IRP é usado para passar pontos de entrada de rotina entre drivers no modo kernel.