フィルター モジュールのアタッチ

ドライバー スタックにフィルター モジュールを挿入するプロセスを開始するため、NDIS は、フィルター ドライバーの FilterAttach 関数を呼び出します。 FilterAttach 関数の実行開始時に、フィルター モジュールはアタッチ状態になります。 ドライバー スタックにフィルター モジュールをアタッチする方法の詳細については、「ドライバー スタックの開始」を参照してください。

フィルター ドライバーはハンドルを使用します。ハンドルは、NDIS が NdisFilterHandle パラメーター、 FilterAttach により、今後このフィルター モジュールを参照するすべての NdisXxx 関数呼び出しで渡します。 このような関数には、状態表示、要求の送信、通知の受信、および OID 要求が含まれます。

フィルター モジュールがアタッチ状態である間、ドライバーは次の手順を実行します。

  • フィルター モジュールのコンテキスト領域を作成し、バッファー プールとその他のフィルター モジュール固有のリソースを割り当てます。 バッファー プールの詳細については、「フィルター ドライバーバッファー管理」を参照してください。

  • NDIS が FilterAttachNdisFilterHandle 値に渡した値を使用して NdisFSetAttributes 関数を呼び出します。 NdisFSetAttributesFilterModuleContext パラメータはこのフィルター モジュールのフィルター ドライバーのコンテキスト領域を指定します。 NDIS は、フィルター ドライバーの FilterXxx 関数にこのコンテキスト領域を渡します。

  • 必要に応じて、レジストリからこのフィルター モジュールの構成パラメーターを読み取ります。 詳細については、「フィルター ドライバーの構成情報へのアクセス」を参照してください。

  • 上記の操作が正常に完了した場合、フィルター モジュールは一時停止状態になります。

  • 上記の操作が失敗した場合、フィルター ドライバーは、FilterAttach 関数で割り当てられたすべてのリソースを解放し、フィルター モジュールをデタッチ状態に戻す必要があります。

  • NDIS_STATUS_SUCCESS または適切なエラー コードを返します。 ドライバーがエラー コードを返す場合、NDIS はドライバー スタックを終了します。

: レジストリには、フィルター モジュールが省略可能であることを指定するフラグを含めることができます。 オプションのフィルター モジュールがアタッチされていない場合、NDIS はドライバー スタックの残りの部分を終了しません。

フィルター ドライバーは、アタッチ状態から要求送信、受信データの提示、OID 要求、または状態の提示ができません。 送受信操作は、実行中一時停止の状態でサポートされています。 OID 要求と状態表示は、一時停止再起動実行中一時停止の状態でサポートされています。

NDIS は FilterDetach 関数を呼び出して、NDIS が FilterAttach にアタッチしたフィルター モジュールをデタッチします。 詳細については、「フィルター モジュールのデタッチ」を参照してください。