次の方法で共有


OID_PNP_SET_POWER

OID_PNP_SET_POWER OID は、基になるネットワーク アダプターが、InformationBufferで指定されたデバイスの電源状態に遷移することをミニポート ドライバーに通知します。 デバイスの電源状態は、次のいずれかの NDIS_DEVICE_POWER_STATE 値として指定されます。

  • NdisDeviceStateD0 する
  • NdisDeviceStateD1
  • NdisDeviceStateD2
  • NdisDeviceStateD3

OID_PNP_SET_POWER要求の前に、OID_PNP_QUERY_POWER 要求が含まれる場合があります。

NDIS 6.30 以降では、次の条件に該当する場合、電源状態の遷移中に NDIS ドライバーを一時停止および再起動しません。

  • 基になるミニポート ドライバーは、NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 構造体の NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND フラグを設定します。 ドライバーは、NdisMSetMiniportAttributes 関数への呼び出しで、この構造体へのポインターを渡します。

  • ミニポート ドライバーに接続されているすべての上にあるフィルター ドライバーは、NDIS 6.30 以降のバージョンの NDIS をサポートします。

  • ミニポート ドライバーにバインドされているすべての上にあるプロトコル ドライバーは、NDIS 6.30 以降のバージョンの NDIS をサポートします。

Low-Power 状態 (D1-D3) への移行

ミニポート ドライバーは、低電力状態に移行するOID_PNP_SET_POWERのセット要求を処理する場合は、次の操作を行う必要があります。

  • 指定されたネットワーク デバイスの電源状態に合わせて、ネットワーク アダプターを完全に準備します。 これを実現するためにミニポート ドライバーによって実行されるタスクは、デバイスに依存します。

  • NdisMIndicateReceiveNetBufferLists 関数の呼び出しが返されるのを待ちます。

  • ネットワーク アダプターによって処理された送信要求が完了するまで待ちます。 完了したら、ミニポート ドライバーは NdisMSendNetBufferListsComplete関数を呼び出す必要があります。 ドライバーは、各 NET_BUFFER_LIST 構造体の 状態 メンバーを適切なNDIS_STATUS_Xxx 値に設定する必要があります。

  • NdisMSendNetBufferListsComplete関数呼び出して、保留中のすべての送信要求を完了します。 ドライバーは、各 NET_BUFFER_LIST 構造体の 状態 メンバーを NDIS_STATUS_LOW_POWER_STATEに設定する必要があります。

  • NdisMSendNetBufferListsComplete 関数を呼び出すことによって、ミニポートSendNetBufferLists 関数に対して行われたすべての新しい送信要求をすぐに拒否します。 ドライバーは、各 NET_BUFFER_LIST 構造体の 状態 メンバーを NDIS_STATUS_LOW_POWER_STATEに設定する必要があります。

NDIS 6.30 以降のバージョンの NDIS をサポートするミニポート ドライバーも、次の操作を行う必要があります。

  • ミニポートReturnNetBufferLists 関数の呼び出しを通じて、保留中の受信通知の完了を待つ必要はありません。 また、ミニポート ドライバーは、完了を待機しているパケットの NET_BUFFER_LIST 構造またはデータを変更しないでください。

  • OID_PNP_SET_POWER要求を、一時停止または実行中のアダプター状態から低電力状態に処理します。 これらの状態の詳細については、「ミニポート アダプターの状態と操作 を参照してください。

ネットワーク アダプターが D3 状態に移行する前に、ミニポート ドライバーは、次のタスクを実行してミニポート ドライバーの制御下のすべてをオフにする必要があります。

  • ネットワーク アダプターで割り込みと DMA エンジンを無効にします。

  • ネットワーク アダプターで受信エンジンを停止します。

  • 保留中の受信通知に関連付けられている受信記述子とパケット バッファーの割り当てを解除または変更しないでください。

  • すべての NDIS タイマーを取り消します。

バス ドライバーがネットワーク アダプターを D3 状態に移行した後、ミニポート ドライバーはネットワーク アダプターにアクセスできません。

Full-Power 状態への移行 (D0)

ミニポート ドライバーは、完全な電源状態に遷移するOID_PNP_SET_POWERのセット要求を処理するとき、アダプターが低電力状態に遷移する前に、受信エンジンと同じ状態にネットワーク アダプターの受信エンジンを復元する必要があります。

ミニポート ドライバーは、保留中の受信インジケーターに関連付けられている受信バッファーにアクセスしたり、変更したりしてはなりません。

NDIS は、低電力状態に移行する前に、ドライバーの ミニポートPause 関数を呼び出した場合にのみ、完全な電源状態への移行後にミニポート ドライバーの ミニポートRestart 関数を呼び出します。

メモ 中間ドライバーは常にOID_PNP_SET_POWERのクエリに NDIS_STATUS_SUCCESS を返す必要があります。 中間ドライバーは、基になるミニポート ドライバーにOID_PNP_SET_POWER要求を伝達しないでください。

戻り値の状態コード

ミニポート ドライバーの ミニポートOidRequest 関数は、この要求に対して次のいずれかの値を返します。

用語 形容

NDIS_STATUS_SUCCESS

ミニポート ドライバーが要求を正常に完了しました。

NDIS_STATUS_PENDING

ミニポート ドライバーは、非同期的に要求を完了します。 ミニポート ドライバーは、すべての処理を完了した後、NdisMOidRequestComplete 関数を呼び出して、Status パラメーターのNDIS_STATUS_SUCCESSを渡すことによって要求を成功させる必要があります。

NDIS_STATUS_NOT_ACCEPTED

ミニポート ドライバーがリセット中です。

必要条件

バージョン

NDIS 5.1 および NDIS 6.0 以降でサポートされています。

ヘッダ

Ntddndis.h (Ndis.h を含む)

関連項目


ミニポートInitializeEx

ミニポートPause

ミニポートRestart

ミニポートReturnNetBufferLists

ミニポートSendNetBufferLists

NDIS_DEVICE_POWER_STATE

NdisMIndicateReceiveNetBufferLists

NdisMSendNetBufferListsComplete

NET_BUFFER_LIST