次の方法で共有


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

警告

すべての NDIS 6.83 以降のドライバーでは、ミニポートResetEx および ミニポートCheckForHangEx コールバック関数は推奨されません。 詳細については、「NDIS 6.83 以降の ハングチェックおよびリセット操作」を参照してください。

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

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

構文

MINIPORT_RESET MiniportReset;

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

パラメーター

[in] MiniportAdapterContext

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

[out] AddressingReset

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

戻り値

ミニポートResetEx は、次のいずれかの状態値を返すことができます。

リターン コード 形容
NDIS_STATUS_SUCCESS

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

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

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

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

備考

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

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

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

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

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

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

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

ミニポートResetEx がNDIS_STATUS_PENDINGを返す場合、ドライバーは、NdisMResetComplete 関数を呼び出すことによってリセットを完了する必要があります。

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

ミニポートResetEx 割り込みによって割り込むことができます。

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

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

NDIS は、IRQL <= DISPATCH_LEVEL でミニポートResetEx 呼び出します。

の例

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

たとえば、"MyResetEx" という名前の ミニポートResetEx 関数を定義するには、次のコード例に示すように 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 以降でサポートされています。
ターゲット プラットフォーム ウィンドウズ
ヘッダー ndis.h (Ndis.h を含む)
IRQL <= DISPATCH_LEVEL

関連項目

ミニポート アダプターのハングチェックとリセット操作

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

ミニポートチェックForHangEx

ミニポートInitializeEx

ミニポートOidRequest

NDIS_STATUS_LINK_STATE

NdisMIndicateStatusEx

NdisMOidRequestComplete

NdisMRegisterMiniportDriver

NdisMResetComplete

NdisMResetMiniport

NdisMSendNetBufferListsComplete

NdisMSetMiniportAttributes

NdisStallExecution

NdisWriteErrorLogEntry