Share via


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

警告

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

NDIS は、ネットワーク インターフェイス カード (NIC) のリセットを開始する NDIS ミニポート ドライバーのミニポートResetEx 関数を呼び出します。 詳細については、「ミニポート アダプターのチェック-for-ハングとリセット操作」および「ミニポート ドライバーハードウェアリセット」を参照してください。

メモ NDIS ミニポート ドライバーは、 MINIPORT_RESET 型を使用してこの関数を宣言できます。
 

構文

MINIPORT_RESET MiniportReset;

NDIS_STATUS MiniportReset(
  [in]  NDIS_HANDLE MiniportAdapterContext,
  [out] PBOOLEAN AddressingReset
)
{...}

パラメーター

[in] MiniportAdapterContext

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

[out] AddressingReset

ブール型変数へのポインター。 NDIS が現在の値にアドレス指定やその他の構成設定を復元する MiniportOidRequest 関数を呼び出す必要がある場合、ミニポート ドライバーは TRUE にこの変数を設定します。 詳細については、「 ハードウェアのリセット」を参照してください。

戻り値

MiniportResetEx は 、次のいずれかの状態値を返すことができます。

リターン コード 説明
NDIS_STATUS_SUCCESS

MiniportResetEx は、ミニポート アダプターを操作状態に正常にリセットします。

NDIS_STATUS_PENDING
ドライバーは、操作が完了したときに NdisMResetComplete 関数を呼び出すことによって、リセット操作を非同期的に完了します。
NDIS_STATUS_RESET_IN_PROGRESS

MiniportResetEx は、ミニポート アダプターが現在リセットされていることを確認したので、この呼び出しは余分です。

NDIS_STATUS_SOFT_ERRORS
MiniportResetEx は ミニポート アダプターを正常にリセットしましたが、操作中に回復可能なエラーが発生しました。 MiniportResetEx は、エラーに関する詳細情報を含む NdisWriteErrorLogEntry 関数を呼び出す必要があります。
NDIS_STATUS_HARD_ERRORS
MiniportResetEx はミニポート アダプターをリセットしようとしましたが、操作中に回復不可能なエラーが発生しました。 MiniportResetEx は、エラーに関する詳細情報を含む NdisWriteErrorLogEntry を呼び出す必要があります。

注釈

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

ミニポートResetEx は中間ドライバーには必要ありません。

MiniportResetEx は、ミニポート アダプターのパラメーターをリセットできます。 リセットによってミニポート アダプターのステーション アドレスが変更された場合、ミニポート ドライバーは、リセットが完了した後、ステーション アドレスの以前の値を自動的に復元します。 ハードウェアによってリセットされるマルチキャストまたは機能アドレッシング マスクは、この機能でリセットする必要はありません。

リセット操作でマルチキャストや機能アドレス指定情報などの他の情報が変更された場合、 MiniportResetEx は 、戻る前に AddressingReset の変数を TRUE に設定する必要があります。 これにより、NDIS は MiniportOidRequest 関数を呼び出して情報を復元します。 NDIS では、 OID_PNP_ADD_WAKE_UP_PATTERNを呼び出すことによって、WAKE on the LAN (WoL) パターン リストも復元されます。 ハードウェア の一覧が既にリセットされているため、ドライバーは、そのアダプター コンテキストから WoL パターン リストを解放する必要があります。

NDIS は保留中の OID 要求を中止したり、要求を送信したりしません。 ドライバーが保留中の OID を安全に完了したり、リセット後に要求を送信したりできる場合、ドライバーは保留中の OID を保持するか、リセット操作が完了するまで要求を送信できます。 それ以外の場合、ドライバーは保留中の OID を完了するか、 NdisMOidRequestComplete または を呼び出して要求を送信する必要があります NdisMSendNetBufferListsComplete 関数は 、MiniportResetEx が返される前にそれぞれ機能します。

メモ NDIS 6.30 以降では、ミニポート ドライバーは保留中の OID を保持したり、リセット操作が完了するまで要求を送信したりすることはできません。 代わりに、ドライバーは、リセット操作が完了する前に 、NdisMOidRequestComplete 関数または NdisMSendNetBufferListsComplete 関数をそれぞれ呼び出して、これらの保留中の要求を完了する必要があります。 ドライバーがリセット操作を非同期的に完了した場合は、保留中の OID を完了し、ドライバーが NdisMResetComplete を呼び出す前に要求を送信する必要があります。
 
ミニポート ドライバーは、各リセット操作の開始と終了を通知するために NdisMIndicateStatusEx 関数を呼び出さないでください。 NDIS は、リセットの開始と終了時にバインドされたプロトコル ドライバーに通知します。

ミニポートResetEx は、リセット操作中にミニポート アダプターの状態の変更を待機する必要がある場合は、NdisStallExecution 関数を呼び出すことができます。 ただし、
MiniportResetEx 関数は、50 マイクロ秒を超える時間間隔で NdisStallExecution を呼び出してはなりません。 ドライバーが 50 マイクロ秒より長く待機する必要がある場合 (またはポーリングする場合)、代わりにタイマーを設定し、NDIS_STATUS_PENDINGを返す必要があります。

MiniportResetEx がNDIS_STATUS_PENDINGを返す場合、ドライバーは NdisMResetComplete 関数を呼び出してリセットを完了する必要があります。

ミニポート アダプターが MediaConnectStateConnected 状態にあり、MediaConnectStateUnknown 状態の変更など、リセットによって状態が変化した場合、ミニポート ドライバーは、状態の変更をNDIS_STATUS_LINK_STATE状態を示して報告する必要があります。 ミニポート ドライバーは、リセット後にリンクが再確立されたときに MediaConnectStateConnected 状態表示も示す必要があります。

MiniportResetEx は割り込みによって割り込むことができます。

NDIS は 、MiniportCheckForHangEx 関数を定期的に呼び出して 、MiniportResetEx を呼び出す必要があるかどうかを判断します。 MiniportCheckForHangEx を呼び出すための既定のタイムアウトは 2 秒です。 この既定値が短すぎる場合は、ミニポート ドライバーを呼び出すときに大きな CheckForHangTimeInSeconds 値を設定できます。
初期化中の NdisMSetMiniportAttributes 関数。 詳細については、「 ミニポート アダプターのハングチェックとリセット操作」を参照してください。

NDIS は、NIC が受信操作の応答を停止したかどうかを判断できません。 この種のエラーを処理するために、 MiniportCheckForHangEx 関数は受信操作を監視し、必要に応じて TRUE を 返して強制的にリセットできます。 ミニポートは、 NdisMResetMiniport を呼び出すことによってリセットを要求することもできます。

NDIS は IRQL <= DISPATCH_LEVEL で MiniportResetEx を呼び出します。

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

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

MINIPORT_RESET MyResetEx;

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

_Use_decl_annotations_
NDIS_STATUS
 MyResetEx(
    NDIS_HANDLE  MiniportAdapterContext,
    PBOOLEAN  AddressingReset
    )
  {...}

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

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

要件

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

こちらもご覧ください

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

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

MiniportCheckForHangEx

MiniportInitializeEx

MiniportOidRequest

NDIS_STATUS_LINK_STATE

NdisMIndicateStatusEx

NdisMOidRequestComplete

NdisMRegisterMiniportDriver

NdisMResetComplete

NdisMResetMiniport

NdisMSendNetBufferListsComplete

NdisMSetMiniportAttributes

NdisStallExecution

NdisWriteErrorLogEntry