Windows 2000 以降では、オペレーティング システムはカーネル モードの USB 印刷ドライバー を提供し、プリンター サブシステムを USB スタックに接続するusbprint.sysを提供します。 ネイティブ USB プリンター ドライバーは、独自のカーネル モード USB プリンター ドライバーを開発する必要性からベンダーを解放します。 これにより、ベンダーは、USB プリンターと並列プリンターの両方で動作する高度なユーザー モード プリンター ドライバーを開発できます。
usbprint.inf インストール ファイルには、すべての USB クラス 7 プリンター デバイスと一致する互換性のある ID が含まれています。 USB ハブ ドライバーがこれらのデバイスのいずれかを列挙する場合、オペレーティング システムは、ハブ ドライバーが usbprint.inf で生成する ID の一致を検索し、USB プリンター ドライバーを読み込みます usbprint.sys。 usbprint.inf で見つかった互換性のある ID の形式は次のとおりです。
USB\CLASS_07
場所は:
- クラス 07h = USB プリンター クラスに属するデバイス
読み込まれるとすぐに、USB プリンター ドライバーは、プリンター デバイスの新しい PDO を作成します。 プラグ アンド プレイ (PnP) マネージャーが、新しく作成された PDO のデバイス識別文字列を照会すると、USB プリンター ドライバーは、並列バス列挙子によって生成された文字列識別子と互換性のあるデバイスの IEEE 1284 文字列から派生した新しいハードウェア ID を作成します。 このハードウェア ID の形式は次のとおりです。
USBPRINT\NameModel(20)Checksum(4)
場所は:
NameModel(20) は、製造元名とデバイスのモデルを連結したものです。最大 20 文字に切り捨てられます。
Checksum(4) は、製造元名とモデル名から計算される 4 文字の循環冗長チェック (CRC) コードです。
文字列内のスペースはアンダースコアに置き換えられます。 たとえば、製造元の名前が "Hewlett-Packard" で、モデル名が "HP Color LaserJet 550" で、チェックサムが 3115 の場合、ハードウェア ID は次のようになります。
USBPRINT\Hewlett-PackardHP_Co3115
前の例では、モデル名の "HP" と "Color" の間のスペースがアンダースコアに置き換えられ、切り捨てられた make/model 文字列 "Hewlett-PackardHP_Co" が生成されました。
手記 オペレーティング システムによって生成される CRC は、前のセクションで説明したように計算される CRC、またはその他の CRC アルゴリズムと一致しない場合があります。 その結果、プリンター ドライバーは、プリンター ドライバーの INF ファイルで使用する正しい hardwareID を計算できない可能性があります。 hardwareID を取得するには、インストールされている USB プリンターに関連付けられているsetupapi.dev.log ファイルを検索することをお勧めします。