次の方法で共有


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

NDIS は、ミニポート ドライバーの MiniportPause 関数を呼び出して、指定されたミニポート アダプターを介したネットワーク データのフローを停止します。

メモMINIPORT_PAUSE型を使用して関数を宣言する必要があります。 詳細については、次の例に関するセクションを参照してください。
 

構文

MINIPORT_PAUSE MiniportPause;

NDIS_STATUS MiniportPause(
  [in] NDIS_HANDLE MiniportAdapterContext,
  [in] PNDIS_MINIPORT_PAUSE_PARAMETERS PauseParameters
)
{...}

パラメーター

[in] MiniportAdapterContext

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

[in] PauseParameters

へのポインター ミニポート アダプターの 一時停止パラメーターを定義するNDIS_MINIPORT_PAUSE_PARAMETERS構造体。

戻り値

MiniportPause は、次のいずれかの状態値を返します。

リターン コード 説明
NDIS_STATUS_SUCCESS
MiniportPause は、ミニポート アダプターを介したネットワーク データのフローを正常に停止しました。
NDIS_STATUS_PENDING
MiniportPause は一時停止操作を完了せず、操作は非同期的に完了します。 ミニポート ドライバーは、操作が完了したときに NdisMPauseComplete 関数を呼び出す必要があります。

注釈

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

NDIS は、フィルター ドライバーの追加や削除、プロトコル ドライバーのバインドまたはバインド解除などの PnP 操作に干渉する可能性があるデータ フローを停止するミニポート アダプターを一時停止します。

NDIS は、ミニポート ドライバーの ミニポートPause 関数を呼び出して、 MiniportAdapterContext で指定されたミニポート アダプターの一時停止要求を開始します。 ミニポート アダプターは、 一時停止 操作が完了するまで一時停止状態のままになります。

一時停止状態のミニポート アダプターの場合、ミニポート ドライバー:

  • へのすべての呼び出しを待機します。 返す NdisMIndicateReceiveNetBufferLists 関数。
  • NDIS が未処理の受信表示からミニポート ドライバーのすべての NET_BUFFER_LIST 構造体の所有権を返すのを待ちます。 MiniportReturnNetBufferLists 関数。
  • 未処理のすべての送信要求を完了し、 を呼び出します。未処理のすべての送信要求に対する NdisMSendNetBufferListsComplete 関数。
  • に対して行われたすべての新しい送信要求を拒否します。 ミニポートSendNetBufferLists 関数は、 NdisMSendNetBufferListsComplete を呼び出すことによってすぐに機能します。 各NET_BUFFER_LISTの完全な状態をNDIS_STATUS_PAUSEDに設定する必要があります。
  • を使用して状態の表示を提供できます。 NdisMIndicateStatusEx 関数。
  • MiniportOidRequest 関数で OID 要求を処理する必要があります。
  • ミニポート アダプターを停止すると、ドライバーが要求を処理したり、状態の表示を提供したりできない場合は、ミニポート アダプターを完全に停止しないでください。
  • 初期化中にドライバーが割り当てたリソースを解放しないでください。
NDIS は、ミニポート アダプターが 一時停止 状態にある間、停止、初期化、電源変更、一時停止、再起動要求など、ミニポート アダプターの他の PnP 操作を開始しません。 NDIS は、ミニポート アダプターが 一時停止 状態の後にこれらの PnP 操作を開始できます。

ミニポート ドライバーは、未処理のすべての送信要求を完了し、NDIS が (未処理の受信インジケーターから) 受信したすべてのネットワーク データ構造を返す後、ドライバーは一時停止操作を完了する必要があります。 ドライバーが MiniportPause からNDIS_STATUS_SUCCESSを返す場合、一時停止操作は完了です。 ドライバーがNDIS_STATUS_PENDINGを返す場合、ミニポート アダプターは 一時停止 状態のままになり、ドライバーが NdisMPauseComplete 関数を呼び出した後に一時停止操作が完了します。 一時停止操作が完了すると、ミニポート アダプターは 一時停止 状態になります。

一時停止状態のミニポート アダプターの場合、ミニポート ドライバー:

  • NdisMSendNetBufferListsComplete を呼び出して、MiniportSendNetBufferLists に対して行われたすべての送信要求をすぐに拒否する必要があります。 各NET_BUFFER_LISTの Status メンバーをNDIS_STATUS_PAUSEDに設定する必要があります。
  • 受信割り込み ( MiniportInterrupt 関数を参照) と割り込み DPC ( MiniportInterruptDPC 関数を参照) を処理できますが、受信したネットワーク データを示すべきではありません。
  • NdisMIndicateStatusEx 関数を使用して状態を示すことができます。
  • MiniportOidRequest 関数で OID 要求を処理する必要があります。
  • でデバイスの電源状態を変更する要求を処理する必要がある MiniportDevicePnPEventNotify 関数。
  • NetTimerCallback 関数の呼び出しを処理できます。
  • ミニポートResetEx 関数でハードウェアをリセットする要求を処理できます。
ミニポート ドライバーは、一時停止要求を失敗できません。 したがって、ミニポート ドライバーが一時停止要求を処理するリソースが必要な場合は、初期化中にリソースを事前に割り当てておく必要があります。

NDIS は 、一時停止されているミニポート アダプターの再起動要求を開始するミニポートRestart 関数を呼び出します。

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

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

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

MINIPORT_PAUSE MyPause;

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

_Use_decl_annotations_
NDIS_STATUS
 MyPause(
    NDIS_HANDLE  MiniportAdapterContext,
    PNDIS_MINIPORT_PAUSE_PARAMETERS  MiniportPauseParameters
    )
  {...}

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

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

要件

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

こちらもご覧ください

MiniportDevicePnPEventNotify

MiniportInitializeEx

MiniportInterrupt

MiniportInterruptDPC

MiniportResetEx

MiniportRestart

MiniportReturnNetBufferLists

MiniportSendNetBufferLists

NDIS_MINIPORT_PAUSE_PARAMETERS

NET_BUFFER_LIST

NdisMIndicateReceiveNetBufferLists

NdisMIndicateStatusEx

NdisMPauseComplete

NdisMRegisterMiniportDriver

NdisMSendNetBufferListsComplete

NetTimerCallback