Freigeben über


IWDFIoRequest2::StopAcknowledge-Methode (wudfddi.h)

[Warnung: UMDF 2 ist die neueste Version von UMDF und ersetzt UMDF 1. Alle neuen UMDF-Treiber sollten mit UMDF 2 geschrieben werden. UMDF 1 werden keine neuen Features hinzugefügt, und die Unterstützung für UMDF 1 in neueren Versionen von Windows 10 ist eingeschränkt. Universelle Windows-Treiber müssen UMDF 2 verwenden. Weitere Informationen finden Sie unter Erste Schritte mit UMDF.]

Die StopAcknowledge-Methode informiert das Framework darüber, dass der Treiber die Verarbeitung einer angegebenen E/A-Anforderung beendet hat.

Syntax

void StopAcknowledge(
  [in] BOOL Requeue
);

Parameter

[in] Requeue

Ein boolescher Wert, der bei TRUE bewirkt, dass das Framework die Anforderung erneut in die Warteschlange eingibt, damit das Framework sie erneut an den Treiber übermittelt. False gibt an, dass das Framework die Anforderung nicht erneut in die Warteschlange stellt. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Rückgabewert

Keine

Bemerkungen

Wenn ein Treiber eine IQueueCallbackIoStop::OnIoStop-Rückruffunktion für eine E/A-Warteschlange registriert, ruft das Framework diese auf, wenn das zugrunde liegende Gerät der Warteschlange den Arbeitsstatus (D0) verlässt. Das Framework ruft diese Rückruffunktion für jede E/A-Anforderung auf, die der Treiber zum Zeitpunkt des Beendens der Warteschlange besitzt. Der Treiber muss die Verarbeitung jeder Anforderung abschließen, abbrechen oder verschieben, indem er eine der folgenden Aktionen ausführt:

  • Wenn der Treiber besitzer der Anforderung ist, kann er IWDFIoRequest::Complete aufrufen, um die Anforderung abzuschließen oder abzubrechen.
  • Wenn der Treiber die Anforderung an ein E/A-Ziel weitergeleitet hat, kann er IWDFIoRequest::CancelSentRequest aufrufen, um zu versuchen, die Anforderung abzubrechen.
  • Wenn der Treiber die Verarbeitung der Anforderung verzögert, muss er StopAcknowledge aufrufen.
Wenn Ihr Treiber StopAcknowledge aufruft, muss er diese Methode aus seiner IQueueCallbackIoStop::OnIoStop-Rückruffunktion aufrufen.

Wenn der Treiber nicht IWDFIoRequest::Complete oder StopAcknowledge für jede Anforderung aufruft, die eine IQueueCallbackIoStop::OnIoStop-Rückruffunktion empfängt, lässt das Framework dem Gerät nicht zu, den Arbeitszustand (D0) zu verlassen. Möglicherweise kann diese Untätigkeit verhindern, dass ein System in seinen Ruhezustand oder einen anderen niedrigen Systemleistungszustand wechselt.

Wenn die IQueueCallbackIoStop::OnIoStop-Rückruffunktion eines Treibers StopAcknowledge aufruft, kann der Requeue-Parameter auf TRUE oder FALSE festgelegt werden:

  • Wenn Sie Requeue auf TRUE festlegen, wird die Anforderung vom Framework wieder in die E/A-Warteschlange eingefügt.

    Wenn das zugrunde liegende Gerät in seinen Arbeitszustand (D0) zurückkehrt, sendet das Framework die Anforderung erneut an den Treiber.

  • Das Festlegen von Requeue auf FALSE bewirkt, dass der Besitz der Anforderung beim Treiber verbleibt. Der Treiber muss alle E/A-Verarbeitungen beenden, die Hardwarezugriff erfordern.

    Wenn das zugrunde liegende Gerät in seinen Arbeitszustand (D0) zurückkehrt, ruft das Framework die Rückruffunktion IQueueCallbackIoResume::OnIoResume des Treibers auf, damit der Treiber die Verarbeitung der Anforderung fortsetzen kann.

Wenn der Treiber zuvor IWDFIoRequest::MarkCancelable aufgerufen hatte, muss er IWDFIoRequest::UnmarkCancelable aufrufen, bevor StopAcknowledge aufgerufen wird , wobei Requeue auf TRUE festgelegt ist.

Vor dem Aufruf von StopAcknowledge muss die IQueueCallbackIoStop::OnIoStop-Rückruffunktion des Treibers die gesamte Verarbeitung der E/A-Anforderung beenden, die den Zugriff auf das zugrunde liegende Gerät erfordert, da das Gerät in einen Energiesparzustand versetzt wird.

Beispiele

Im folgenden Codebeispiel handelt es sich um eine IQueueCallbackIoStop::OnIoStop-Rückruffunktion , die überprüft, ob eine empfangene Anforderung abgebrochen werden kann, und, falls ja, IWDFIoRequest::UnmarkCancelable aufruft. Wenn IWDFIoRequest::UnmarkCancelable HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED) zurückgibt, wird im Beispiel nur zurückgegeben, weil die IRequestCallbackCancel::OnCancel-Rückruffunktion des Treibers die Anforderung verarbeitet. Andernfalls ruft das Beispiel StopAcknowledge auf und gibt FALSE an, damit das Framework schließlich die Rückruffunktion IQueueCallbackIoResume::OnIoResume des Treibers aufruft.

void
CMyReadWriteQueue::OnIoStop(
    __in IWDFIoQueue*  pWdfQueue,
    __in IWDFIoRequest*  pWdfRequest,
    __in ULONG  ActionFlags
    )
{ HRESULT status;

    if (ActionFlags & WdfRequestStopRequestCancelable) {
        status = pWdfRequest->UnmarkCancelable();
        if (status == HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED)) {
        return;
        }
    }
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;

    r2->StopAcknowledge(FALSE);
}

Anforderungen

Anforderung Wert
Ende des Supports In UMDF 2.0 und höher nicht verfügbar.
Zielplattform Desktop
UMDF-Mindestversion 1.9
Kopfzeile wudfddi.h (include Wudfddi.h)
DLL WUDFx.dll

Weitere Informationen

IQueueCallbackIoResume::OnIoResume

IQueueCallbackIoStop::OnIostop

IWDFIoRequest2