IEEE 1394 ドライバー スタック

次の図は、新しい 1394 バス ドライバーと Microsoft がサポートする 1394 クライアント ドライバーを含む IEEE 1394 ドライバー スタックを示しています。

diagram illustrating the ieee 1394 driver stack.

IEEE 1394 バス ドライバーに接続するデバイスのクライアント ドライバーは、IEEE 1394 ドライバー スタックの一番上に位置します。 バス ドライバーは、IEEE 1394 バスへのハードウェアに依存しないインターフェイスを提供します。 デバイス ドライバーは、IEEE 1394 バス ドライバーによって処理される IRP を送信することで、デバイスと通信します。 Windows 7 より前のバス ドライバーは、ポート ドライバー (1394bus.sys) と、マザーボードのホスト コントローラーのプライマリ ミニポート ドライバー (ochi1394.sys) の組み合わせでした。 Windows 7 以降のバージョンでは、従来のポート/ミニポート バス ドライバーは 1394ohci.sys に置き換えられます。これは、カーネルモード ドライバー フレームワーク (KMDF) を使って実装された IEEE 1394 のモノリシック バス ドライバーです。 1394ohci.sys バス ドライバーには、レガシ 1394 バス ドライバーとの完全な下位互換性があります。 新しいバス ドライバーとレガシ 1394 バス ドライバーの動作に関するいくつかの既知の相違点について詳しくは、「Windows 7 の IEEE 1394 バス ドライバー」を参照してください。

次の図は、レガシ 1394 バス ドライバーと新しい 1394 バス ドライバーの関係を示しています。

Diagram showing the relationship between the legacy and the new 1394 bus drivers.

バスに接続されているデバイスにコマンドを発行するために、ドライバーは制御コード IOCTL_1394_CLASS を使用して IRP_MJ_DEVICE_CONTROL IRP を発行します。 ドライバーは、IEEE 1394 I/O 要求ブロック (IRB) にパラメーターをパッケージ化して、それを指すポインターを IRP の Parameters.Others.Argument1 メンバーで渡します。 IRB の FunctionNumber メンバーで操作の種類を決定し、u メンバーで操作内容を記述します。 バス ドライバーは、IOCTL_1394_CLASS IRP を使用して、バスとホスト コントローラー両方へのインターフェイスを提供します。

IRB 構造体には、各バス要求に適用されるパラメーターと、要求固有のパラメーターが含まれています。 IRB の u メンバーには、要求の種類ごとに 1 つずつ、要求固有のパラメーターがデータ構造の共用体に含まれています。

通常の操作では、ドライバーは一般的な I/O 要求 (IRP_MJ_READ など) を受け取り、適切な IEEE 1394 操作に変換し、IOCTL_1394_CLASS を介してその操作をデバイスにディスパッチします。

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