FILTER_RESTART コールバック関数 (ndis.h)
FilterRestart 関数は、指定されたフィルター モジュールの再起動操作を開始します。
構文
FILTER_RESTART FilterRestart;
NDIS_STATUS FilterRestart(
[in] NDIS_HANDLE FilterModuleContext,
[in] PNDIS_FILTER_RESTART_PARAMETERS RestartParameters
)
{...}
パラメーター
[in] FilterModuleContext
フィルター ドライバーを再起動する必要があるフィルター モジュールのコンテキスト領域へのハンドル。 FilterAttach 関数でこのコンテキスト領域を作成および初期化したフィルター ドライバー。
[in] RestartParameters
へのポインター NDIS_FILTER_RESTART_PARAMETERS フィルター モジュールの再起動パラメーターを定義する構造体です。
戻り値
FilterRestart は、次のいずれかの状態値を返します。
リターン コード | 説明 |
---|---|
|
FilterRestart は、指定されたフィルター モジュールを正常に再起動しました。 |
|
フィルター ドライバーは、再起動操作が完了した後、 NdisFRestartComplete 関数の呼び出しで非同期的に要求を完了します。 |
|
リソースが不足しているため、FilterRestart に失敗しました。 |
|
上記の状態値は適用しません。 フィルター ドライバーは、エラーの理由を指定するパラメーターと共に NdisWriteEventLogEntry 関数を呼び出す必要があります。 |
注釈
FilterRestart は、フィルター ドライバーに必要な関数です。 フィルター モジュールが一時停止状態の場合、NDIS は FilterRestart を呼び出すことができます。 フィルター モジュールは、FilterRestart の実行の開始時に再起動状態になります。
NDIS が FilterRestart を呼び出すと、フィルター ドライバーは次のようになります。
- 通常の送受信操作を再開するために必要な操作を完了する必要があります。
- 必要に応じて、構成パラメーターの読み取りまたは書き込みを行います。
- 必要に応じて、バッファー プールを再割り当てします。
- 必要に応じて、 の RestartAttributes メンバーで指定されている再起動属性を変更します。 NDIS_FILTER_RESTART_PARAMETERS 構造体。 RestartAttributes のポインターが NULL の場合、フィルター ドライバーは再起動属性の一覧を変更したり追加したりしないでください。 RestartAttributes 内のポインターが NULL 以外の場合は、再起動属性の一覧の最初のNDIS_RESTART_ATTRIBUTES構造体を指します。 フィルター ドライバーが再起動しない場合は、属性を変更しないでください。
- 必要に応じて、OID 要求を使用して、基になるドライバーの情報を照会または設定します。 フィルター ドライバーは、再起動属性の一覧で既に提供されている情報の OID 要求を発行しないでください。
- NDIS_STATUS_SUCCESSまたはエラー状態を返します。
- の Oid メンバーで OID が認識されない場合は、メディア固有の属性を変更しないでください。 NDIS_RESTART_ATTRIBUTES 構造体。
- 新しいメディア固有の属性を再起動属性の一覧に追加できます。 この状況では、フィルター ドライバーは、新しいNDIS_RESTART_ATTRIBUTES構造体を割り当てる必要があります。たとえば、 NdisAllocateMemoryWithTagPriority 関数-- と は、新しい属性のメモリ領域を提供します。 再起動属性を基になるドライバーに伝達すると、NDIS はフィルター ドライバーの属性メモリを解放します。
- 再起動属性の一覧でメディア固有の属性を変更できます。 フィルター ドライバーにより多くのメモリ領域が必要な場合は、NdisFreeMemory 関数を使用してNDIS_RESTART_ATTRIBUTES構造体を解放し、変更された情報を格納する新しい構造体を割り当てることができます。 再起動属性を基になるドライバーに伝達すると、NDIS はフィルター ドライバーの属性メモリを解放します。
-
NDIS_RESTART_ATTRIBUTES構造体の Oid メンバーが OID_GEN_MINIPORT_RESTART_ATTRIBUTES、次の点を確認します。 NDIS_RESTART_GENERAL_ATTRIBUTES 構造体には、フィルター ドライバーに必要な情報が含まれています。 NDIS_RESTART_GENERAL_ATTRIBUTES構造体に必要な情報が含まれていることを確認するには、NDIS_RESTART_GENERAL_ATTRIBUTES構造体の Header メンバーで指定されているNDIS_OBJECT_HEADER構造体の Revision メンバーをチェックする必要があります。
メモ フィルター ドライバーは、NDIS_RESTART_GENERAL_ATTRIBUTES構造体内の任意のメンバーを変更できます。 フィルター ドライバーが変更する必要がある一部の属性が、NDIS によって提供された構造体のリビジョンに含まれていない場合、フィルター ドライバーは、不足している属性の OID 要求を発行するために、基になるドライバーに依存する必要があります。 フィルター ドライバーは、OID 要求が完了したときに属性を変更できます。
- フィルター ドライバーが再起動属性を変更する場合は、 FilterOidRequest 関数を指定する必要があります。 フィルター ドライバーは、基になるドライバーが再起動属性で受け取る情報が、OID 要求に応答して受け取る情報と一致していることを確認する必要があります。
NDIS 呼び出し FilterRestart at IRQL = PASSIVE_LEVEL。
例
FilterRestart 関数を定義するには、まず、定義する関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバー用の一連の関数型が用意されています。 関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。たとえば、"MyRestart" という名前の FilterRestart 関数を定義するには、次のコード例に示すように FILTER_RESTART 型を使用します。
FILTER_RESTART MyRestart;
次に、次のように関数を実装します。
_Use_decl_annotations_
NDIS_STATUS
MyRestart(
NDIS_HANDLE FilterModuleContext,
PNDIS_FILTER_RESTART_PARAMETERS FilterRestartParameters
)
{...}
FILTER_RESTART関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のFILTER_RESTART関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「NDIS ドライバーの関数 ロール型を使用して関数を宣言する」を参照してください。
Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | NDIS 6.0 以降でサポートされています。 |
対象プラットフォーム | Windows |
ヘッダー | ndis.h (Ndis.h を含む) |
IRQL | PASSIVE_LEVEL |