フィルター モジュールの起動

一時停止中のフィルター モジュールを開始するには、NDIS は、フィルター ドライバーの FilterSetModuleOptions 関数 (ある場合) を呼び出し、その後に FilterRestart 関数を呼び出します。 FilterRestart 関数の実行開始時に、フィルター モジュールは「再起動」状態になります。

ドライバーが FilterSetModuleOptions のエントリ ポイントを提供した場合、ドライバーはフィルター モジュールの部分的な特性を変更できます。 詳細については「データ バイパス モード」を参照してください。

フィルター ドライバーの FilterRestart 関数を呼び出すと、NDIS は、NDIS_RESTART_ATTRIBUTES 構造体へのポインターを渡して、NDIS_FILTER_RESTART_PARAMETERS 構造体の RestartAttributes メンバー内のドライバーをフィルター処理します。 フィルター ドライバーは、基になるドライバーによって指定された再起動属性を変更できます。 再起動属性を変更する方法の詳細については「FilterRestart」を参照してください。

: NDIS は、スタック内のすべてのフィルター モジュールの FilterSetModuleOptions を呼び出します。その前に、NDIS はスタック内のフィルター モジュールの FilterRestart 関数を呼び出します。

NDIS は、ドライバー スタックを再起動するプラグ アンド プレイ操作の一部としてフィルター モジュールを開始します。 ドライバー スタックの再起動の概要については「ドライバー スタックの再起動」を参照してください。

再起動」状態にあるフィルター モジュールの代わりに、フィルター ドライバーは次の手順を実行します。

  • 通常の送受信操作を再開するために必要なすべての操作を完了します。

    送受信操作の詳細については「フィルター モジュールの送受信操作」を参照してください。

  • フィルター モジュールの構成可能なパラメーターの読み取りまたは書き込みが可能です。

  • ネットワーク データの表示を受け取ることができます。 ドライバーは、このようなデータをコピーしてキューに入れ、後で上位ドライバーに示したり、データカードを破棄したりできます。

  • 新しい受信インジケーターを開始しないでください。

  • NdisFSendNetBufferListsComplete 関数を呼び出すことによって、FilterSendNetBufferLists 関数に対して行われたすべての新しい送信要求をすぐに拒否します。 各 NET_BUFFER_LIST の完全な状態を NDIS_STATUS_PAUSED に設定する必要があります。

  • NdisFIndicateStatus 関数で状態を示すことができます。

    状態表示の詳細については「フィルター モジュールの状態の表示」を参照してください。

  • FilterOidRequest 関数で OID 要求を処理する必要があります。

    OID 要求の詳細については「フィルター モジュールの OID 要求」を参照してください。

  • 新しい送信要求を開始しないでください。

  • NdisFReturnNetBufferLists 関数を呼び出すことによって、すぐに NDIS に新しい受信インジケーターを返す必要があります。 必要に応じて、ドライバーはそれらを返す前に、このような受信指示をコピーできます。

  • 基になるドライバーに OID 要求を行って、更新された構成情報を設定またはクエリできます。

  • FilterStatus 関数の状態表示を処理する必要があります。

  • NDIS_STATUS_SUCCESS またはエラー状態を示す必要があります。 フィルター モジュールが再起動しない場合、NDIS はそれを切断し、必須のフィルターの場合、NDIS はドライバー スタック全体を終了します。

フィルター ドライバーは、送受信操作を正常に再起動した後、再起動操作を完了する必要があります。 フィルター ドライバーは、FilterRestart からそれぞれ NDIS_STATUS_SUCCESS または NDIS_STATUS_PENDING を返すことによって、同期的または非同期的に再起動操作を完了できます。

ドライバーが NDIS_STATUS_PENDING を返す場合は、再起動操作が 完了した後、NdisFRestartComplete 関数を呼び出す必要があります。 この場合、ドライバーは NdisFRestartComplete に再起動操作の最終的な状態を渡します。

再起動操作が完了すると、フィルター モジュールは「実行中」の状態になります。 ドライバーは、通常の送受信処理を再開します。

NDIS は、フィルター ドライバーが「再起動」状態にある間、接続、切断、一時停止要求など、他のプラグ アンド プレイ操作を開始しません。 NDIS は、フィルター ドライバーが実行中の状態の後に「一時停止」要求を開始できます。 フィルター モジュールの一時停止の詳細については「フィルター モジュールの一時停止」を参照してください。