OID_RECEIVE_FILTER_ALLOCATE_QUEUE
上部のドライバーは、OID_RECEIVE_FILTER_ALLOCATE_QUEUE のオブジェクト識別子 (OID) メソッド要求を発行して、構成パラメーターの初期セットが含まれているキューを割り当てます。
NDIS_OID_REQUEST 構造体の InformationBuffer メンバーには、NDIS_RECEIVE_QUEUE_PARAMETERS 構造体へのポインターが含まれています。 OID メソッド要求から正常に戻った後、InformationBuffer メンバー (NDIS_OID_REQUEST 構造のメンバー) には、新しいキュー識別子を持つ NDIS_RECEIVE_QUEUE_PARAMETERS 構造体へのポインターが含まれます。
解説
OID_RECEIVE_FILTER_ALLOCATE_QUEUE の OID メソッド要求は、NDIS 6.20 およびこれ以降のミニポート ドライバーではオプションになります。 これは、仮想マシン キュー (VMQ) インターフェイスをサポートするミニポート ドライバーには必須のものです。
上位ドライバーは、要求されたキュー構成を使用して NDIS_RECEIVE_QUEUE_PARAMETERS 構造体を初期化します。 NDIS は NDIS_RECEIVE_QUEUE_PARAMETERS 構造体の QueueId メンバー内のキュー識別子を割り当て、ミニポート ドライバーにメソッド要求を渡します。
注 上部のドライバーは、NDIS_RECEIVE_QUEUE_PARAMETERS 構造体の Flags メンバー内の NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION and NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED フラグを設定できます。 その他のフラグは、キューの割り当てには使用されません。
ミニポート ドライバーが OID_RECEIVE_FILTER_ALLOCATE_QUEUE の OID 要求を発行し、正常に処理した後、キューは一時停止状態になります。
上部のドライバーは、たとえば、キューパラメーターを変更したり、キューを解放したりするために、後続の OID 要求で NDIS が提供するキュー識別子を使用する必要があります。 キュー識別子は、キューに関連付けられているすべての NET_BUFFER_LIST 構造の帯域外 (OOB) データにも含まれます。 ドライバーは、NET_BUFFER_LIST_RECEIVE_QUEUE_ID マクロを使用して、NET_BUFFER_LIST 構造体のキュー識別子を取得します。
NDIS は、受信キューを割り当てるための OID 要求を受信すると、キューのパラメーターを検証します。 NDIS は、必要なリソースとキュー識別子を割り当てた後、基になるミニポート ドライバーに OID 要求を送信します。 キュー識別子は、関連付けられているネットワーク アダプターに対して一意です。
ミニポート ドライバーは、受信キューに必要なソフトウェアとハードウェア リソースを正常に割り当てることができる場合は、NDIS_STATUS_SUCCESS を実行して OID 要求を完了します。
ミニポート ドライバーは、割り当てられた受信キューのキュー識別子を保持する必要があります。 NDIS は、受信キューの受信フィルターの設定、受信キューのパラメーターの変更、または受信キューの解放を行うために、ミニポート ドライバーへの後続の呼び出しの受信キューのキュー識別子を使用します。
上部のドライバーは、1 つ以上の受信キューを割り当て、必要に応じて初期フィルターを設定した後、OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE を発行して、受信キューの現在のバッチへの割り当てが完了したことをミニポート ドライバーに通知するように OID 要求を設定する必要があります。
ミニポート ドライバーは、そのキューに設定されているフィルターがない場合は、受信キュー内のパケットを保持してはなりません。 キューにフィルターが一度も設定されていない場合、またはすべてのフィルターがクリアされた場合は、キューを空にし、パケットを破棄する必要があります。 つまり、パケットは、ドライバー スタックに示されたり、キューに保持されたりしません。
上部のドライバーは、OID_RECEIVE_FILTER_FREE_QUEUE OID 要求を使用して、割り当てるキューを解放します。
状態コードを返す
NDIS またはミニポート ドライバーは、OID_RECEIVE_FILTER_ALLOCATE_QUEUE の OID メソッド要求の次の状態コードのいずれかを返します。
状態コード | 説明 |
---|---|
NDIS_STATUS_SUCCESS |
キューが正常に割り当てられました。 情報バッファーには、更新 された NDIS_RECEIVE_QUEUE_PARAMETERS 構造体が含まれています。 |
NDIS_STATUS_PENDING |
要求の完了が保留中です。 最終的な状態コードと結果は、呼び出し元の OID 要求完了ハンドラーに渡されます。 |
NDIS_STATUS_INVALID_PARAMETER |
上位ドライバーが指定した 1 つ以上のパラメーターが無効でした。 |
NDIS_STATUS_INVALID_LENGTH |
情報バッファーが短すぎました。 NDIS は、NDIS_OID_REQUEST 構造体の DATA.METHOD_INFORMATION.BytesNeeded メンバーを必要な最小バッファー サイズに設定します。 |
NDIS_STATUS_NOT_SUPPORTED |
ミニポート ドライバーの NDIS バージョンは、バージョン 6.20 以前のものです。 |
NDIS_STATUS_FAILURE |
その他の理由で要求に失敗しました。 |
要件
バージョン |
NDIS 6.20 以降でサポートされています。 |
ヘッダー |
Ntddndis.h (Ndis.h を含む) |
関連項目
NET_BUFFER_LIST_RECEIVE_QUEUE_ID