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. Es werden keine neuen Features zu UMDF 1 hinzugefügt, und es gibt eingeschränkte Unterstützung für UMDF 1 für neuere Versionen von Windows 10. Universelle Windows-Treiber müssen UMDF 2 verwenden. Weitere Informationen finden Sie unter Erste Schritte mit UMDF-.]

Die StopAcknowledge Methode informiert das Framework, 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, wenn TRUE, bewirkt, dass das Framework die Anforderung in der Warteschlange erneut anfordert, sodass es vom Framework erneut an den Treiber übergeben wird. Wenn FALSE, wird die Anforderung vom Framework nicht erneut angefordert. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Rückgabewert

Nichts

Bemerkungen

Wenn ein Treiber eine IQueueCallbackIoStop::OnIoStop Rückruffunktion für eine E/A-Warteschlange registriert, ruft das Framework sie 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 eine der folgenden Aktionen ausgeführt wird:

  • Wenn der Treiber die Anforderung besitzt, 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 StopAcknowledgeaufrufen.
Wenn Ihr Treiber StopAcknowledgeaufruft, muss diese Methode innerhalb der IQueueCallbackIoStop::OnIoStop Rückruffunktion aufgerufen werden.

Wenn der Treiber nicht IWDFIoRequest::Complete oder StopAcknowledge- für jede Anforderung aufruft, die ein IQueueCallbackIoStop::OnIoStop- Rückruffunktion empfängt, lässt das Framework nicht zu, dass das Gerät den Arbeitsstatus (D0) verlässt. Potenziell kann diese Inaktion verhindern, dass ein System in den Ruhezustand oder einen anderen Energiesparmodus wechselt.

Wenn ein Treiber IQueueCallbackIoStop::OnIoStop- Rückruffunktion StopAcknowledgeaufruft, kann er den parameter Requeue auf TRUE oder FALSEfestlegen:

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

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

  • Wenn sie auf FALSE zurücksetzen, bewirkt, dass der Besitz der Anforderung beim Treiber verbleibt. Der Treiber muss alle E/A-Verarbeitungen beenden, die hardwarebasierten Zugriff erfordern.

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

Wenn der Treiber zuvor IWDFIoRequest::MarkCancelableaufgerufen hat, muss er IWDFIoRequest::UnmarkCancelable aufrufen, bevor StopAcknowledge mit Requeue auf TRUEfestgelegt wird.

Vor dem Aufrufen StopAcknowledgemuss die IQueueCallbackIoStop::OnIoStop- Rückruffunktion 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 wechselt.

Beispiele

Das folgende Codebeispiel ist eine IQueueCallbackIoStop::OnIoStop- Rückruffunktion, die überprüft, ob eine empfangene Anforderung abgebrochen werden kann, und ruft in diesem Beispiel IWDFIoRequest::UnmarkCancelableauf. Wenn IWDFIoRequest::UnmarkCancelable HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED) zurückgibt, wird das Beispiel nur zurückgegeben, da die IRequestCallbackCancel::OnCancel Rückruffunktion die Anforderung behandelt. Andernfalls ruft das Beispiel StopAcknowledge auf und gibt FALSE- an, sodass das Framework schließlich die IQueueCallbackIoResume::OnIoResume Rückruffunktion 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
Mindest-UMDF-Version 1.9
Header- wudfddi.h (include Wudfddi.h)
DLL- WUDFx.dll

Siehe auch

IQueueCallbackIoResume::OnIoResume

IQueueCallbackIoStop::OnIoStop

IWDFIoRequest2-