Pregunta

Tengo curiosidad por saber cómo el administrador de dispositivos de Windows obtiene las ID de hardware de un dispositivo, aunque todavía no se haya cargado ningún controlador de dispositivo para el dispositivo. ¿Alguien tiene idea de cómo funciona Windows al respecto?

En una nota relacionada, estoy interesado en apoyar la localización del idioma para el software que estamos escribiendo; ¿Es posible que un dispositivo y / o controlador informe su nombre descriptivo y descripción de manera localizada? ¿Ya existe una práctica común para esto?

Gracias por su tiempo.

¿Fue útil?

Solución

Primero, para comprender el orden de carga de los controladores, se recomienda cambiar el Administrador de dispositivos a Ver | Dispositivos por modo de conexión .

Como notará, los dispositivos se encuentran debajo de su controlador de bus. Para dispositivos PCI, será & Quot; bus PCI & Quot ;. Para dispositivos USB, sería su hub USB. Cada controlador de bus tiene su propia idea sobre cómo se deben formatear las cadenas de identificación:

  • Id. de instancia de dispositivo
  • Id. de hardware
  • Id. compatibles
  • Ubicación, etc.

Los devuelve en respuesta a IRP_MN_QUERY_ID (BusQueryInstanceID, BusQueryHardwareIDs, BusQueryCompatibleIDs) y IRP_MN_QUERY_DEVICE_TEXT (DeviceTextDescription, DeviceTextLocationInformation etc.)

Por supuesto, dado que el controlador del bus enumeró los dispositivos (es decir, creó los dispositivos secundarios que está viendo) en primer lugar (a través de cualquier interfaz estándar apropiada para el bus; por ejemplo, 'Obtener dispositivo / Descriptor de cadena' en USB), conoce su ID de proveedor, ID de producto, etc.

No es necesario cargar el controlador del dispositivo en este momento. De hecho, no se puede cargar. Las ID de dispositivo son precisamente lo que indica al sistema PnP qué controlador coincide con el dispositivo.

En cuanto a la localización:

A diferencia de Parameters.QueryDeviceText.LocaleId, que proporciona cadenas opacas destinadas a la coincidencia de dispositivos, la información <=> estaba destinada a ser localizada. Para ese fin, recibirá el ID de configuración regional (LCID) solicitado en los datos de entrada (<=>).

[Como señaló Alphaneo, un controlador de concentrador USB puede pasar este LCID en adelante al dispositivo USB (dentro de una solicitud de Get String Descriptor), con la esperanza de que el dispositivo USB tenga cadenas localizadas.]

Otros consejos

El proceso de nivel superior se llama enumeración. La mayoría de los buses de dispositivos modernos admiten un mecanismo que permite al sistema operativo consultar los buses y determinar qué dispositivos están conectados al bus.

La familia de buses PCI admite enumeración. El bus PCI tiene un espacio de enumeración especial para esto. Aquí es donde & Quot; Plug-n-Play & Quot; Las identificaciones provienen de.

La identificación del dispositivo identifica de forma exclusiva un dispositivo en el bus y permite que el sistema operativo encuentre el controlador correcto para ese dispositivo.

Otros buses, incluidos USB y FireWire tienen estrategias de enumeración

ID del dispositivo, es una combinación de información proporcionada por el dispositivo. Por ejemplo, para un dispositivo USB, la cadena se basa en el VID y el PID (ID del proveedor e ID del producto). Ahora, esto no puede suceder si no se carga ningún controlador. Al menos un controlador, el controlador del bus tendría que cargarse para que el sistema operativo obtenga la ID del dispositivo.

Ahora, para el soporte de idiomas, supongo que para el controlador WDM, hay un QUERY_LANG o algo así, no recuerdo correctamente, alternativamente, algunos dispositivos como USB, tienen soporte de ID de idioma. Este ID de idioma determina el idioma de la cadena del descriptor del producto.

Tenga en cuenta que existe una diferencia entre el identificador de hardware / número de serie y la verdadera identificación de hardware única. Quizás esto lo explique mejor: http://www.soft.tahionic.com /download-hdd_id/hardware%20ID%20programmer%27s%20DLL.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top