NDIS セレクティブ サスペンド アイドル通知の完了
NDIS は、MiniportIdleNotification ハンドラー関数を呼び出して基になるネットワーク アダプターがアイドル状態であると思われるドライバーに通知します。 この操作の詳細については、「NDIS 選択的中断アイドル通知の処理」を参照してください。
アイドル通知が発行された後、ミニポート ドライバーは、次の条件下で NDIS 選択的中断アイドル通知を完了します。
NDIS は、基になるミニポート ドライバーの MiniportCancelIdleNotification ハンドラー関数を呼び出すことによってアイドル状態の通知を取り消します。
ミニポート ドライバーは、自らアイドル状態の通知を完了します。 これを行う理由は、ドライバーとアダプターの設計と要件に固有です。 たとえば、ドライバーは、ネットワーク アダプターでの受信アクティビティを検出した場合、アイドル状態の通知を完了できます。
注: ミニポート ドライバーは、アイドル状態の通知を明示的にキャンセルできません。 NDIS がアイドル状態の通知を取り消すと、ミニポート ドライバーは、このトピックの説明に従って通知を完了する必要があります。 詳細については、「NDIS選択的中断アイドル通知の処理」を参照してください。
どちらの場合も、ミニポート ドライバーは、アイドル状態の通知を完了して、完全な電源状態でアダプターを再開する必要があります。 アイドル状態の通知を完了するため、ミニポート ドライバーは、アイドル状態の通知のために以前に発行されている可能性があるバス固有の I/O 要求パケット (IRP) を取り消す必要があります。 最後に、ドライバーは NdisMIdleNotificationComplete を呼び出して、ネットワーク アダプターを完全な電源状態に移行できることを NDIS に通知します。
たとえば、USB ネットワーク アダプターのミニポート ドライバーは、次の手順に従ってアイドル状態の通知を完了します。
ミニポート ドライバーは、保留中の USB アイドル要求 (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) IRP を取り消します。 ミニポート ドライバーは、NDIS がドライバーの MiniportIdleNotification 関数を呼び出したときに、基になる USB バス ドライバーにこの IRP を発行しました。 ミニポート ドライバーは、IoCancelIrp を呼び出すことによって、この IRP をキャンセルします。
バス ドライバーは、USB アイドル要求 IRP を取り消すと、IRP のミニポート ドライバーの完了ルーチンを呼び出します。 この呼び出しは、IRP が完了し、ネットワーク アダプターが完全な電源状態に移行できることをドライバーに通知します。 完了ルーチンのコンテキストから、ドライバーは NdisMIdleNotificationComplete を呼び出して、ネットワーク アダプターを完全電源状態に移行できることを NDIS に通知します。
USB アイドル要求 IRP 完了ルーチンを実装する方法の詳細については、「USB アイドル要求 IRP 完了ルーチンの実装」を参照してください。
注: バス固有のアイドル状態の要求を取り消す依存関係に応じて、ミニポート ドライバーは、MiniportCancelIdleNotification の呼び出しのコンテキストで同期的に、またはMiniportCancelIdleNotification が返った後に非同期的にNdisMIdleNotificationComplete を呼び出します。
ミニポート ドライバーは、アイドル状態の通知のバス固有の IRP を取り消した後、NdisMIdleNotificationComplete を呼び出します。 この呼び出しは、アイドル状態の通知が完了したことを NDIS に通知します。 NDIS は、ネットワーク アダプターを完全な電源状態に移行することによって、選択的な一時停止操作を完了します。
NdisMIdleNotificationComplete が呼び出されると、NDIS は次の手順を実行します。
NDIS は、基になるバス ドライバーに IRP_MN_SET_POWER を発行します。 この IRP は、ネットワーク アダプターの電源状態を PowerDeviceD0 に設定するバス ドライバーを要求します。
NDIS は、ミニポート ドライバーに OID_PNP_SET_POWER のオブジェクト識別子 (OID) セット要求を発行します。 この OID 要求では、NDIS は、ネットワーク アダプターが NdisDeviceStateD0 の完全な電源状態に移行していることを指定します。
この OID セット要求を処理すると、ドライバーは、アダプターを完全な電源動作に向けて準備します。 これには、受信エンジンと送信エンジンを、低電力状態に移行する前と同じ状態に復元することが含まれます。 ドライバーはその後、NDIS_STATUS_SUCCESS を使用して OID 要求を完了します。
次の図は、USB ネットワーク アダプターのミニポート ドライバによるアイドル状態の通知の完了に関連する手順を示しています。
注: ミニポート ドライバーがアイドル状態の通知を完了するとき、NdisMIdleNotificationComplete への呼び出しによって以前に完了したアイドル状態の通知の NdisMIdleNotificationConfirm を呼び出してはなりません。