Implementieren einer IRP-Rückrufroutine für USB-Leerlaufanforderungen
Wenn MiniportIdleNotification aufgerufen wird, ruft der USB-Miniporttreiber IoCallDriver auf, um ein E/A-Anforderungspaket (IRP) für eine USB-Leerlaufanforderung (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) an den zugrunde liegenden USB-Bustreiber auszusetzen. Der Miniporttreiber gibt diese IRP aus, um den USB-Bustreiber darüber zu informieren, dass sich der Netzwerkadapter im Leerlauf befindet und angehalten werden muss.
Der USB-Miniporttreiber muss eine IRP-Rückrufroutine für die USB-Leerlaufanforderung bereitstellen. Der USB-Bustreiber ruft diese Routine auf, wenn er feststellt, dass der Netzwerkadapter angehalten und in einen Energiesparzustand übergehen kann.
Hinweis Nachdem der USB-Bustreiber die USB-Idle Request-IRP verarbeitet hat, ruft er die Rückrufroutine entweder synchron im Kontext des Aufrufs von IoCallDriver oder asynchron auf, nachdem MiniportIdleNotification zurückgegeben wird.
Die Rückrufroutine muss nur NdisMIdleNotificationConfirm aufrufen, um NDIS darüber zu informieren, dass sie mit dem Übergang zum Energiesparzustand des Netzwerkadapters fortfahren kann. Wenn der Treiber NdisMIdleNotificationConfirm aufruft, muss er auch den niedrigsten Geräteleistungszustand angeben, zu dem der Netzwerkadapter wechseln kann.
Im Kontext des Aufrufs von NdisMIdleNotificationConfirm führt NDIS die Schritte aus, die erforderlich sind, um den Netzwerkadapter in einen Energiesparzustand zu überstellen. Weitere Informationen finden Sie unter Behandeln der NDIS-Benachrichtigung zum selektiven Anhalten des Leerlaufs.
Im Folgenden wird ein Beispiel für eine Rückrufroutine für eine USB-Idle-Anforderungs-IRP angezeigt.
//
// 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;
}
Weitere Informationen zur Rückrufroutine für USB-Leerlaufanforderungen finden Sie unter IRP-Rückrufroutine für USB-Leerlaufanforderung.