次の方法で共有


ネットワーク ドライバーの非同期 I/O および完了関数

待機時間は、一部のネットワーク操作に固有です。 この待機時間のため、ミニポート ドライバーとプロトコル ドライバーの下端関数によって提供される上端関数の多くは、非同期操作をサポートするように設計されています。 時間のかかるタスクの完了やハードウェア イベントの通知のためにループ内で待機している CPU サイクルを無駄にするのではなく、ネットワーク ドライバーはほとんどの操作を非同期的に処理する機能に依存します。

非同期ネットワーク I/O は、 完了 関数を使用してサポートされます。 次の例は、ネットワーク 送信 操作に完了関数を使用する方法を示していますが、プロトコルまたはミニポート ドライバーによって実行される他の多くの操作にも同じメカニズムが存在します。

プロトコル ドライバーが NDIS を呼び出してパケットを送信すると、ミニポート ドライバーのミニポート ドライバーの ミニポートSendNetBufferLists 関数の呼び出しが発生すると、ミニポート ドライバーはすぐにこの要求を完了し、結果として適切な状態値を返すことができます。 同期動作の場合、可能な応答は以下の通りです: 送信が正常に完了したことを示すNDIS_STATUS_SUCCESS、リソース不足を示すNDIS_STATUS_RESOURCES、および何らかの障害が発生したことを示すNDIS_STATUS_FAILUREです。

ただし、ミニポート ドライバー (または NDIS) がパケットをキューに入れ、NIC が送信操作の結果を示すのを待っている間、送信操作が完了するまでに時間がかかる場合があります。 MiniportSendNetBufferLists 関数は、NDIS_STATUS_PENDING のステータス値を返すことで、非同期にこの操作を処理できます。 ミニポート ドライバーは、送信操作を完了すると、完了関数 NdisMSendNetBufferListsComplete を呼び出し、送信されたパケット記述子へのポインターを渡します。 この情報はプロトコル ドライバーに渡され、シグナル通知が完了します。

完了に時間を要する可能性があるほとんどのドライバー操作では、同様の完了関数を使用した非同期操作がサポートされます。 このような関数には、 NdisMXxxComplete という形式の名前があります。

完了関数は、次の場合にも提供されます。

  • 構成の設定とクエリ。

  • ハードウェアをリセットします。

  • 状態を示します。

  • 受信したデータを示します。

  • 受信したデータを転送します。