Share via


NDIS セレクティブ サスペンド ハンドラー関数の登録

ミニポート ドライバーが NDIS セレクティブ サスペンドをサポートしている場合、NDIS は、基になるネットワーク アダプターがアイドル状態になったことをドライバーに通知します。 ミニポート ドライバーは、これらのアイドル状態の通知を処理するには、以下の関数を提供する必要があります。

MiniportIdleNotification
NDIS は、MiniportIdleNotification ハンドラー関数を呼び出し、ネットワーク アダプターがアイドル状態になったことをミニポート ドライバーに通知します。 ミニポート ドライバーは、ネットワーク アダプターが低電力状態に移行できるかどうかを決定することによって、アイドル状態の通知を処理します。 ミニポート ドライバーは、バス固有の方法でこの判断を実行します。

たとえば、USB ミニポート ドライバーは、基になる USB バス ドライバーに USB アイドル要求 (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) の I/O 要求パケット (IRP) を発行することによって、ネットワーク アダプターが低電力状態に移行できるかどうかを判断します。 この IRP の処理を通じて、ミニポート ドライバーは、アダプターがアイドル状態であり、低電力状態に遷移することができるという通知を受け取ります。

MiniportCancelIdleNotification
NDIS は、MiniportCancelIdleNotification ハンドラー関数を呼び出して未処理のアイドル通知を取り消します。 この関数が呼び出されると、ミニポート ドライバーは、アイドル状態の通知に対して以前に発行した可能性があるバス固有の IRP を取り消します。

たとえば、MiniportCancelIdleNotification が呼び出されると、USB ミニポートは、以前に発行された USB アイドル状態要求 IRP を取り消す必要があります。 IRP が取り消されると、ミニポート ドライバーは、アダプターがフル電源状態に移行できるようになったという通知を受け取ります。

ミニポート ドライバーの DriverEntry 関数が呼び出されると、ドライバーは、以下の手順に従って NDIS セレクティブ サスペンド ハンドラー関数を登録します。

  1. ミニポート ドライバーは、ドライバーの MiniportSetOptions 関数のエントリ ポイントに NDIS_MINIPORT_DRIVER_CHARACTERISTICS 構造の SetOptionsHandler メンバーを設定する必要があります。 ドライバーは NdisMRegisterMiniportDriver を呼び出して、その NDIS_MINIPORT_DRIVER_CHARACTERISTICS 構造を NDIS に登録します。

  2. NDIS は、NdisMRegisterMiniportDriver への呼び出しのコンテキストで MiniportSetOptions 関数を呼び出します。

    MiniportSetOptions が呼び出されると、ミニポート ドライバーは、ハンドラー関数へのポインターを使用して NDIS_MINIPORT_SS_CHARACTERISTICS 構造を初期化します。 その後、ミニポート ドライバーは NdisSetOptionalHandlers を呼び出し、OptionalHandlers パラメーターを NDIS_MINIPORT_SS_CHARACTERISTICS 構造へのポインターに設定します。

NDIS セレクティブ サスペンドのアイドル通知を処理する方法について詳しくは、「NDIS セレクティブ サスペンド アイドル通知」をご覧ください。