Freigeben über


IWDFIoRequest::MarkCancelable-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 MarkCancelable-Methode ermöglicht das Abbrechen der E/A-Anforderung.

Syntax

void MarkCancelable(
  [in] IRequestCallbackCancel *pCancelCallback
);

Parameter

[in] pCancelCallback

Ein Zeiger auf die IRequestCallbackCancel Schnittstelle, deren Methode das Framework aufruft, nachdem die E/A-Anforderung abgebrochen wurde.

Rückgabewert

Nichts

Bemerkungen

Nachdem ein Treiber eine E/A-Anforderung als Eingabe an eine IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWriteoder IQueueCallbackDeviceIoControl::OnDeviceIoControl Ereignisrückruffunktion empfängt, der Treiber kann die MarkCancelable-Methode aufrufen, um das Abbrechen der Anforderung zu ermöglichen. Später kann der Treiber die IWDFIoRequest::UnmarkCancelable Methode aufrufen, um das Abbrechen der Anforderung zu deaktivieren.

Bevor ein Treiber MarkCancelableaufruft, muss der Treiber die IRequestCallbackCancel::OnCancel-Methode implementieren.

Das Benutzermodustreiberframework (UMDF) ermöglicht nur eine IRequestCallbackCancel::OnCancel Methode pro Warteschlange. Wenn ein Treiber MarkCancelable- für Anforderungen aufruft, die einer bestimmten Warteschlange zugeordnet sind, damit das Framework diese Anforderungen abbricht, muss der Treiber einen Zeiger an die IRequestCallbackCancel Schnittstelle für dasselbe Anforderungsrückrufobjekt übergeben. Später übergibt das Framework zum Abbrechen jeder Anforderung einen Zeiger an die IWDFIoRequest Schnittstelle für die Anforderung in einem Aufruf der IRequestCallbackCancel::OnCancel-Methode des Anforderungsrückrufobjekts.

Der Treiber muss IWDFIoRequest::Completeaufrufen, entweder aus dem IRequestCallbackCancel::OnCancel-Methode oder vom regulären E/A-Abschlusspfad.

Nachdem ein Treiber MarkCancelable zum Aktivieren des Abbrechens aufgerufen hat, bleibt die Anforderung abzubrechen, während der Treiber über den Besitz des Anforderungsobjekts verfügt, es sei denn, der Treiber ruft UnmarkCancelable zum Deaktivieren des Abbrechens auf.

Wenn der Treiber die IWDFIoRequest::ForwardToIoQueue Methode aufruft, um die Anforderung an eine andere Warteschlange weiterzuleiten, gelten die folgenden Regeln:

  • Das Abbrechen von E/A-Anforderungen kann nicht aktiviert werden, wenn der Treiber die Anforderungen an eine andere Warteschlange weiterleitet.

    In der Regel sollte der Treiber MarkCancelable- nicht aufrufen, um das Abbrechen einer Anforderung vor dem Aufrufen IWDFIoRequest::ForwardToIoQueuezu aktivieren. Alternativ kann der Treiber die Anforderung abbrechen. Der Treiber muss dann jedoch UnmarkCancelable aufrufen, um das Abbrechen der Anforderung zu deaktivieren, bevor IWDFIoRequest::ForwardToIoQueueaufgerufen wird.

  • Während sich die Anforderung in einer zweiten Warteschlange befindet, besitzt das Framework sie und kann sie abbrechen, ohne den Treiber zu benachrichtigen.
  • Nachdem das Framework die Anforderung aus der zweiten Warteschlange dequeuet und die Anforderung an den Treiber übermittelt hat, kann der Treiber MarkCancelable aufrufen, um den Abbruch zu aktivieren.

Beispiele

Im folgenden Codebeispiel wird eine Anforderung eingerichtet, damit das Framework sie abbrechen kann.

    //
    // The QueryInteraface should not fail.
    //
    (VOID)this->QueryInterface(_uuidof(IRequestCallbackCancel),
                               (PVOID *)&cancelCallback);

    pWdfRequest->MarkCancelable(cancelCallback);

Anforderungen

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

Siehe auch

IQueueCallbackDeviceIoControl::OnDeviceIoControl

IQueueCallbackRead::OnRead

IQueueCallbackWrite::OnWrite

IRequestCallbackCancel

IRequestCallbackCancel::OnCancel

IWDFIoRequest

IWDFIoRequest::Complete

IWDFIoRequest::ForwardToIoQueue

IWDFIoRequest::UnmarkCancelable