Compartilhar via


Usando uma interface de dispositivo

As interfaces do dispositivo estão disponíveis para componentes do modo kernel e aplicativos de modo de usuário. O código do modo de usuário pode usar funções CfgMgr32 (por exemplo, CM_Get_Device_Interface_List) ou funções SetupDiXxx (consulte SetupDi device interface functions) para saber mais sobre interfaces de dispositivo registradas e habilitadas. Em seguida, o aplicativo de modo de usuário pode usar APIs de E/S, como CreateFile , para obter um identificador para o dispositivo a fim de enviar E/S para ele. Para ser notificado sobre a habilitação e desabilitação de interfaces de dispositivo e como reagir a essas ações, consulte Registrando-se para notificação de chegada da interface do dispositivo e remoção do dispositivo.

Antes que um componente do modo kernel possa usar um dispositivo ou objeto de arquivo específico, ele deve fazer o seguinte:

  1. Determine se a classe de interface do dispositivo necessária está registrada e habilitada.

    Um driver pode se registrar no gerenciador PnP para ser notificado quando uma instância de uma interface de dispositivo estiver habilitada ou desabilitada. Para registrar, o componente chama IoRegisterPlugPlayNotification. Essa rotina armazena o endereço de um retorno de chamada fornecido pelo driver, que é chamado sempre que uma instância de uma instância de interface do dispositivo está habilitada ou desabilitada, para uma classe de dispositivo especificada. As rotinas de retorno de chamada recebem a estrutura DEVICE_INTERFACE_CHANGE_NOTIFICATION , que contém uma cadeia de caracteres Unicode que representa o link simbólico da instância de interface. Consulte Usando a notificação de alteração da interface do dispositivo PnP para obter mais informações.

    Um driver ou outro componente do modo kernel também pode chamar IoGetDeviceInterfaces para obter uma lista de todas as instâncias de interface de dispositivo registradas e habilitadas para uma classe de interface de dispositivo específica. A lista retornada contém ponteiros para as cadeias de caracteres de link simbólico Unicode que identificam as instâncias da interface do dispositivo.

  2. Obtenha um ponteiro para um dispositivo ou objeto de arquivo que corresponda a uma instância da interface.

    Para acessar um objeto de dispositivo específico, o driver deve chamar IoGetDeviceObjectPointer, passando a cadeia de caracteres Unicode para a interface necessária no parâmetro ObjectName . Para acessar um objeto de arquivo, o driver deve chamar InitializeObjectAttributes, passando a cadeia de caracteres Unicode no parâmetro ObjectName e, em seguida, passar a estrutura de atributo inicializada com êxito em uma chamada para ZwCreateFile.