USB アイドル要求 IRP 完了ルーチンの実装

MiniportIdleNotification が呼び出されると、USB ミニポート ドライバーは、基になる USB バス ドライバーに USB アイドル要求 (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) の I/O 要求パケット (IRP) を発行する IoCallDriver を呼び出します。 ミニポート ドライバーは、ネットワーク アダプターがアイドル状態であり、中断する必要があることを USB バス ドライバーに通知するこの IRP を発行します。

USB ミニポート ドライバーは、USB アイドル要求 IRP の完了ルーチンを登録するために IoSetCompletionRoutineEx も呼び出す必要があります。 USB バス ドライバーは、USB ミニポート ドライバーによって取り消された後、IRP を完了するときに、完了ルーチンを呼び出します。 NDIS が MiniportCancelIdleNotification を呼び出してアイドル通知をキャンセルすると、USB ミニポート ドライバーは IRP をキャンセルします。

完了ルーチンは、 NdisMIdleNotificationComplete を呼び出すだけで、ネットワーク アダプターの全電力状態遷移を続行できることを NDIS に通知します。

注: 完了ルーチンは、USB ミニポート ドライバーが NDIS からの別のアイドル通知中に IRP リソースを再利用する場合は、STATUS_MORE_PROCESSING_REQUIREDを返す必要があります。

USB アイドル要求 IRP の完了ルーチンの例を次に示します。

//
// MiniportUsbIdleRequestCompletion()
//
// This is the IO_COMPLETION_ROUTINE for the selective suspend IOCTL.
// All that is needed is to inform NDIS that the IdleNotification
// operation is complete.
//
VOID MiniportUsbIdleRequestCompletion(PVOID AdapterContext)
{
    NdisMIdleNotificationComplete(Adapter->MiniportAdapterHandle);

    // We will be reusing the IRP later, so do not let the IO manager delete it.
    return STATUS_MORE_PROCESSING_REQUIRED;
}

USB アイドル要求コールバック ルーチンの詳細については、「USB アイドル要求 IRP 完了ルーチン」を参照してください。