フィルター ドライバー のデータ バイパス モード を使用すると、システムのパフォーマンスを向上させることができます。 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 関数も指定する必要があります。
フィルター ドライバーが FilterReturnNetBufferLists または FilterReceiveNetBufferLists 関数を指定する場合、ドライバーは FilterStatus 関数も指定する必要があります。
実行時にバイパス モードの設定を変更するには、フィルター ドライバーは NdisFRestartFilter 関数を呼び出すことができます。 NdisFRestartFilter は、指定されたフィルター モジュールの再起動操作が続く一時停止操作をスケジュールします。 NDIS が FilterSetModuleOptions を呼び出すとき、フィルター ドライバーは NdisSetOptionalHandlers を呼び出し、エントリ ポイントの新しいセットを指定することによって、そのフィルター モジュールの関数を変更できます。
注 一時停止して再起動すると、一部のネットワーク パケットが送信パス、受信パス、またはその両方でドロップされる可能性があります。 信頼性の高いトランスポート メカニズムを提供するネットワーク プロトコルは、パケットが失われた場合にネットワーク I/O 操作を再試行する可能性がありますが、信頼性を保証しない他のプロトコルは操作を再試行しません。
フィルター ドライバーは、オプションのドライバー サービスをサポートする追加のオプション機能を登録できます。 ドライバーは、FilterSetOptions 関数にこれらの省略可能なサービスを登録します。 これらのオプション サービスの詳細については、「オプションのフィルター ドライバー サービスの構成」を参照してください。