Método IWDFIoRequest::MarkCancelable (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 MarkCancelable permite cancelar la solicitud de E/S.

Sintaxis

void MarkCancelable(
  [in] IRequestCallbackCancel *pCancelCallback
);

Parámetros

[in] pCancelCallback

Puntero a la interfaz IRequestCallbackCancel cuyo método llama el marco después de cancelar la solicitud de E/S.

Valor devuelto

None

Observaciones

Después de que un controlador reciba una solicitud de E/S como entrada a una IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite o IQueueCallbackDeviceIoControl::OnDeviceIoControl función de devolución de llamada del evento, el controlador puede llamar al método MarkCancelable para habilitar la cancelación de la solicitud. Más adelante, el controlador puede llamar al método IWDFIoRequest::UnmarkCancelable para deshabilitar la cancelación de la solicitud.

Antes de que un controlador llame a MarkCancelable, el controlador debe implementar el método IRequestCallbackCancel::OnCancel .

User Mode Driver Framework (UMDF) solo permite un método IRequestCallbackCancel::OnCancel por cola. Por lo tanto, cuando un controlador llama a MarkCancelable para las solicitudes asociadas a una cola determinada para permitir que el marco cancele esas solicitudes, el controlador debe pasar un puntero a la interfaz IRequestCallbackCancel para el mismo objeto de devolución de llamada de solicitud. Más adelante, para cancelar cada solicitud, el marco pasa un puntero a la interfaz IWDFIoRequest de la solicitud en una llamada al método IRequestCallbackCancel::OnCancel del objeto request-callback.

El controlador debe llamar a IWDFIoRequest::Complete, ya sea desde el método IRequestCallbackCancel::OnCancel o desde su ruta de finalización de E/S normal.

Después de que un controlador llame a MarkCancelable para habilitar la cancelación, la solicitud permanece cancelable mientras el controlador tiene posesión del objeto de solicitud, a menos que el controlador llame a UnmarkCancelable para deshabilitar la cancelación.

Si el controlador llama al método IWDFIoRequest::ForwardToIoQueue para reenviar la solicitud a otra cola, se aplican las reglas siguientes:

  • No se puede habilitar la cancelación de solicitudes de E/S cuando el controlador reenvía las solicitudes a una cola diferente.

    Normalmente, el controlador no debe llamar a MarkCancelable para habilitar la cancelación de una solicitud antes de llamar a IWDFIoRequest::ForwardToIoQueue. Como alternativa, el controlador puede hacer que la solicitud se pueda cancelar. Sin embargo, el controlador debe llamar a UnmarkCancelable para deshabilitar la cancelación de la solicitud antes de llamar a IWDFIoRequest::ForwardToIoQueue.

  • Mientras la solicitud está en una segunda cola, el marco lo posee y puede cancelarlo sin notificar al controlador.
  • Una vez que el marco pone en cola la solicitud de la segunda cola y entrega la solicitud al controlador, el controlador puede llamar a MarkCancelable para habilitar la cancelación.

Ejemplos

En el ejemplo de código siguiente se configura una solicitud para que el marco pueda cancelarla.

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

    pWdfRequest->MarkCancelable(cancelCallback);

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.5
Encabezado wudfddi.h (incluya Wudfddi.h)
Archivo DLL WUDFx.dll

Consulte también

IQueueCallbackDeviceIoControl::OnDeviceIoControl

IQueueCallbackRead::OnRead

IQueueCallbackWrite::OnWrite

IRequestCallbackCancel

IRequestCallbackCancel::OnCancel

IWDFIoRequest

IWDFIoRequest::Complete

IWDFIoRequest::ForwardToIoQueue

IWDFIoRequest::UnmarkCancelable