Compartir a través de


Uso de una interfaz de dispositivo

Las interfaces de dispositivo están disponibles para los componentes del modo kernel y las aplicaciones en modo de usuario. El código en modo de usuario puede usar funciones CfgMgr32 (por ejemplo, CM_Get_Device_Interface_List) o funciones SetupDiXxx (consulte Funciones de interfaz de dispositivo SetupDi) para obtener información sobre las interfaces de dispositivo registradas y habilitadas. Después, la aplicación en modo de usuario puede usar API de E/S como CreateFile para obtener un identificador para el dispositivo con el fin de enviar E/S a él. Para recibir notificaciones sobre la habilitación y deshabilitación de las interfaces de dispositivo y cómo reaccionar a esas acciones, consulte Registro para la notificación de la llegada de la interfaz de dispositivo y la eliminación de dispositivos.

Para que un componente en modo kernel pueda usar un dispositivo o objeto de archivo específico, debe hacer lo siguiente:

  1. Determine si la clase de interfaz de dispositivo necesaria está registrada y habilitada.

    Un controlador puede registrarse con el administrador de PnP para recibir una notificación cuando una instancia de una interfaz de dispositivo está habilitada o deshabilitada. Para registrarse, el componente llama a IoRegisterPlugPlayNotification. Esta rutina almacena la dirección de una devolución de llamada proporcionada por el controlador, a la que se llama cada vez que una instancia de una instancia de interfaz de dispositivo está habilitada o deshabilitada, para una clase de dispositivo especificada. Las rutinas de devolución de llamada reciben la estructura DEVICE_INTERFACE_CHANGE_NOTIFICATION , que contiene una cadena Unicode que representa el vínculo simbólico de la instancia de interfaz. Consulte Uso de la notificación de cambio de interfaz de dispositivo PnP para obtener más información.

    Un controlador u otro componente de modo kernel también puede llamar a IoGetDeviceInterfaces para obtener una lista de todas las instancias de interfaz de dispositivo registradas y habilitadas para una clase de interfaz de dispositivo específica. La lista devuelta contiene punteros a las cadenas de vínculo simbólico Unicode que identifican las instancias de la interfaz del dispositivo.

  2. Obtiene un puntero a un dispositivo o objeto de archivo que corresponde a una instancia de la interfaz.

    Para acceder a un objeto de dispositivo específico, el controlador debe llamar a IoGetDeviceObjectPointer y pasar la cadena Unicode para la interfaz necesaria en el parámetro ObjectName . Para obtener acceso a un objeto de archivo, el controlador debe llamar a InitializeObjectAttributes, pasando la cadena Unicode en el parámetro ObjectName y, a continuación, pasar la estructura de atributos inicializada correctamente en una llamada a ZwCreateFile.