实现 USB 空闲请求 IRP 回调例程

调用 MiniportIdleNotification 时,USB 微型端口驱动程序调用 IoCallDriver , (IRP) 发出 USB 空闲请求的 I/O 请求数据包, (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) 到基础 USB 总线驱动程序。 微型端口驱动程序会发出此 IRP,以通知 USB 总线驱动程序网络适配器处于空闲状态,必须挂起。

USB 微型端口驱动程序必须为 USB 空闲请求 IRP 提供 IRP 回调例程。 USB 总线驱动程序在确定网络适配器可以挂起并转换为低功耗状态时调用此例程。

注意 USB 总线驱动程序处理 USB 空闲请求 IRP 后,它会在调用 IoCallDriver 的上下文中同步调用回调例程,或者在 MiniportIdleNotification 返回后异步调用回调例程。

回调例程只需调用 NdisMIdleNotificationConfirm 即可通知 NDIS 它可继续进行网络适配器的低功耗状态转换。 驱动程序调用 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 回调例程。