ミニポート アダプターの Check-for-Hang 操作とリセット操作
概要
警告
ハングチェック (Check-for-Hang、CFH) 操作とリセット操作は、NDIS 6.83 以降のすべてのドライバーで推奨されません。 詳細については、「NDIS 6.83 以降のハングチェック操作とリセット操作」を参照してください。
NDIS は、NDIS ミニポート ドライバーの MiniportCheckForHangEx 関数を呼び出して、ネットワーク インターフェイス カード (NIC) を表す NDIS アダプターの動作状態を確認します。 MiniportCheckForHangEx はアダプターの内部状態を確認し、アダプターが正しく動作していないことを検出した場合には TRUE を返します。
既定では、NDIS は約 2 秒ごとに MiniportCheckForHangEx を呼び出します。 MiniportCheckForHangEx が TRUE を返した場合、NDIS は NDIS ミニポート ドライバーの MiniportResetEx 関数を呼び出します。 2 秒の既定のタイムアウト値が小さすぎる場合、ミニポート ドライバーで初期化時に次のように別の値を設定できます。
- NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 構造体の CheckForHangTimeInSeconds メンバーを 0 以外の値に設定します。
- NdisMSetMiniportAttributes 関数の MiniportAttributes パラメーターに NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 構造体を渡します。
ドライバー属性の設定の詳細については、「アダプターの初期化」を参照してください。 CheckForHangTimeInSeconds の値は、ミニポート ドライバーの初期化時間より大きくする必要があります。 ただし、ドライバーの初期化にかかる時間が CheckForHangTimeInSeconds 秒より長い場合、このタイムアウトは期限切れになり、NDIS はドライバーの MiniportCheckForHangEx 関数を呼び出します。 MiniportCheckForHangEx が TRUE を返した場合、NDIS はドライバーの MiniportResetEx 関数を呼び出します。 このため、ドライバーの初期化が完了していない場合、MiniportCheckForHangEx が TRUE を返さないように、ドライバーの MiniportCheckForHangEx 関数をドライバーの初期化と同期させる必要があります。
ミニポート ドライバーが、MiniportCheckForHangEx への連続する 2 回の呼び出し内で OID 要求を完了しない場合、NDIS はドライバーの MiniportResetEx 関数を呼び出すことができます。 一部の OID 要求では、ドライバーが MiniportCheckForHangEx への連続する 4 回の呼び出し内で要求を完了しない場合、NDIS は MiniportResetEx を呼び出します。
リセット操作はミニポート アダプターの動作状態には影響しません。 また、リセット操作の進行中に、アダプターの状態が変わる可能性があります。 たとえば、NDIS は、進行中のリセット操作がある場合、ドライバーの MiniportPause 関数を呼び出す可能性があります。 この場合、ドライバーは、各操作の通常の要件に従っている間、任意の順序でリセットまたは一時停止操作を完了できます。
リセット操作の場合、ドライバーは送信要求パケットを失敗させるか、キューに入れて後で完了することができます。 ただし、送信パケットが保留中の間、上位ドライバーは一時停止操作を完了できないことにご注意ください。
ミニポート ドライバーは、成功または失敗の状態を返すと、リセット要求を同期的に完了できます。 ドライバーは、NDIS_STATUS_PENDING を返すと、リセット要求を非同期的に完了できます。 この場合、ドライバーは NdisMResetComplete を呼び出して操作を完了する必要があります。
NDIS 6.83 以降のハングチェック操作とリセット操作
6.83 より前の NDIS のバージョンでは、バッテリ寿命の問題により、Always On、Always Connected (AOAC) システムでは、ハングチェック (CFH) 操作とリセット操作が推奨されませんでした。 ただし、オプションの MiniportCheckForHangEx と MiniportResetEx というコールバック関数を実装すれば、ドライバーは他の非 AOAC Windows システムで CFH を使用することができました。
NDIS 6.83 以降、これらのコールバック関数は、電源機能に関係なく、すべての Windows システムで推奨されません。 NDIS 6.83 以降で CFH を使用することはロゴ テスト違反ではありませんが、NDIS ドライバーは、その使用方法のガイダンスとして次の表を使用する必要があります。
呼び出し側 | 推奨事項 | メモ |
---|---|---|
AOAC システムを対象とするドライバー | 実装してはなりません | 定期的なハングチェック アクティビティにより、バッテリ寿命の問題が発生します |
Windows Server システムを対象とするドライバー | 実装してはなりません | CPU に負荷がかかると問題が発生します |
仮想 (ソフトウェアのみ) ミニポート ドライバー | 実装してはなりません | ハードウェアがないとリセットできません |
その他の新しい NDIS 6.83 以降のドライバー | 実装しないでください | |
その他の既存の NDIS 6.82 以前のコード | 変更する必要はありませんが、将来の再作業でハングチェックとリセットを削除することを検討する必要があります |