プロトコル ドライバーのバインディングの状態
NDIS プロトコル ドライバーは、ドライバーが管理する各バインドの次の操作状態をサポートする必要があります。
バインドなし
開く
実行中
閉じる
一時停止中
一時停止
再起動
次の図は、これらの状態の間の関係を示しています。
次に、プロトコル ドライバーのバインド状態を定義します。
Unbound(バインド解除) 状態は、バインドの初期状態です。 この状態では、プロトコル ドライバーは NDIS が ProtocolBindAdapterEx 関数の呼び出すまで待機します。 NDIS が ProtocolBindAdapterEx を呼び出した後、バインドはオープン中状態になります。 バインド解除操作が完了すると、バインドは Closing (クローズ中) 状態から Unbound (バインド解除) 状態に戻ります。
Opening (オープン中) 状態では、プロトコル ドライバーは、バインドのリソースを割り当て、ミニポート アダプターを開こうとします。 NDIS は、ドライバーの ProtocolBindAdapterEx 関数を呼び出した後、バインドは Opening (オープン中) 状態になります。 プロトコル ドライバーがミニポート アダプターへのバインドに失敗した場合、バインドは Unbound (バインド解除) 状態に戻ります。 ドライバーが正常にミニポート アダプターにバインドする場合、バインドは一時停止状態になります。
Running (実行中) 状態では、プロトコル ドライバーは、バインドの通常の送受信処理を実行します。 バインドがRestart (再起動) 状態にあり、ドライバーが送受信操作を実行する準備ができたら、バインドは Running (実行中) の状態になります。
Closing (クローズ中) 状態では、プロトコル ドライバーはミニポート アダプターへのバインドを閉じ、バインドのリソースを解放します。 NDIS は、プロトコル ドライバーの ProtocolUnbindAdapterEx 関数を呼び出した後、バインドがClosing (クローズ中) 状態になります。 プロトコル ドライバーがバインド解除操作を完了すると、バインドは Unbound (バインド解除) 状態になります。
Pausing (一時停止) 状態では、プロトコル ドライバーは、バインドの送受信操作を停止するために必要なすべての操作を完了します。 バインドが Running (実行中)の状態にあり、NDIS が PnP 一時停止通知をプロトコル ドライバーに送信すると、バインドは Pausing (一時停止) 状態になります。 プロトコル ドライバーは、未処理のすべての送信要求が完了するまで待機する必要があります。 プロトコル ドライバーは、一時停止操作を失敗できません。 一時停止操作が完了すると、バインドはPaused (一時停止) 状態になります。
Paused (一時停止) 状態では、プロトコル ドライバーはバインドの送受信操作を実行しません。 バインドがPausing (一時停止中) 状態にあり、一時停止操作が完了すると、バインドは Paused (一時停止) 状態になります。 バインドが Opening (オープン中) 状態にあり、オープン操作が正常に完了すると、バインドは Paused (一時停止) 状態になります。 NDIS がプロトコル ドライバーにバインドの PnP 再起動通知を送信する場合、バインドは Restarting (再起動) 状態になります。 NDIS は、プロトコル ドライバーの ProtocolUnbindAdapterEx 関数を呼び出した後、バインドが Closing (クローズ中) 状態になります。
Restarting (再起動中) 状態では、プロトコル ドライバーは、バインドの送受信操作を再起動するために必要なすべての操作を完了します。 バインドが Paused (一時停止)状態にあり、NDIS がプロトコル ドライバーに PnP 再起動通知を送信すると、バインドは Restarting (再起動中) 状態になります。 再起動が失敗した場合、バインドは Paused (一時停止) 状態に戻ります。 再起動が成功すると、バインドは Running (実行中)の状態になります。