Envío de solicitudes de E/S de forma asincrónica

Para poder enviar una solicitud de E/S de forma asincrónica a un destino de E/S, debe dar formato a la solicitud. En la tabla siguiente se enumeran los métodos de objeto de destino de E/S a los que el controlador puede llamar para dar formato a las solicitudes de E/S.

Método Propósito

WdfIoTargetFormatRequestForRead

Da formato a una solicitud de lectura

WdfIoTargetFormatRequestForWrite

Da formato a una solicitud de escritura

WdfIoTargetFormatRequestForIoctl

Da formato a una solicitud de control de dispositivo

WdfIoTargetFormatRequestForInternalIoctl

Da formato a una solicitud de control de dispositivo interna

WdfIoTargetFormatRequestForInternalIoctlOthers

Da formato a una solicitud de control de dispositivo interno no estándar

Para enviar una solicitud de E/S de forma asincrónica, el controlador debe:

  1. Dar formato a la solicitud.

    Use uno de los métodos enumerados en la tabla anterior para dar formato a las solicitudes. Para obtener información detallada sobre cómo usar estos métodos, consulte las páginas de referencia de los métodos.

  2. Registre una función de devolución de llamada CompletionRoutine .

    Si envía solicitudes de forma asincrónica, normalmente quiere que el marco notifique al controlador cuando otro controlador complete cada solicitud. El controlador debe definir una función de devolución de llamada CompletionRoutine y registrarla llamando a WdfRequestSetCompletionRoutine. Para obtener más información, consulte Finalización de solicitudes de E/S.

  3. Envíe la solicitud.

    Después de que el controlador dé formato a la solicitud y registre una función de devolución de llamada CompletionRoutine , el controlador debe llamar a WdfRequestSend. Este método permite enviar solicitudes de forma sincrónica o asincrónica, según las marcas establecidas en el parámetro RequestOptions . Para obtener una manera más sencilla de enviar solicitudes de E/S de forma sincrónica, consulte Envío de solicitudes de E /S de forma sincrónica. Para obtener información sobre cómo obtener el estado de finalización de una solicitud asincrónica o para cualquier solicitud que se envíe mediante una llamada a WdfRequestSend, consulte Finalización de solicitudes de E/S.

Un controlador que llama a WdfRequestSend para enviar una solicitud de E/S puede intentar cancelar la solicitud más adelante. Para obtener más información, consulte Cancelación de solicitudes de E/S.

Algunos controladores pueden enviar una única solicitud de E/S a varios dispositivos y, por tanto, a varios destinos de E/S mediante una llamada a WdfRequestSend más de una vez para cada solicitud. Estos controladores deben llamar a WdfRequestChangeTarget antes de cada llamada a WdfRequestSend después del primero para comprobar que la solicitud se puede enviar al siguiente destino de E/S.