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

概要

警告

すべての NDIS 6.83 以降のドライバーでは、Check-for-Hang (CFH) および Reset 操作は推奨されません。 詳細については、「 NDIS 6.83 以降での Check-for-Hang および Reset 操作」を参照してください。

NDIS は NDIS ミニポート ドライバーのミニポートCheckForHangEx 関数を呼び出して、ネットワーク インターフェイス カード (NIC) を表す NDIS アダプターの動作状態をチェックします。 MiniportCheckForHangEx は、アダプターの内部状態を確認し、アダプターが正しく動作しないことを検出した場合に TRUE を 返します。

既定では、NDIS は MiniportCheckForHangEx を 約 2 秒ごとに呼び出します。 MiniportCheckForHangEx がTRUE を返す場合、NDIS は NDIS ミニポート ドライバーのミニポートResetEx 関数を呼び出します。 2 秒の既定のタイムアウト値が小さすぎる場合、ミニポート ドライバーは、初期化時に次のように別の値を設定できます。

  1. NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES構造体の CheckForHangTimeInSeconds メンバーを 0 以外の値に設定します。
  2. NdisMSetMiniportAttributes 関数の MiniportAttributes パラメーターに、NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES構造体を渡します。

ドライバー属性の設定の詳細については、「アダプターの 初期化」を参照してください。 CheckForHangTimeInSeconds の値は、ミニポート ドライバーの初期化時刻よりも大きくする必要があります。 ただし、ドライバーの初期化にかかる時間が CheckForHangTimeInSeconds 秒より長い場合、このタイムアウトが切れ、NDIS によってドライバーの MiniportCheckForHangEx 関数が呼び出されます。 MiniportCheckForHangEx がTRUE を返す場合、NDIS はドライバーの MiniportResetEx 関数を呼び出します。 このため、ドライバーの初期化が完了していない場合に MiniportCheckForHangExTRUE を返されないように、ドライバーのミニポートCheckForHangEx 関数をドライバーの初期化と同期する必要があります。

ミニポート ドライバーが 、MiniportCheckForHangEx への 2 回の連続した呼び出し内で OID 要求を完了しない場合、NDIS はドライバーの MiniportResetEx 関数を呼び出すことができます。 一部の OID 要求では、ドライバーが MiniportCheckForHangEx への 4 回の連続した呼び出し内で要求を完了しない場合、NDIS は MiniportResetEx を呼び出します。

リセット操作は 、ミニポート アダプターの動作状態には影響しません。 また、リセット操作の進行中にアダプターの状態が変わる可能性があります。 たとえば、NDIS は、進行中のリセット操作がある場合に、ドライバーの MiniportPause 関数を呼び出す場合があります。 この場合、ドライバーは、各操作の通常の要件に従いながら、任意の順序でリセットまたは一時停止操作を完了できます。

リセット操作の場合、ドライバーは送信要求パケットを失敗させるか、キューに入れて後で完了することができます。 ただし、送信パケットが保留中の間、上にあるドライバーは一時停止操作を完了できないことに注意してください。

ミニポート ドライバーは、成功または失敗の状態を返すことによって同期的にリセット要求を完了できます。 ドライバーは、 NDIS_STATUS_PENDINGを返すことによって、リセット要求を非同期的に完了できます。 この場合、ドライバーは NdisMResetComplete を呼び出して操作を完了する必要があります。

NDIS 6.83 以降での Check-for-Hang および Reset 操作

6.83 より前のバージョンの NDIS では、バッテリ寿命の問題により、Always On Always Connected (AOAC) システムでは、Check-for-Hang (CFH) および Reset 操作は推奨されませんでした。 ただし、ドライバーは、省略可能な MiniportCheckForHangEx コールバック関数と MiniportResetEx コールバック関数を実装することで、他の AOAC 以外の Windows システムで CFH を引き続き使用できます。

NDIS 6.83 以降では、これらのコールバック関数は、電源機能に関係なく 、すべての Windows システムでは推奨されません。 NDIS 6.83 以降で CFH を使用することはロゴ テスト違反ではありませんが、NDIS ドライバーは、その使用方法に関するガイダンスとして次の表を使用する必要があります。

Caller 推奨 Notes
AOAC システムを対象とするドライバー を実装することはできません 定期的なチェック-for-hang アクティビティによるバッテリ寿命の問題を引き起こします
Windows Server システムを対象とするドライバー を実装することはできません CPU の負荷が高い場合に問題が発生する
仮想 (ソフトウェア専用) ミニポート ドライバー を実装することはできません ハードウェアがないとリセットできない
その他の新しい NDIS 6.83 以降のドライバー を実装しないでください
その他の既存の NDIS 6.82 以前のコード 変更する必要はありませんが、今後のやり直しで Check-for-Hang と Reset を削除することを検討する必要があります

ミニポート ドライバー ハードウェア リセット

ミニポート ドライバーのリセットおよび停止関数