Freigeben über


Implementieren einer IRP-Vervollständigungsroutine 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 auch IoSetCompletionRoutineEx aufrufen, um eine Vervollständigungsroutine für die USB-Idle-Anforderungs-IRP zu registrieren. Der USB-Bustreiber ruft die Vervollständigungsroutine auf, wenn er das IRP abgeschlossen hat, nachdem er vom USB-Miniporttreiber abgebrochen wurde. Der USB-Miniporttreiber bricht die IRP ab, wenn NDIS die Leerlaufbenachrichtigung durch Aufrufen von MiniportCancelIdleNotification abbricht.

Die Vervollständigungsroutine muss nur NdisMIdleNotificationComplete aufrufen, um NDIS zu benachrichtigen, dass sie mit dem Übergang des Vollständigen Energiezustands des Netzwerkadapters fortfahren kann.

Hinweis Die Vervollständigungsroutine muss STATUS_MORE_PROCESSING_REQUIRED zurückgeben, wenn der USB-Miniporttreiber die IRP-Ressourcen während einer anderen Leerlaufbenachrichtigung von NDIS wiederverwendet.

Im Folgenden finden Sie ein Beispiel für eine Vervollständigungsroutine für die USB-Idle-Anforderungs-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;
}

Weitere Informationen zur USB-Anforderungsrückrufroutine im Leerlauf finden Sie unter IRP-Abschlussroutine für USB-Leerlaufanforderung.