Metodo IWDFIoRequest2::StopAcknowledge (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 info, vedi Introduzione con UMDF.]

Il metodo StopAcknowledge informa il framework che il driver ha interrotto l'elaborazione di una richiesta di I/O specificata.

Sintassi

void StopAcknowledge(
  [in] BOOL Requeue
);

Parametri

[in] Requeue

Valore booleano che, se TRUE, fa sì che il framework riscriva la richiesta nella coda in modo che il framework lo distribuirà nuovamente al driver. Se FALSE, il framework non accoda nuovamente la richiesta. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

Valore restituito

nessuno

Osservazioni

Se un driver registra una funzione di callback IQueueCallbackIoStop::OnIoStop per una coda di I/O, il framework lo chiama quando il dispositivo sottostante della coda lascia lo stato funzionante (D0). Il framework chiama questa funzione di callback per ogni richiesta di I/O proprietaria del driver al momento dell'arresto della coda. Il driver deve completare, annullare o posticipare l'elaborazione di ogni richiesta eseguendo una delle operazioni seguenti:

  • Se il driver è proprietario della richiesta, può chiamare IWDFIoRequest::Complete per completare o annullare la richiesta.
  • Se il driver ha inoltrato la richiesta a una destinazione di I/O, può chiamare IWDFIoRequest::CancelSentRequest per tentare di annullare la richiesta.
  • Se il driver posticipa l'elaborazione della richiesta, deve chiamare StopAcknowledge.
Se il driver chiama StopAcknowledge, deve chiamare questo metodo dall'interno della relativa funzione di callback IQueueCallbackIoStop::OnIoStop .

Se il driver non chiama IWDFIoRequest::Complete o StopAcknowledge per ogni richiesta ricevuta da una funzione di callback IQueueCallbackIoStop::OnIoStop , il framework non consente al dispositivo di lasciare lo stato di lavoro (D0). Potenzialmente, questa azione può impedire a un sistema di entrare nello stato di ibernazione o in un altro stato di alimentazione a basso livello di sistema.

Quando la funzione di callback IQueueCallbackIoStop::OnIoStop di un driver chiama StopAcknowledge, può impostare il parametro Requeue su TRUE o FALSE:

  • Se si imposta Requeue su TRUE , il framework inserisce nuovamente la richiesta nella coda di I/O.

    Quando il dispositivo sottostante torna allo stato funzionante (D0), il framework ridistribuirà la richiesta al driver.

  • Se si imposta Requeue su FALSE , la proprietà della richiesta rimane con il driver. Il driver deve interrompere l'esecuzione di qualsiasi elaborazione di I/O che richiede l'accesso hardware.

    Quando il dispositivo sottostante torna allo stato di funzionamento (D0), il framework chiamerà la funzione di callback IQueueCallbackIoResume::OnIoResume , in modo che il driver possa continuare a elaborare la richiesta.

Se il driver aveva precedentemente chiamato IWDFIoRequest::MarkCancelable, deve chiamare IWDFIoRequest::UnmarkCancelable prima di chiamare StopAcknowledge con Requeue impostato su TRUE.

Prima di chiamare StopAcknowledge, la funzione di callback IQueueCallbackIoStop::OnIoStop deve arrestare tutta l'elaborazione della richiesta di I/O che richiede l'accesso al dispositivo sottostante, perché il dispositivo sta per entrare in uno stato a basso consumo.

Esempio

L'esempio di codice seguente è una funzione di callback IQueueCallbackIoStop::OnIoStop che verifica se una richiesta ricevuta è annullabile e, in caso affermativo, chiama IWDFIoRequest::UnmarkCancelable. Se IWDFIoRequest::UnmarkCancelable restituisce HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED), l'esempio restituisce solo perché la funzione di callback IRequestCallbackCancel::OnCancel del driver gestirà la richiesta. In caso contrario, l'esempio chiama StopAcknowledge e specifica FALSE in modo che il framework chiami alla fine la funzione di callback IQueueCallbackIoResume::OnIoResume .

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

Requisiti

Requisito Valore
Fine del supporto Non disponibile in UMDF 2.0 e versioni successive.
Piattaforma di destinazione Desktop
Versione UMDF minima 1,9
Intestazione wudfddi.h (include Wudfddi.h)
DLL WUDFx.dll

Vedi anche

IQueueCallbackIoResume::OnIoResume

IQueueCallbackIoStop::OnIoStop

IWDFIoRequest2