NDIS 仮想マシン キューの状態

このトピックでは、NDIS 仮想マシン キュー (VMQ) の動作状態の概要について説明します。 キューの状態の詳細については、Writing VMQ Driversセクションの「キューの状態と操作」トピックを参照してください。

各キューについて、ネットワーク アダプターは次の一連の操作状態をサポートする必要があります。

  • Undefined

  • Allocated

  • Set

  • 一時停止

  • 実行中

  • DMA を停止する

  • 解放

次の図は、これらの状態間の関係を示しています。

Diagram illustrating NDIS VM queue states and their relationships.

以下に、アダプターの状態を定義します。

未定義。
未定義 はキューの初期状態です。 この状態では、キューは割り当てされていません。 キュー (常に存在する既定のキューを除く) は、ミニポート ドライバーがキュー割り当て要求を受け取るまで未定義です。 また、フリーの操作が完了し、開始された受信表示が完了した後は未定義です。

Allocated
キューは、割り当て要求の後、キューにフィルタが設定される前に、割り当て済み状態になります。 またキューがセット状態で、最後のフィルタがキュー上でクリアされている場合にも、フィルタは割り当て済み状態に入ることができます。 ミニポート ドライバーが割り当て済み状態にある間にミニポート ドライバーが割り当て完了要求を受信した場合、キューは一時停止状態になります。 ミニポート ドライバーがキューの空き要求を受信した場合、キューは DMA 停止状態になります。

セット
セット状態では、キューが割り当てられ、キューに少なくとも 1 つのフィルタが設定されていますが、ミニポート ドライバーはまだ割り当て完了 OID を受信していません。 キューは、割り当て完了要求を受信すると、実行中の状態になります。 キューの最後のフィルターがクリアされると、キューは割り当て済み状態になります。 キューにフィルタが設定されている間は、キューを解放できないことに注意してください。

一時停止
一時停止状態では、キューは割り当てられますが、そのミニポート ドライバーは、キューにフィルターが設定されていないため、受信したパケットを示していません。 ミニポート ドライバーは、割り当て済み状態または実行中の状態のいずれかから一時停止状態に入ることができます。 キューは、フィルタセット要求を受信すると、実行中の状態になります。 キューの空き要求を受信すると、キューは DMA 停止状態になります。

実行中
実行中の状態では、キューにフィルタが設定され、キューの割り当てが完了し、ネットワークアダプターがパケットを受信することを示します。 キューの最後のフィルターがクリアされると、キューは一時停止状態になります。 キューにフィルタが設定されている間は、キューを解放できないことに注意してください。 また、ミニポート ドライバーは、最後のフィルタがクリアされた場合に DMA を停止することができます。 ただし、この場合、ミニポート ドライバーは DMA 停止状態表示を送信すべきではありません。

DMA を停止する
DMA 停止状態では、ミニポート ドライバーはキューの空き要求を受信し、DMA アクティビティを停止する必要があります。 ミニポート ドライバーは、DMA 停止状態表示を送信する必要があります。 ミニポート ドライバーが状態表示を送信した後、キューは解放状態になります。 最後のフィルターがクリアされたときに、DMA が既に停止していた可能性があることに注意してください。 ただし、ミニポート ドライバーは、キューの空き要求を受信した場合にのみ状態表示を送信する必要があります。

解放
解放状態では、ミニポート ドライバーは、キュー上のすべての未処理の受信指示が完了するのを待っており、キューに関連付けられたリソースを解放しています。 すべてのリソースが解放されると、キューは未定義の状態になります。