USB アイドル要求 IRP コールバック ルーチンの実装
MiniportIdleNotification が呼び出されると、USB ミニポート ドライバーは、基になる USB バス ドライバーに USB アイドル要求 (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) の I/O 要求パケット (IRP) を発行する IoCallDriver を呼び出します。 ミニポート ドライバーは、ネットワーク アダプターがアイドル状態であり、中断する必要があることを USB バス ドライバーに通知するこの IRP を発行します。
USB ミニポート ドライバーは、USB アイドル要求 IRP の IRP コールバック ルーチンを提供する必要があります。 USB バス ドライバーは、ネットワーク アダプターを中断し、低電力状態に移行できることを決定するときに、このルーチンを呼び出します。
注 USB バス ドライバーは、USB アイドル要求 IRP を処理した後、コールバック ルーチンを IoCallDriver への呼び出しのコンテキストで同期的に呼び出すか、 MiniportIdleNotification が返された後に非同期的に呼び出します。
コールバック ルーチンは、ネットワーク アダプターの低電力状態遷移を続行できることを NDIS に通知するために NdisMIdleNotificationConfirm を呼び出す必要があります。 ドライバーが NdisMIdleNotificationConfirm を呼び出すときは、ネットワーク アダプターが移行できる最も低いデバイスの電源状態も指定する必要があります。
NdisMIdleNotificationConfirmへの呼び出しのコンテキスト内で、NDIS は、ネットワーク アダプターを低電力状態に移行するために必要な手順を実行します。 詳細については、「NDISセレクティブ サスペンド アイドル通知の処理」を参照してください。
USB アイドル要求 IRP のコールバック ルーチンの例を次に示します。
//
// MiniportUsbIdleRequestCallback()
//
// This is the USB selective suspend idle notification. All that is
// needed is to inform NDIS that the USB stack is ready to go to a
// low-power state. Be aware that USB devices will always be requested
// to transition to a power state of NdisDeviceStateD2.
//
VOID MiniportUsbIdleRequestCallback(PVOID AdapterContext)
{
NdisMIdleNotificationConfirm(
AdapterContext->MiniportAdapterHandle,
NdisDeviceStateD2
);
return;
}
USB アイドル要求コールバック ルーチンの詳細については、「USB アイドル要求 IRP コールバック ルーチン」を参照してください。