次の方法で共有


フィルター ドライバーのモジュールの状態

NDIS フィルター ドライバーは、ドライバーが管理するフィルター モジュール (フィルター ドライバーのインスタンス) ごとに、次の操作状態をサポートする必要があります。

  • デタッチ

  • アタッチ

  • 一時停止

  • 再起動

  • 実行中

  • 一時停止の処理中

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

Diagram that shows the relationships between operational in an NDIS filter driver.

次に、フィルター モジュールの状態を定義します。

Detached
Detached 状態は、フィルター モジュールの初期状態です。 フィルター モジュールがこの状態であれば、NDIS はフィルター ドライバーの FilterAttach 関数を呼び出して、フィルター モジュールをドライバー スタックにアタッチできます。 NDIS がフィルター ドライバーの FilterAttach 関数を呼び出すと、フィルター モジュールは Attaching 状態になります。 アタッチ操作が失敗すると場合、フィルター モジュールは Detached 状態に戻ります。 モジュールが Paused 状態にあり、NDIS が FilterDetach 関数を呼び出すと、モジュールは Detached 状態に戻ります。

アタッチ
フィルター モジュールが Attaching 状態にあると、フィルター ドライバーは、ドライバー スタックにフィルター モジュールをアタッチする準備を行います。 フィルター モジュールの準備が完了すると、フィルター モジュールは Paused 状態になります。 (必要なリソースが使用できないなどの理由で) エラーが発生した場合、フィルター モジュールは Detached 状態に戻ります。

一時停止
フィルター モジュールが Paused 状態にある場合、フィルター モジュールは送受信操作を実行しません。 フィルター モジュールが Attaching 状態にあり、FilterAttachが成功すると、フィルター モジュールは Paused 状態になります。 フィルター モジュールが Pausing 状態にあり、一時停止操作が完了すると、フィルター モジュールは Paused 状態になります。 フィルター モジュールが Paused 状態にあり、NDIS がフィルター ドライバーの FilterRestart 関数を呼び出すと、フィルター モジュールは Restarting 状態になります。 フィルター モジュールが Paused 状態にあり、NDIS がドライバーの FilterDetach ハンドラーを呼び出すと、フィルター モジュールは Detached 状態になります。

再起動
Restarting 状態では、フィルタードライバーは、フィルター モジュールの送受信操作を再起動するために必要なすべての操作を完了します。 フィルター モジュールが Paused 状態にあり、NDIS がフィルター ドライバーの FilterRestart 関数を呼び出すと、フィルター モジュールは Restarting 状態になります。 再起動が失敗すると、フィルター モジュールは Paused 状態に戻ります。 再起動が成功すると、フィルター モジュールは Running 状態に入ります。

実行中
Running 状態では、フィルター ドライバーは、フィルター モジュールの通常の送受信処理を実行します。 フィルター モジュールが Restaring 状態にあり、ドライバーが送受信操作を実行できる状態にある場合、フィルター モジュールは Running 状態に入ります。

Pausing
Pausing 状態では、フィルター ドライバーは、フィルター モジュールの送受信操作を停止するために必要なすべての操作を完了します。 フィルター ドライバーは、未処理の送信要求がすべて完了し、NDIS が未処理の受信表示を返すまで待機する必要があります。 フィルター モジュールが Running 状態にあり、NDIS がドライバーの FilterPause 関数を呼び出すと、フィルター モジュールは Pausing 状態になります。 フィルター ドライバーは、一時停止操作を失敗できません。 一時停止操作が完了すると、フィルター モジュールは Paused 状態になります。

ドライバー スタック管理

NDIS フィルター ドライバー