Funzione WdfRequestCancelSentRequest (wdfrequest.h)

[Si applica a KMDF e UMDF]

Il metodo WdfRequestCancelSentRequest tenta di annullare una richiesta di I/O inviata in precedenza al chiamante a una destinazione di I/O.

Sintassi

BOOLEAN WdfRequestCancelSentRequest(
  [in] WDFREQUEST Request
);

Parametri

[in] Request

Handle per un oggetto richiesta framework.

Valore restituito

WdfRequestCancelSentRequest restituisce TRUE se recapita correttamente la richiesta di annullamento alla destinazione I/O del driver. Questo metodo restituisce FALSE se la richiesta è già stata completata o annullata oppure se il driver di destinazione I/O non ha chiamato WdfRequestMarkCancelable o WdfRequestMarkCancelableEx.

Un controllo di bug si verifica se il driver fornisce un handle di oggetti non valido.

Commenti

Un driver può chiamare WdfRequestCancelSentRequest per tentare di annullare una richiesta di I/O inviata in precedenza a una destinazione di I/O chiamando WdfRequestSend.

Se la richiesta si trova nella coda di destinazione di I/O, il framework annulla la richiesta. Se il framework ha già recapitato la richiesta al driver di destinazione di I/O e se tale driver ha chiamato WdfRequestMarkCancelable o WdfRequestMarkCancelableEx per abilitare l'annullamento, il framework chiama la funzione di callback evtRequestCancel del driver. Se il driver di destinazione non ha chiamato WdfRequestMarkCancelable o WdfRequestMarkCancelableEx, la richiesta non viene annullata a meno che la richiesta non diventi annullabile.

Se il driver ha registrato una funzione di callback di CompletamentoRoutine per la richiesta, il framework chiama la funzione di callback dopo l'annullamento della richiesta.

In genere, se il driver chiama WdfRequestCancelSentRequest, deve aumentare il numero di riferimenti dell'oggetto richiesta. Per altre informazioni, vedere Sincronizzazione dell'annullamento delle richieste inviate.

Per altre informazioni sull'annullamento della richiesta, vedere Annullamento delle richieste di I/O.

Esempio

L'esempio di codice seguente proviene dal driver di esempio kmdf_fx2 . Questo esempio è una funzione di callback EvtIoStop . Poiché questo driver invia ogni richiesta alla destinazione di I/O, la funzione callback EvtIoStop chiama WdfRequestCancelSentRequest se il dispositivo è stato rimosso.

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;
}

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1.0
Versione UMDF minima 2,0
Intestazione wdfrequest.h (include Wdf.h)
Libreria Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Regole di conformità DDI DriverCreate(kmdf), EvtIoStopCancel(kmdf), EvtIoStopCompleteOrStopAck(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Vedi anche

CompletamentoRoutine

EvtRequestCancel

WdfRequestMarkCancelable

WdfRequestMarkCancelableEx

WdfRequestSend