2009-05-09 4 views
0

Windowsデバイスマネージャがデバイス用のハードウェアIDを取得する方法が不明です。誰でもWindowsがこれについてどうやって動くかについての手がかりを持っていますか?WindowsデバイスマネージャとハードウェアID

関連するノートでは、私が書いているソフトウェアの言語ローカリゼーションをサポートすることに興味があります。デバイスやドライバがフレンドリーな名前と説明をローカライズされた方法で報告することは可能でしょうか?これはすでに一般的な練習ですか?

お時間をいただきありがとうございます。

答えて

5

まず、ドライバのロード順序を理解するために、デバイスマネージャをに切り替えることをお勧めします。 Devices by Connectionモード。

お気づきのように、デバイスはバスドライバの下にあります。 PCIデバイスの場合、「PCIバス」になります。 USBデバイスの場合、USBハブになります。

  • デバイスインスタンスID
  • ハードウェアID
  • 互換性のIds
  • 場所などが返す

:各バスの運転手は、識別文字列の書式設定方法について独自の考えを持っていますIRP_MN_QUERY_IDBusQueryInstanceID,BusQueryHardwareIDs,BusQueryCompatibleIDs)、IRP_MN_QUERY_DEVICE_TEXT(,DeviceTextLocationInformationなど)

もちろん、バスドライバは、最初に(バスに適したどのような標準インターフェースを使用しても、例えばUSB上のデバイス/ストリング記述子を取得する)、ベンダーID、製品IDなどを知ることができます。

この時点でデバイスのドライバを読み込む必要はありません。実際、ロードすることはできません。デバイスIDは、PnPシステムにどのドライバがデバイスに一致するかを正確に指示するものです。ローカライズとしては

IRP_MN_QUERY_ID異なり

、デバイスマッチングのために意図不透明な文字列を提供し、IRP_MN_QUERY_DEVICE_TEXT情報が実際に局在することが意図されていました。この目的のために、入力データ(Parameters.QueryDeviceText.LocaleId)で要求されたロケールID(LCID)を受け取ります。

[Alphaneoが指摘したように、USBハブドライバがUSBデバイス自体が文字列をローカライズしていることを期待して、(ゲットストリング・ディスクリプタの要求内の)USBデバイスに以降このLCIDを渡すかもしれません。]

1

トップレベルのプロセスは列挙と呼ばれます。最新のデバイスバスのほとんどは、OSがバスに問い合わせを行い、どのデバイスがバスに接続されているかを判断するメカニズムをサポートしています。

バスのPCIファミリはすべて列挙をサポートしています。 PCIバスには専用のenumeration spaceがあります。これは「プラグアンドプレイ」IDの出所です。

デバイスIDは、バス上のデバイスを一意に識別し、OSがそのデバイス用の正しいドライバを見つけることを可能にします。 USBおよびFireWireなど

他のバスは、列挙戦略

1

デバイスIDを有している、装置から与えられた情報の組み合わせです。たとえば、USBデバイスの場合、文字列はVIDとPID(ベンダIDとプロダクトID)に基づいています。ドライバがロードされていなければ、これは起こりません。デバイスのIDを取得するためには、OSのために少なくとも一部のドライバ、バスドライバをロードする必要があります。

言語サポートのために、QUERY_LANGなどがあります。私は正しく覚えていません。あるいは、USBのようなデバイスの一部に言語IDがサポートされています。この言語IDは、Productデスクリプタ文字列の言語を決定します。

関連する問題