Share via


NDIS セレクティブ サスペンド アイドル通知のキャンセル

アイドルタイムアウト期間にネットワーク アダプターが非アクティブになった場合、NDIS は選択的な中断操作を開始します。 この操作により、ネットワーク アダプターは低電力状態に遷移します。 NDIS は、ミニポート ドライバーにアイドル状態の通知を発行することによって、この操作を開始します。 この操作の詳細については、「NDIS 選択的中断アイドル通知の処理」を参照してください。

NDIS は、MiniportIdleNotification ハンドラー関数を呼び出して基になるネットワーク アダプターがアイドル状態であると思われるドライバーに通知します。 アイドル通知が発行された後、次の条件の 1 つ以上が true の場合、NDIS は保留中のアイドル通知を取り消します。

NDIS は、基になるミニポート ドライバーの MiniportCancelIdleNotification ハンドラー関数を呼び出すことによってアイドル状態の通知を取り消します。 この関数が呼び出されると、ミニポート ドライバーは、完全な電源状態にアダプターを再開するアイドル状態の通知を完了する必要があります。 このプロセスのガイドラインについては、「NDIS 選択的中断アイドル通知の完了」を参照してください。

MiniportCancelIdleNotification ハンドラー関数の実装方法の詳細については、「MiniportCancelIdleNotification ハンドラー関数の実装」を参照してください。

上にあるドライバー アクティビティが原因でアイドル状態の通知を取り消す

NDIS は、ネットワーク アダプターが中断され、低電力状態にあるミニポート ドライバーに発行された送信要求と OID 要求を監視します。 この場合、NDIS は、ネットワーク アダプターが完全な電源状態に再開できるように、未処理のアイドル通知を取り消します。

NDIS とミニポート ドライバーは、アイドル状態の通知が取り消されたときに、次の手順に従います。

  1. NDIS は、MiniportCancelIdleNotification ハンドラー関数を呼び出して未処理のアイドル通知を取り消します。 このハンドラー関数が呼び出されると、ミニポート ドライバーは、アイドル状態の通知に対して以前に発行した可能性があるバス固有の I/O 要求パケット (IRP) を取り消す必要があります。

    たとえば、 MiniportCancelIdleNotification が呼び出されると、USB ネットワーク アダプターのミニポートは、次の手順を実行します。

    1. ミニポート ドライバーは、保留中の USB アイドル要求 (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) IRP を取り消します。 ミニポート ドライバーは、NDIS がドライバーの MiniportIdleNotification 関数を呼び出したときに、基になる USB バス ドライバーにこの IRP を発行しました。 ミニポート ドライバーは、IoCancelIrp を呼び出すことによって、この IRP をキャンセルします。

    2. バス ドライバーは、USB アイドル要求 IRP を取り消すと、IRP のミニポート ドライバーの完了ルーチンを呼び出します。 この呼び出しは、IRP が完了し、ネットワーク アダプターが完全な電源状態に移行できることをドライバーに通知します。 完了ルーチンのコンテキストから、ドライバーは NdisMIdleNotificationComplete を呼び出して、ネットワーク アダプターを完全電源状態に移行できることを NDIS に通知します。

    : バス固有のアイドル状態の要求を取り消す依存関係に応じて、ミニポート ドライバーは、MiniportCancelIdleNotification の呼び出しのコンテキストで同期的に、またはMiniportCancelIdleNotification が返った後に非同期的にNdisMIdleNotificationComplete を呼び出します。

    USB アイドル要求 IRP 完了ルーチンを実装する方法の詳細については、「USB アイドル要求 IRP 完了ルーチンの実装」を参照してください。

  2. ミニポート ドライバーは、アイドル状態の通知のバス固有の IRP を取り消した後、NdisMIdleNotificationComplete を呼び出します。 この呼び出しは、アイドル状態の通知が完了したことを NDIS に通知します。 NDIS は、ネットワーク アダプターを完全な電源状態に移行することによって、選択的な一時停止操作を完了します。

    NdisMIdleNotificationComplete が呼び出されると、NDIS は次の手順を実行します。

    1. NDIS は、基になるバス ドライバーに IRP_MN_SET_POWER を発行します。 この IRP は、ネットワーク アダプターの電源状態を PowerDeviceD0 に設定するバス ドライバーを要求します。

    2. NDIS は、ミニポート ドライバーに OID_PNP_SET_POWER の OID セット要求を発行します。 この OID 要求では、NDIS は、ネットワーク アダプターが NdisDeviceStateD0 の完全な電源状態に移行していることを指定します。

      この OID セット要求を処理すると、ドライバーは、アダプターを完全な電源動作に向けて準備します。 これには、受信エンジンと送信エンジンを、低電力状態に移行する前と同じ状態に復元することが含まれます。 ドライバーはその後、NDIS_STATUS_SUCCESS を使用して OID 要求を完了します。

次の図は、NDIS が USB ネットワーク アダプターのミニポート ドライバーに発行されたアイドル状態の通知を取り消すときに関係する手順を示しています。

Diagram that shows the idle notification resume process for a USB network adapter.

ウェイクアップ イベントによるアイドル通知の取り消し

ネットワーク アダプターが低電力状態に移行する前に、NDIS は、ネットワーク アダプターに OID_PM_PARAMETERS の OID セット要求を発行します。 この OID 要求は、アダプターが全電源状態に再開するように通知できるウェイクアップ イベントの種類を指定します。 NDIS 選択的中断の場合、アダプターは、次のいずれかのウェイクアップ イベントを通知するように構成されます。

NDIS とミニポート ドライバーは、ネットワーク アダプターによって生成されたウェイクアップ信号のため、NDIS がアイドル状態の通知を取り消すときに次の手順に従います。

  1. バス ドライバーは、アダプターを 低電力状態に移行する前に NDIS によって発行された IRP_MN_WAIT_WAKE を完了します。 IRP を完了すると、バス ドライバーは、ネットワーク アダプターがウェイクアップ信号を生成したことを NDIS に通知します。

  2. NDIS は、アイドル状態の通知を 取り消す操作を開始する MiniportCancelIdleNotification ハンドラー関数を呼び出します。 この操作に関連する手順は、上にあるドライバーのアクティビティが原因でアイドル状態の通知をキャンセルするで説明した手順と同じです。

たとえば、次の図は、USB ネットワーク アダプターによって通知されたウェイクアップ イベントが原因で NDIS がアイドル状態の通知を取り消すときに関係する手順を示しています。

Diagram that shows NDIS idle notification wake-up process for a USB network adapter.