フィルター ドライバーは、ドライバーが管理するフィルター モジュール (フィルター ドライバーのインスタンス) ごとに、次の操作状態をサポートする必要があります。
デタッチ
デタッチ状態は、フィルター モジュールの初期状態です。 フィルター モジュールがこの状態の場合、NDIS はフィルター ドライバーの FilterAttach 関数を呼び出して、フィルター モジュールをドライバー スタックにアタッチできます。
接続中
アタッチ状態では、フィルター ドライバーは、ドライバー スタックにフィルター モジュールをアタッチする準備をします。
一時停止
一時停止状態では、フィルター ドライバーは送信または受信操作を実行しません。
再起動
再起動状態では、フィルター ドライバーは、フィルター モジュールの送受信操作を再開するために必要なすべての操作を完了します。
ランニング
実行中の状態では、フィルター ドライバーは、フィルター モジュールの通常の送受信処理を実行します。
一時停止
一時停止状態では、フィルター ドライバーは、フィルター モジュールの送受信操作を停止するために必要なすべての操作を完了します。
次の表では、見出しはフィルター モジュールの状態です。 メジャー イベントが最初の列に一覧表示されます。 テーブルの残りのエントリは、イベントが状態内で発生した後にフィルター モジュールが入力する次の状態を指定します。 空白のエントリは、無効なイベント/状態の組み合わせを表します。
| イベント/状態 | Detached | アタッチ | 一時停止 | 再起動 | ランニング | 一時停止中 |
|---|---|---|---|---|---|---|
フィルター取り付け |
アタッチ |
|||||
アタッチが完了しました |
一時停止 |
|||||
フィルター分離 |
Detached |
|||||
フィルターの再起動 |
再起動 |
|||||
再起動が完了しました |
ランニング |
|||||
フィルターの一時停止 |
一時停止中 |
|||||
一時停止が完了しました |
一時停止 |
|||||
アタッチに失敗しました |
Detached |
|||||
再起動に失敗しました |
一時停止 |
|||||
送受信 |
ランニング |
一時停止中 |
||||
OID 要求 |
一時停止 |
再起動 |
ランニング |
一時停止中 |
プライマリ フィルター ドライバー イベントは、次のように定義されます。
フィルターの取り付け
NDIS は、ドライバー スタックにフィルター モジュールをアタッチするドライバーの FilterAttach 関数を呼び出しました。 フィルター モジュールのアタッチの詳細については、「フィルター モジュール のアタッチ」を参照してください。
アタッチが完了しました
フィルター モジュールが アタッチ 状態にあり、フィルター ドライバーがフィルター モジュールに必要なすべてのリソースの初期化を完了すると、フィルター モジュールは 一時停止 状態になります。
フィルターデタッチ
NDIS は、ドライバー スタックからフィルター モジュールをデタッチするドライバーの FilterDetach 関数を呼び出しました。 詳細については、「 フィルター モジュールのデタッチ」を参照してください。
フィルターの再起動
NDIS は、一時停止されたフィルター モジュールを再起動するドライバーの FilterRestart 関数を呼び出しました。 詳細については、「 フィルター モジュールの開始」を参照してください。
再起動が完了しました
フィルター モジュールが 再起動 状態にあり、ドライバーが送受信操作を実行する準備ができたら、フィルター モジュールは 実行中 の状態になります。
フィルターの一時停止
NDIS は、フィルター モジュールを一時停止するドライバーの FilterPause 関数を呼び出しました。 詳細については、「 フィルター モジュールの一時停止」を参照してください。
一時停止が完了しました
ドライバーが送信操作と受信操作を停止するために必要なすべての操作を完了すると、一時停止操作が完了し、フィルター モジュールが 一時停止 状態になります。
アタッチに失敗しました
NDIS がドライバーの FilterAttach 関数を呼び出し、アタッチ操作が失敗した場合 (たとえば、必要なリソースが利用できないため)、フィルター モジュールは デタッチされた 状態に戻ります。
再起動に失敗しました
NDIS がドライバーの FilterRestart 関数を呼び出し、再起動の試行が失敗した場合、フィルター モジュールは 一時停止 状態に戻ります。
送信操作と受信操作
ドライバーは、 実行中 の状態と 一時停止 中の状態で送受信操作を処理できます。 送信操作と受信操作の詳細については、「 フィルター モジュールの送受信操作」を参照してください。
OID リクエスト
ドライバーは、 実行中、 再起動、 一時停止、および 一時停止 状態の OID 要求を処理できます。 OID 要求の詳細については、「 モジュール OID 要求のフィルター処理」を参照してください。