次の方法で共有


MINIPORT_CHECK_FOR_HANG コールバック関数 (ndis.h)

警告

MiniportCheckForHangEx および MiniportResetEx コールバック関数は、すべての NDIS 6.83 以降のドライバーでは推奨されません。 詳細については、「 CHECK-for-Hang and Reset operations in NDIS 6.83 and later」を参照してください。

NDIS は、ミニポート ドライバーの MiniportCheckForHangEx 関数を呼び出して、ネットワーク インターフェイス カード (NIC) を表すミニポート アダプターの動作状態をチェックします。

メモ ミニポート ドライバーは、 MINIPORT_CHECK_FOR_HANG 型を使用してこの関数を宣言できます。
 
メモ NDIS 6.30 以降では、この関数は、定期的な Check-for-Hang アクティビティによって引き起こされる負の電力への影響を回避するために、低電力 SoC プラットフォームで実行されているドライバーに登録しないでください。
 

構文

MINIPORT_CHECK_FOR_HANG MiniportCheckForHang;

BOOLEAN MiniportCheckForHang(
  [in] NDIS_HANDLE MiniportAdapterContext
)
{...}

パラメーター

[in] MiniportAdapterContext

ミニポート ドライバーがその MiniportInitializeEx 関数で割り当てたコンテキスト領域へのハンドル。 ミニポート ドライバーは、このコンテキスト領域を使用して、ミニポート アダプターの状態情報を維持します。

戻り値

ドライバーが NIC が動作していないと判断し、NDIS がドライバーの MiniportResetEx 関数を呼び出す必要がある場合、MiniportCheckForHangExTRUE を返します。 詳細については、「解説」を参照してください。

解説

ミニポート ドライバーは、 を呼び出すときに ミニポート チェックForHangEx エントリ ポイントを指定します。 NdisMRegisterMiniportDriver 関数。

MiniportCheckForHangEx は中間ドライバーには必要ありません。

MiniportCheckForHangEx は、NIC の内部状態をチェックし、NIC が正しく動作していないことを検出した場合は TRUE を返します。

既定では、NDIS は MiniportCheckForHangEx を 約 2 秒ごとに呼び出します。 このため、ミニポート ドライバーの MiniportCheckForHangEx 関数は、できるだけ早くを返す必要があります。

メモ NDIS 6.30 以降では、MiniportCheckForHangEx の呼び出し間の間隔を測定するために、高い許容値を持つ合体可能なタイマーが使用されます。 したがって、このルーチンは、時間の影響を受けやすい操作には使用しないでください。
 
MiniportCheckForHangEx がTRUE を返す場合、NDIS はミニポート ドライバーのミニポートResetEx 関数を呼び出します。

ミニポート ドライバーが 、MiniportCheckForHangEx への 2 回の連続する呼び出し内で OID 要求を完了しない場合、NDIS はドライバーの MiniportResetEx 関数を呼び出すことができます。 ただし、不要なリセットを回避するために、ドライバーの MiniportInitializeEx 関数は、 を呼び出すときに適切な CheckForHangTimeInSeconds 値を設定することで、チェック-for-hang タイムアウト間隔を延長できます。 NdisMSetMiniportAttributes 関数。

CheckForHangTimeInSeconds タイムアウト値の設定の詳細については、「ミニポート アダプターの Check-for-Hang および Reset 操作」を参照してください。

メモ NDIS 6.30 以降では、ミニポート ドライバーがタイムアウト期間の有効期限が切れる前に、NIC が保留中の送信要求を完了していないと検出した場合、 MiniportCheckForHangExTRUE を 返す必要があります。 タイムアウト期間はドライバー固有ですが、2 秒のタイムアウト期間を使用することをお勧めします。
 
MiniportCheckForHangEx は割り込みによって割り込むことができます。

NDIS は、IRQL = PASSIVE_LEVELで MiniportCheckForHangEx を呼び出します。

MiniportCheckForHangEx 関数を定義するには、まず、定義する関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバー用の一連の関数型が用意されています。 関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。

たとえば、" MyCheckForHangEx" という名前の MiniportCheckForHangEx 関数を定義するには、次のコード例に示すように 、MINIPORT_CHECK_FOR_HANG 型を使用します。

MINIPORT_CHECK_FOR_HANG MyCheckForHangEx;

次に、次のように関数を実装します。

_Use_decl_annotations_
BOOLEAN
 MyCheckForHangEx(
    NDIS_HANDLE  MiniportAdapterContext
    )
  {...}

MINIPORT_CHECK_FOR_HANG関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のMINIPORT_CHECK_FOR_HANG関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「NDIS ドライバーの関数 ロール型を使用して関数を宣言する」を参照してください。

Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。

要件

要件
サポートされている最小のクライアント NDIS 6.0 以降でサポートされています。
対象プラットフォーム Windows
ヘッダー ndis.h (Ndis.h を含む)
IRQL PASSIVE_LEVEL

こちらもご覧ください

ミニポート アダプターの Check-for-Hang 操作とリセット操作

MiniportInitializeEx

MiniportResetEx

NdisMRegisterMiniportDriver

NdisMSetMiniportAttributes