フィルター ドライバー のデータ バイパス モード を使用すると、システムのパフォーマンスを向上させることができます。 NDIS は、バイパスされる FilterXxx 関数を呼び出しません。 たとえば、特定のフィルター アプリケーションに対して送受信サービスが必要ない場合、フィルター ドライバーは送受信機能をバイパスできます。
フィルター ドライバーは、 NdisFRegisterFilterDriver 関数を呼び出すときに、ドライバーの初期化中にバイパスできる関数の既定のエントリ ポイントを指定します。 エントリ ポイントは、既定でバイパスされる関数の 場合は NULL です。 初期化の詳細については、「 フィルター ドライバーの初期化」を参照してください。
実行時にバイパス状態を変更するには、ドライバーの初期化中に 、ドライバーで FilterSetModuleOptions 関数の エントリ ポイントを指定する必要があります。 ドライバーは、NDIS_FILTER_PARTIAL_CHARACTERISTICS構造体を初期化し、FilterSetModuleOptions のコンテキスト内から NdisSetOptionalHandlers 関数に新しい特性を渡すことができます。
NDIS は、再起動操作の開始時に FilterSetModuleOptions 関数 (ある場合) を呼び出します。 フィルター ドライバーは、フィルター モジュールごとに個別にバイパス モードを設定できます。 詳細については、「 フィルター モジュールの開始」を参照してください。
フィルター ドライバーは、NDIS_FILTER_DRIVER_CHARACTERISTICS構造体で指定されている次の省略可能な FilterXxx 関数をバイパスできます。
FilterSendNetBufferListsComplete
FilterCancelSendNetBufferLists
FilterXxx 関数をバイパス モードに設定するには、フィルター ドライバーは、その関数のエントリ ポイントの NULL を指定します。 ただし、ドライバーが関連付けられている FilterXxx 関数を持つ NDIS 関数を呼び出す場合は、その FilterXxx 関数のエントリ ポイントを提供する必要があります。 たとえば、ドライバーが NdisFIndicateReceiveNetBufferLists 関数を呼び出す場合は、 FilterReturnNetBufferLists 関数を提供する必要があります。
フィルター ドライバーが FilterSendNetBufferLists 関数を指定し、キューに要求を送信する場合は、 FilterCancelSendNetBufferLists 関数も指定する必要があります。
フィルター ドライバーが FilterReceiveNetBufferLists または FilterReturnNetBufferLists 関数を指定する場合、ドライバーは FilterStatus 関数も指定する必要があります。
実行時にバイパス モードの設定を変更するには、フィルター ドライバーは NdisFRestartFilter 関数を呼び出すことができます。 NdisFRestartFilter は、指定されたフィルター モジュールの再起動操作が続く一時停止操作をスケジュールします。 NDIS が FilterSetModuleOptions を呼び出すとき、フィルター ドライバーは NdisSetOptionalHandlers を呼び出し、エントリ ポイントの新しいセットを指定することによって、そのフィルター モジュールの関数を変更できます。
手記 一時停止と再起動により、一部のネットワーク パケットが送信パス、受信パス、またはその両方で破棄される可能性があります。 信頼性の高いトランスポート メカニズムを提供するネットワーク プロトコルは、パケットが失われた場合にネットワーク I/O 操作を再試行する可能性がありますが、信頼性を保証しない他のプロトコルでは操作が再試行されません。
フィルター ドライバーは、オプションのドライバー サービスをサポートする追加のオプション関数を登録できます。 ドライバーは、 FilterSetOptions 関数にこれらの省略可能なサービスを登録します。 これらのオプション サービスの詳細については、「 オプションのフィルター ドライバー サービスの構成」を参照してください。