Share via


MiniportCancelIdleNotification ハンドラー関数の実装

NDIS は、ミニポート ドライバーの MiniportCancelIdleNotification ハンドラー関数を呼び出して、アイドル通知プロセスをキャンセルし、ネットワーク アダプターを完全な電源状態に移行します。 この関数が呼び出されると、ミニポート ドライバーは、次の手順に従う必要があります。

  1. ミニポート ドライバーは、アイドル状態の通知のために以前に発行されている可能性があるバス固有の IRP を取り消す必要があります。

  2. ミニポート ドライバーは NdisMIdleNotificationCompleteを呼び出 します。 この呼び出しは、アイドル状態の通知が完了したことを NDIS に通知します。 NDIS は、完全な電源状態にネットワーク アダプターを移行することによって選択的な中断操作をコンパイルします。

たとえば、 MiniportCancelIdleNotification が呼び出されると、USB ミニポート ドライバーは IoCancelIrp を呼び出して、USB アイドル要求 (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) の I/O 要求パケット (IRP) を取り消します。 USB ミニポート ドライバーは、以前に MiniportIdleNotification ハンドラー関数でこの IRP を発行しました。 USB バス ドライバーは、IRP をキャンセルするとすぐに、IRP の完了ルーチンを呼び出します。 USB バス ドライバーは、完了ルーチンを呼び出すと、IRP が取り消され、デバイスが完全な電源状態に再開できることを確認します。 完了ルーチンのコンテキストでは、ミニポート ドライバーは NdisMIdleNotificationComplete を呼び出 します。

注意 USBバス・ドライバは、IoCancelIrp 呼び出しのコンテキストで同期的に完了ルーチンを呼び出すか、 MiniportCancelIdleNotification が戻った後に非同期的に完了ルーチンを呼び出すことができます。

USB ミニポート ドライバーの MiniportCancelIdleNotification ハンドラー関数の例を次に示します。 この例では、USB アイドル要求 IRP の取り消しに関連する手順を示します。

//
// MiniportCancelIdleNotification()
//
// This routine is called if NDIS has to cancel an idle notification.
// All that is needed is to cancel the selective suspend IRP.
//
VOID MiniportCancelIdleNotification(
    _In_ NDIS_HANDLE MiniportAdapterContext
    )
{
    IoCancelIrp(Adapter->UsbSsIrp);
}

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