逆シリアル化された NDIS ミニポート ドライバー
すべての NDIS 6.0 以降のドライバーが 逆シリアル化されます。
逆シリアル化された NDIS ミニポート ドライバー は、独自の MiniportXxx 関数の操作をシリアル化し、これらの関数を実行する NDIS に依存するのではなく、内部的にすべての送信要求をキューに入れます。 その結果、逆シリアル化されたミニポート ドライバーは、シリアル化されたミニポート ドライバーよりも大幅に優れた全二重性能を達成できます。
逆シリアル化されたドライバー モデルは、NDIS ミニポート ドライバーの既定のモデルです。 接続指向のミニポート ドライバーと、WDM 下端を備えたミニポート ドライバーは、逆シリアル化されたドライバーである必要があります。 新しい NDIS ミニポート ドライバーを記述するときは、逆シリアル化されたドライバーを記述する必要があります。 可能であれば、古いドライバーを NDIS 6.0 以降に移植する必要もあります。 ドライバーの移植の詳細については、次を参照してください。
逆シリアル化されたミニポート ドライバーは、NDIS と結合するときに、次の要件を満たす必要があります。
逆シリアル化されたミニポート ドライバーは、初期化中に NDIS のように自身を識別する必要があります。
逆シリアル化されたミニポート ドライバーは、すべての送信要求を非同期的に完了する必要があります。 送信要求を完了するには、コネクションレス NDIS 6.0 以降のミニポート ドライバーは、NdisMSendNetBufferListsComplete 関数を呼び出します。 接続指向 NDIS 6.0 以降のミニポート ドライバーは、NdisMCoSendNetBufferListsComplete 関数を呼び出します。
NDIS 6.0 以降をサポートする逆シリアル化されたミニポート ドライバーは、NdisMSendNetBufferListsComplete に渡される NET_BUFFER_LIST 構造体の Status メンバーを設定します。
逆シリアル化されたミニポート ドライバーがすぐに送信要求を完了できない場合は、再キューの NDIS に要求を返すことはできません。 代わりに、ミニポート ドライバーは、データを送信するための十分なリソースが使用可能になるまで、内部的に送信要求をキューに入れる必要があります。
逆シリアル化されたミニポート ドライバーは、NDIS がそれらを返すまで受信表示で NDIS に渡す構造体を調べることはできません。 NDIS は、ミニポート ドライバーの MiniportReturnNetBufferLists 関数に NET_BUFFER_LIST 構造体を返します。
逆シリアル化されたミニポート ドライバーは、次のドライバー内部要件を満たす必要があります。
逆シリアル化されたミニポート ドライバーは、スピン ロック でネットワーク バッファー キューを保護する必要があります。 逆シリアル化されたミニポート ドライバーは、独自の MiniportXxx 関数による同時アクセスから共有状態を保護する必要もあります。
逆シリアル化されたミニポート ドライバーの MiniportXxx 関数は、IRQL <= DISPATCH_LEVEL で実行できます。 したがって、ドライバー ライターは、MiniportXxx 関数が要求を処理するシーケンスで呼び出されることを想定できません。 1 つの MiniportXxx 関数は、下位 IRQL で実行されている別の MiniportXxx 関数に割り込むことができます。
逆シリアル化されたミニポート ドライバーは、ネットワーク バッファー キューの管理を担当します。 ミニポート ドライバーでリソースの問題が発生した場合、再キューのために NDIS に送信要求を返すことはできません。 代わりに、ミニポート ドライバーは、データを送信するための十分なリソースが使用可能になるまで、内部的にすべての送信要求をキューに入れる必要があります。
逆シリアル化されたミニポート ドライバーは、プロトコルによって決定された順序で送信要求を完了する必要があります。
NDIS ドライバーの送受信の要件の詳細については、「送信および受信操作」を参照してください。
逆シリアル化されたミニポート ドライバーは、通常、プロトコルによって決定された順序で送信要求を完了します。 ただし、パケットの優先順位 ( IEEE 802.1p など) をサポートするミニポート ドライバーは、優先順位情報に基づいて送信要求を並べ替えることができます。