WdfRequestCancelSentRequest-Funktion (wdfrequest.h)
[Gilt für KMDF und UMDF]
Die WdfRequestCancelSentRequest-Methode versucht, eine E/A-Anforderung abzubrechen, die der Aufrufer zuvor an ein E/A-Ziel übermittelt hat.
Syntax
BOOLEAN WdfRequestCancelSentRequest(
[in] WDFREQUEST Request
);
Parameter
[in] Request
Ein Handle für ein Frameworkanforderungsobjekt.
Rückgabewert
WdfRequestCancelSentRequest gibt TRUE zurück, wenn die Abbruchanforderung erfolgreich an das E/A-Ziel des Treibers übermittelt wird. Diese Methode gibt FALSE zurück, wenn die Anforderung bereits abgeschlossen oder abgebrochen wurde oder wenn der E/A-Zieltreiber WdfRequestMarkCancelable oder WdfRequestMarkCancelableEx nicht aufgerufen hat.
Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.
Hinweise
Ein Treiber kann WdfRequestCancelSentRequest aufrufen, um zu versuchen, eine E/A-Anforderung, die er zuvor durch Aufrufen von WdfRequestSend an ein E/A-Ziel gesendet hatte, abzubrechen.
Wenn sich die Anforderung in der E/A-Zielwarteschlange befindet, bricht das Framework die Anforderung ab. Wenn das Framework die Anforderung bereits an den Treiber des E/A-Ziels übermittelt hat und dieser Treiber WdfRequestMarkCancelable oder WdfRequestMarkCancelableEx aufgerufen hat, um das Abbrechen zu aktivieren, ruft das Framework die EvtRequestCancel-Rückruffunktion dieses Treibers auf. Wenn der Treiber des Ziels nicht WdfRequestMarkCancelable oder WdfRequestMarkCancelableEx aufgerufen hat, wird die Anforderung erst abgebrochen, wenn die Anforderung abgebrochen werden kann.
Wenn der Treiber eine CompletionRoutine-Rückruffunktion für die Anforderung registriert hat, ruft das Framework die Rückruffunktion auf, nachdem die Anforderung abgebrochen wurde.
Wenn Ihr Treiber WdfRequestCancelSentRequest aufruft, muss er in der Regel die Verweisanzahl des Anforderungsobjekts erhöhen. Weitere Informationen finden Sie unter Synchronisieren des Abbruchs von gesendeten Anforderungen.
Weitere Informationen zum Abbruch von Anforderungen finden Sie unter Abbrechen von E/A-Anforderungen.
Beispiele
Das folgende Codebeispiel stammt aus dem kmdf_fx2 Beispieltreibers. Dieses Beispiel ist eine EvtIoStop-Rückruffunktion . Da dieser Treiber jede Anforderung an sein E/A-Ziel sendet, ruft die EvtIoStop-RückruffunktionWdfRequestCancelSentRequest auf, wenn das Gerät entfernt wurde.
VOID
OsrFxEvtIoStop(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN ULONG ActionFlags
)
{
UNREFERENCED_PARAMETER(Queue);
if (ActionFlags & WdfRequestStopActionSuspend) {
WdfRequestStopAcknowledge(Request, FALSE);
} else if (ActionFlags & WdfRequestStopActionPurge) {
WdfRequestCancelSentRequest(Request);
}
return;
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
KMDF-Mindestversion | 1.0 |
UMDF-Mindestversion | 2.0 |
Kopfzeile | wdfrequest.h (include Wdf.h) |
Bibliothek | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <=DISPATCH_LEVEL |
DDI-Complianceregeln | DriverCreate(kmdf), EvtIoStopCancel(kmdf), EvtIoStopCompleteOrStopAck(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |