Windows 7 の IEEE 1394 バス ドライバー

Windows 7 には、1394ohci.sys が含まれています。これは、IEEE-1394b 仕様で定義されているより高速な速度と代替メディアをサポートする、新しい IEEE 1394 バス ドライバーです。 1394ohci.sys バス ドライバーは、カーネルモード ドライバー フレームワーク (KMDF) を使用して実装された、1 つの (モノリシック) デバイス ドライバーです。 (以前のバージョンの Windows で利用できる) レガシ 1394 バス ドライバーには、ポート/ミニポート構成で Windows Driver Model (WDM) を使用して実装された複数のデバイス ドライバーが含まれています。 1394ohci.sys バス ドライバーは、レガシ ポート ドライバー (1394bus.sys) とプライマリ ミニポート ドライバー (ochi1394.sys) を置き換えます。

新しい 1394ohci.sys バス ドライバーには、レガシ バス ドライバーとの完全な下位互換性があります。 このトピックでは、新旧の 1394 バス ドライバーの動作に関するいくつかの既知の相違点について説明します。

Note

1394ohci.sys ドライバーは、Windows に含まれているシステム ドライバーです。 1394 コントローラーをインストールすると、自動的に読み込まれます。 個別にダウンロードできる再頒布可能なドライバーではありません。

I/O 要求の完了

1394ohci.sys バス ドライバーは WDM ではなく KMDF を使って実装されているため、新しい 1394 バス ドライバーに送信されるすべての I/O 要求は STATUS_PENDING を返します。 この動作は、特定の I/O 要求がすぐに完了するレガシ 1394 バス ドライバーとは異なります。

クライアント ドライバーは、新しい 1394 バス ドライバーに送信された I/O 要求が完了するまで待機する必要があります。 開発者は、要求の完了後に呼び出される I/O 完了ルーチンを提供できます。 完了した I/O 要求の状態は、IRP に含まれます。

構成 ROM の取得

新しい 1394 バス ドライバーは、バス速度がより高速な非同期ブロック トランザクションを使用して、ノードの構成 ROM の内容を取得しようとします。 レガシ 1394 バス ドライバーは、S100 の速度 (100 メガビット/秒 (Mbps)) の非同期 quadlet 読み取りを使用します。 また、1394ohci.sys バス ドライバーは、ノードの構成 ROM ヘッダーの generation エントリと max_rom エントリで指定されている値を使って、構成 ROM の残りの内容をより効率的に取得します。 新しい 1394 バス ドライバーがノードの構成 ROM の内容を取得する方法について詳しくは、「IEEE 1394 ノードの構成 ROM の内容の取得」を参照してください。

IEEE-1394-1995 PHY のサポート

1394ohci.sys バス ドライバーには、IEEE-1394a または IEEE-1394b をサポートする物理層 (PHY) が必要です。 IEEE-1394-1995 をサポートする PHY はサポートされていません。 この要件の理由は、1394ohci.sys バス ドライバーがショート (アービトレーションされた) バス リセットを排他的に使用するためです。

NODE_DEVICE_EXTENSION 構造体の使用法

クライアント ドライバーは、クライアント ドライバーが制御するデバイスの物理デバイス オブジェクト (PDO) に関連付けられている 1394 バス ドライバーのデバイス拡張を参照できます。 このデバイス拡張は、NODE_DEVICE_EXTENSION 構造体によって記述されます。 1394ohci.sys では、この構造体は引き続きレガシ 1394 バス ドライバーと同じ場所にありますが、構造体の非静的メンバーは有効ではない可能性があります。 クライアント ドライバーが新しい 1394 バス ドライバーを使用する場合は、NODE_DEVICE_EXTENSION でアクセスされるデータが有効であることを確認する必要があります。 有効なデータを含む NODE_DEVICE_EXTENSION の静的メンバーは、TagDeviceObjectPortDeviceObject です。 NODE_DEVICE_EXTENSION のその他のメンバーはすべて非静的であり、クライアント ドライバーは参照できません。

ギャップ数の最適化

1394ohci.sys バス ドライバーの既定の動作では、1394 バス上に IEEE 1394a デバイスのみが検出された場合 (ローカル ノードを除く)、ギャップ数を最適化します。 たとえば、1394ohci.sys を実行しているシステムに IEEE 1394b に準拠したホスト コントローラーがあるが、バス上のすべてのデバイスが IEEE 1394a に準拠している場合、新しい 1394 バス ドライバーはギャップ数の最適化を試みます。

ギャップ数の最適化は、ローカル ノードがバス マネージャーであると 1394ohci.sys バス ドライバーが判断した場合にのみ発生します。

1394ohci.sys バス ドライバーは、ノードのセルフ ID パケットの速度設定によって、デバイスが IEEE-1394a に準拠しているかどうかを判断します。 ノードがセルフ ID パケットの速度 (sp) フィールドで両方のビットを設定している場合、1394ohci.sys はそのノードが IEEE-1394b に準拠していると見なします。 速度フィールドに他の値が含まれている場合、1394ohci.sys はそのノードが IEEE-1394a に準拠していると見なします。 使用されるギャップ数の値は、ホップ数の関数としてギャップ数を提供する、IEEE-1394a 仕様の表 E-1 に基づいています。 1394ohci.sys バス ドライバーは、ギャップ数を計算しません。 レジストリ値を使用して、既定のギャップ数の動作を変更できます。 詳しくは、「IEEE 1394 バス ドライバーの既定の動作を変更する」を参照してください。

デバイス ドライバー インターフェイス (DDI) の変更

Windows 7 で、1394 DDI は 1394b 仕様で定義されているより高速な速度をサポートするように変更され、1394 クライアント ドライバーの開発が簡単になるように改善されました。 新しい 1394 バス ドライバーでサポートされる一般的な DDI の変更について詳しくは、「Windows 7 でのデバイス ドライバー インターフェイス (DDI) の変更」を参照してください。

IEEE 1394 ドライバー スタック
IEEE 1394 ノードの構成 ROM の内容の取得