Método IWDFIoRequest2::StopAcknowledge (wudfddi.h)

[Advertencia: UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los controladores UMDF nuevos deben escribirse con UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2. Para obtener más información, consulta Introducción con UMDF.

El método StopAcknowledge informa al marco de trabajo que el controlador ha detenido el procesamiento de una solicitud de E/S especificada.

Sintaxis

void StopAcknowledge(
  [in] BOOL Requeue
);

Parámetros

[in] Requeue

Valor booleano que, si es TRUE, hace que el marco vuelva a poner la solicitud en la cola para que el marco lo vuelva a entregar al controlador. Si es FALSE, el marco no vuelve a poner en cola la solicitud. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

Valor devuelto

None

Observaciones

Si un controlador registra una función de devolución de llamada IQueueCallbackIoStop::OnIoStop para una cola de E/S, el marco lo llama cuando el dispositivo subyacente de la cola deja su estado de funcionamiento (D0). El marco llama a esta función de devolución de llamada para cada solicitud de E/S que el controlador posee en el momento en que se detiene la cola. El controlador debe completar, cancelar o posponer el procesamiento de cada solicitud realizando una de las siguientes acciones:

  • Si el controlador posee la solicitud, puede llamar a IWDFIoRequest::Complete para completar o cancelar la solicitud.
  • Si el controlador ha reenviado la solicitud a un destino de E/S, puede llamar a IWDFIoRequest::CancelSentRequest para intentar cancelar la solicitud.
  • Si el controlador pospone el procesamiento de la solicitud, debe llamar a StopAcknowledge.
Si el controlador llama a StopAcknowledge, debe llamar a este método desde su función de devolución de llamada IQueueCallbackIoStop::OnIoStop .

Si el controlador no llama a IWDFIoRequest::Complete o StopAcknowledge para cada solicitud que recibe una función de devolución de llamada IQueueCallbackIoStop::OnIoStop , el marco no permite que el dispositivo deje su estado de trabajo (D0). Potencialmente, esta inacción puede impedir que un sistema entre en su estado de hibernación u otro estado de energía del sistema bajo.

Cuando la función de devolución de llamada StopAcknowledge de un controlador IQueueCallbackIoStop::OnIoStop llama a StopAcknowledge, puede establecer el parámetro Requeue en TRUE o FALSE:

  • Al establecer Requeue en TRUE , el marco vuelve a colocar la solicitud en su cola de E/S.

    Cuando el dispositivo subyacente vuelve a su estado de trabajo (D0), el marco volverá a entregar la solicitud al controlador.

  • Al establecer Requeue en FALSE , la propiedad de la solicitud permanece con el controlador. El controlador debe dejar de realizar cualquier procesamiento de E/S que requiera acceso de hardware.

    Cuando el dispositivo subyacente vuelve a su estado de trabajo (D0), el marco llamará a la función de devolución de llamada IQueueCallbackIoResume::OnIoResume del controlador para que el controlador pueda continuar procesando la solicitud.

Si el controlador había llamado previamente a IWDFIoRequest::MarkCancelable, debe llamar a IWDFIoRequest::UnmarkCancelable antes de llamar a StopAcknowledge con Requeue establecido en TRUE.

Antes de llamar a StopAcknowledge, la función de devolución de llamada IQueueCallbackIoStop::OnIoStop del controlador debe detener todo el procesamiento de la solicitud de E/S que requiere acceso al dispositivo subyacente, ya que el dispositivo está a punto de entrar en un estado de bajo consumo.

Ejemplos

El ejemplo de código siguiente es una función de devolución de llamada IQueueCallbackIoStop::OnIoStop que comprueba si se puede cancelar una solicitud recibida y, si es así, llama a IWDFIoRequest::UnmarkCancelable. Si IWDFIoRequest::UnmarkCancelable devuelve HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED), el ejemplo simplemente devuelve porque la función de devolución de llamada IRequestCallbackCancel::OnCancel del controlador controlará la solicitud. De lo contrario, el ejemplo llama a StopAcknowledge y especifica FALSE para que el marco llame finalmente a la función de devolución de llamada IQueueCallbackIoResume::OnIoResume del controlador.

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

Requisitos

Requisito Value
Finalización del soporte técnico No disponible en UMDF 2.0 y versiones posteriores.
Plataforma de destino Escritorio
Versión mínima de UMDF 1,9
Encabezado wudfddi.h (incluya Wudfddi.h)
Archivo DLL WUDFx.dll

Consulte también

IQueueCallbackIoResume::OnIoResume

IQueueCallbackIoStop::OnIoStop

IWDFIoRequest2