Condividi tramite


Metodo IWDFIoRequest::MarkCancelable (wudfddi.h)

[Avviso: UMDF 2 è la versione più recente di UMDF e sostituisce UMDF 1. Tutti i nuovi driver UMDF devono essere scritti usando UMDF 2. Non vengono aggiunte nuove funzionalità a UMDF 1 ed è disponibile un supporto limitato per UMDF 1 nelle versioni più recenti di Windows 10. I driver di Windows universali devono usare UMDF 2. Per altre informazioni, vedi Introduzione a UMDF.]

Il metodo MarkCancelable abilita l'annullamento della richiesta di I/O.

Sintassi

void MarkCancelable(
  [in] IRequestCallbackCancel *pCancelCallback
);

Parametri

[in] pCancelCallback

Puntatore all'interfaccia IRequestCallbackCancel il cui metodo chiama il framework dopo l'annullamento della richiesta di I/O.

Valore restituito

Nessuno

Osservazioni

Dopo che un driver riceve una richiesta di I/O come input per un IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWriteo IQueueCallbackDeviceIoControl::OnDeviceIoControl funzione di callback degli eventi, il driver può chiamare il metodo MarkCancelable per abilitare l'annullamento della richiesta. Successivamente, il driver può chiamare il metodo IWDFIoRequest::UnmarkCancelable per disabilitare l'annullamento della richiesta.

Prima che un driver chiami MarkCancelable, il driver deve implementare il metodo IRequestCallbackCancel::OnCancel.

User Mode Driver Framework (UMDF) consente un solo metodo IRequestCallbackCancel::OnCancel per coda. Pertanto, quando un driver chiama MarkCancelable per le richieste associate a una particolare coda per consentire al framework di annullare tali richieste, il driver deve passare un puntatore alla IRequestCallbackCancel interfaccia per lo stesso oggetto request-callback. Successivamente, per annullare ogni richiesta, il framework passa un puntatore all'interfaccia IWDFIoRequest per la richiesta in una chiamata al metodo IRequestCallbackCancel::OnCancel dell'oggetto request-callback.

Il driver deve chiamare metodo IWDFIoRequest::Complete, dal metodo IRequestCallbackCancel::OnCancel o dal relativo normale percorso di completamento di I/O.

Dopo che un driver chiama MarkCancelable per abilitare l'annullamento, la richiesta rimane annullabile mentre il driver ha il possesso dell'oggetto richiesta, a meno che il driver non chiami UnmarkCancelable per disabilitare l'annullamento.

Se il driver chiama il metodo IWDFIoRequest::ForwardToIoQueue per inoltrare la richiesta a una coda diversa, si applicano le regole seguenti:

  • L'annullamento delle richieste di I/O non può essere abilitato quando il driver inoltra le richieste a una coda diversa.

    In genere, il driver non deve chiamare MarkCancelable per abilitare l'annullamento di una richiesta prima di chiamare IWDFIoRequest::ForwardToIoQueue. In alternativa, il driver può rendere annullabile la richiesta. Tuttavia, il driver deve chiamare UnmarkCancelable per disabilitare l'annullamento della richiesta prima di chiamare IWDFIoRequest::ForwardToIoQueue.

  • Mentre la richiesta si trova in una seconda coda, il framework lo possiede e può annullarlo senza notificare al driver.
  • Dopo che il framework annulla la richiesta dalla seconda coda e recapita la richiesta al driver, il driver può chiamare MarkCancelable per abilitare l'annullamento.

Esempi

Nell'esempio di codice seguente viene impostata una richiesta in modo che il framework possa annullarlo.

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

    pWdfRequest->MarkCancelable(cancelCallback);

Fabbisogno

Requisito Valore
Fine del supporto Non disponibile in UMDF 2.0 e versioni successive.
piattaforma di destinazione Desktop
versione minima di UMDF 1.5
intestazione wudfddi.h (include Wudfddi.h)
dll WUDFx.dll

Vedere anche

IQueueCallbackDeviceIoControl::OnDeviceIoControl

IQueueCallbackRead::OnRead

IQueueCallbackWrite::OnWrite

IRequestCallbackCancel

IRequestCallbackCancel::OnCancel

IWDFIoRequest

IWDFIoRequest::Complete

IWDFIoRequest::ForwardToIoQueue

IWDFIoRequest::UnmarkCancelable