USBPRINT.SYS によって生成された識別子

Windows 2000 以降では、オペレーティング システムはカーネル モードの USB 印刷ドライバーを提供し、 プリンター サブシステムを USB スタックに接続する usbprint.sys を提供します。 ネイティブ USB プリンター ドライバーは、独自のカーネル モード USB プリンター ドライバーを開発する必要性からベンダーを解放します。 これにより、ベンダーは、USB プリンターと並列プリンターの両方で動作する高度なユーザー モード プリンター ドライバーを開発できます。

usbprint.inf インストール ファイルには、すべての USB クラス 7 プリンター デバイスと一致する互換性のある ID が含まれています。 USB ハブ ドライバーがこれらのデバイスのいずれかを列挙する場合、オペレーティング システムは、ハブ ドライバーが usbprint.inf 生成する ID の一致を検索し、USB プリンター ドライバーを読み込みます usbprint.sysusbprint.inf で見つかった互換性のある ID の形式は次のとおりです。

クラス

ここで:

  • クラス 07h = USB プリンター クラスに属するデバイス

読み込まれるとすぐに、USB プリンター ドライバーは、プリンター デバイスの新しい PDO を作成します。 プラグ アンド プレイ (PnP) マネージャーが、新しく作成された PDO のデバイス識別文字列を照会すると、USB プリンター ドライバーは、デバイスの I Enterprise Edition E 1284 文字列から派生した、並列バス列挙子によって生成された文字列識別子と互換性のある新しいハードウェア ID を作成します。 このハードウェアIDの形式は次のとおりです。

USBPRINT\NameModel(20)Checksum(4)

ここで:

  • NameModel(20) は、製造元名とデバイスのモデルを連結したものです。最大 20 文字に切り捨てられます。

  • Checksum(4) は、製造元名とモデル名から計算される 4 文字の循環冗長チェック (CRC) コードです。

文字列内のスペースはアンダースコアに置き換えられます。 たとえば、製造元の名前が "Hewlett-Packard" で、モデル名が "HP Color LaserJet 550" で、チェックsum が 3115 の場合、ハードウェア ID は次のようになります。

USBPRINT\Hewlett-PackardHP_Co3115

前の例では、モデル名の "HP" と "Color" の間のスペースがアンダースコアに置き換えられ、切り捨てられた make/model 文字列 "Hewlett-PackardHP_Co" が生成されました。

メモ オペレーティング システムによって生成される CRC は、前のセクションで説明したように計算される CRC、または他の CRC アルゴリズムと一致しない可能性があります。 その結果、プリンター ドライバーは、プリンター ドライバーの INF ファイルで使用する正しい hardwareID を計算できない可能性があります。 hardwareID を取得するには、インストールされている USB プリンターに関連付けられているsetupapi.dev.log ファイルを検索することをお勧めします。