Pergunta

Estou curioso como o gerenciador de janelas dispositivo obtém os IDs de hardware para um dispositivo, mesmo que nenhum driver de dispositivo pode ser carregado para o dispositivo ainda. Alguém tem uma pista sobre como o Windows continua sobre isso?

Em uma nota relacionada, eu estou interessado em apoiar localização de idioma para o software que está escrevendo; é possível para um dispositivo e / ou condutor a informar seu nome e descrição amigável de uma forma localizada? Existe uma prática comum para isso já?

Obrigado pelo seu tempo.

Foi útil?

Solução

Em primeiro lugar, para compreender a ordem do controlador carregado, você está recomendado para mudar o Gerenciador de dispositivos em Ver | Dispositivos por conexão de modo.

Como você vai notar, os dispositivos estão localizados abaixo do seu motorista. Para dispositivos PCI, vai ser "bus PCI". Para dispositivos USB, seria seu hub USB. Cada motorista tem a sua própria idéia sobre como as cordas identificador deve ser formatado:

  • Dispositivo Instância Id
  • Hardware Ids
  • IDs compatíveis
  • Localização, etc.

Ele retorna-los em resposta a IRP_MN_QUERY_ID (BusQueryInstanceID, BusQueryHardwareIDs, BusQueryCompatibleIDs) e IRP_MN_QUERY_DEVICE_TEXT (DeviceTextDescription, DeviceTextLocationInformation etc.)

Claro, desde que o motorista do ônibus enumerou os dispositivos (ou seja, criou os dispositivos filho que você está vendo) em primeiro lugar (através de qualquer padrão apropriado interface para o ônibus, por exemplo, 'Get Dispositivo / String descritor' on USB), ele sabe o seu ID do fornecedor, ID do produto etc.

O motorista do dispositivo não tem que ser carregado no momento. Na verdade, ele não pode ser carregado. Os IDs de dispositivos são precisamente o que instrui o sistema PnP de qual condutor corresponde ao dispositivo.

Quanto à localização:

IRP_MN_QUERY_ID Ao contrário, o qual fornece cordas opacos destinados à correspondente dispositivo, a informação IRP_MN_QUERY_DEVICE_TEXT foi de facto destina-se a ser localizada. Para o efeito, receberá a Locale ID solicitado (LCID) nos dados de entrada (Parameters.QueryDeviceText.LocaleId).

[Alphaneo Como notado, um controlador USB cubo pode passar esta LCID em diante para o dispositivo USB (dentro de um pedido GET Cadeia descritor), na esperança de que o próprio dispositivo USB tem localizada cordas.]

Outras dicas

O processo de nível superior é chamado de enumeração. A maioria dos modernos ônibus dispositivo suportar um mecanismo que permite a consulta OS Buss e determinar quais dispositivos estão conectados ao barramento.

A família PCI de ônibus todo o apoio enumeração. O barramento PCI tem uma especial enumeração espaço apenas para isso. Este é o lugar onde "Plug-n-Play" da ID vêm.

O ID do dispositivo é identificar um dispositivo no barramento e permitir que o sistema operacional para encontrar o driver correto para esse dispositivo.

Outros ônibus, incluindo USB e FireWire têm estratégias de enumeração

ID do dispositivo, é uma combinação de informação dada a partir do dispositivo. Por exemplo, para um dispositivo USB, a seqüência é baseado no VID e PID (Vendor ID e Product ID). Agora, isso não pode acontecer se nenhum driver é carregado. Pelo menos alguns motorista, motorista de ônibus teria de ser carregado para o sistema operacional para obter o ID do dispositivo.

Agora, para suporte ao idioma, eu acho que para WDM, há uma QUERY_LANG ou algo assim, eu não me lembro corretamente, alternativamente, alguns dispositivos como USB, tem suporte de idiomas ID. Este ID de idioma determina o idioma da corda descritor do produto.

Por favor, note que há uma diferença entre o número identificador de hardware / serial eo verdadeiro ID de hardware exclusivo. Talvez isso irá explicar melhor: http://www.soft.tahionic.com /download-hdd_id/hardware%20ID%20programmer%27s%20DLL.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top