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 do 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 ele está solicitando E/S.

Em 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 nomeia objetos de dispositivo. Em vez disso, eles usam interfaces de dispositivo que são agrupadas por classes de interface do dispositivo. Uma classe de interface do dispositivo é uma maneira de exportar a funcionalidade de dispositivo e driver para outros componentes do sistema, incluindo outros drivers, bem como aplicativos no 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 do 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 uma porta serial e a terceira por meio de uma porta infravermelha. Cada driver registra seu dispositivo como um 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 eles controlam para o maior número de classes de interface do dispositivo para o qual 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 gerente 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 seja utilizável 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 do 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.