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 nuevos controladores UMDF deben escribirse mediante 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 a UMDF.]
El método StopAcknowledge informa al marco de trabajo que el controlador ha dejado de procesar una solicitud de E/S especificada.
Sintaxis
void StopAcknowledge(
[in] BOOL Requeue
);
Parámetros
[in] Requeue
Valor booleano que, si TRUE, hace que el marco vuelva a poner la solicitud en la cola para que el marco lo entregue de nuevo al controlador. Si FALSE, el marco no vuelve a poner en cola la solicitud. Para obtener más información, vea la siguiente sección Comentarios.
Valor devuelto
Ninguno
Observaciones
Si un controlador registra una IQueueCallbackIoStop::OnIoStop función de devolución de llamada para una cola de E/S, el marco lo llama cuando el dispositivo subyacente de la cola deja su estado de trabajo (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 no llama a IWDFIoRequest::Complete o stopAcknowledge para cada solicitud que recibe una IQueueCallbackIoStop::OnIoStop función de devolución de llamada, 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 el de un controlador IQueueCallbackIoStop::OnIoStop llama a la función de devolución de llamada StopAcknowledge, puede establecer el parámetro Requeue en TRUE o FALSE:
-
Establecer requeue en TRUE hace que el marco vuelva 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.
-
Establecer requeue en FALSE hace que la propiedad de la solicitud permanezca 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 IQueueCallbackIoResume::OnIoResume función de devolución de llamada para que el controlador pueda continuar procesando la solicitud.
Antes de llamar a StopAcknowledge, el controlador IQueueCallbackIoStop::OnIoStop función de devolución de llamada debe detener todo el procesamiento de la solicitud de E/S que requiere acceder al dispositivo subyacente, ya que el dispositivo está a punto de entrar en un estado de baja potencia.
Ejemplos
El ejemplo de código siguiente es un IQueueCallbackIoStop::OnIoStop función de devolución de llamada 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 solo devuelve porque el controlador IRequestCallbackCancel::OnCancel función de devolución de llamada controlará la solicitud. De lo contrario, el ejemplo llama StopAcknowledge y especifica FALSE para que el marco llame finalmente a la función de devolución de llamada 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);
}
Requisitos
Requisito | Valor |
---|---|
fin del soporte técnico | No disponible en UMDF 2.0 y versiones posteriores. |
de la plataforma de destino de | Escritorio |
versión mínima de UMDF | 1.9 |
encabezado de | wudfddi.h (incluya Wudfddi.h) |
DLL de | WUDFx.dll |
Consulte también
IQueueCallbackIoResume::OnIoResume