Compartir a través de


EVT_SPB_CONTROLLER_WRITE función de devolución de llamada (spbcx.h)

Un controlador de controlador SPB EvtSpbControllerIoWrite función de devolución de llamada de eventos escribe datos en el dispositivo de destino especificado desde los búferes proporcionados con la solicitud de escritura.

Sintaxis

EVT_SPB_CONTROLLER_WRITE EvtSpbControllerWrite;

void EvtSpbControllerWrite(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST Request,
  [in] size_t Length
)
{...}

Parámetros

[in] Controller

Un identificador WDFDEVICE para el objeto de dispositivo del marco que representa el controlador SPB.

[in] Target

Un de SPBTARGET al destino de esta solicitud de E/S. El destino es un dispositivo periférico o un puerto que está conectado al bus. La extensión de marco de SPB (SpbCx) asignó previamente este identificador al destino en el EvtSpbTargetConnect devolución de llamada que abrió la conexión al destino.

[in] Request

de SPBREQUEST para la solicitud de E/S. El controlador del controlador SPB debe completar esta solicitud realizando la operación solicitada o devolviendo un estado de error. Para obtener más información, vea Comentarios.

[in] Length

Número de bytes que se van a escribir en el dispositivo de destino.

Valor devuelto

Ninguno

Observaciones

SpbCx administra la cola de E/S para el controlador SPB. SpbCx llama al evtSpbControllerIoWrite del controlador SPB función de devolución de llamada cuando un cliente (controlador periférico) del controlador SPB envía una solicitud IRP_MJ_WRITE a un dispositivo de destino que está conectado al bus. El valor del parámetro request es un identificador que encapsula esta solicitud.

Una EvtSpbControllerIoWrite devolución de llamada no devuelve un valor de estado. En su lugar, el controlador del controlador SPB indica el estado de la operación de escritura en el estado de finalización de la solicitud de E/S.

Una EvtSpbControllerIoWrite devolución de llamada es asincrónica. Es decir, la función de devolución de llamada debe iniciar la operación de escritura solicitada y, a continuación, devolver sin esperar a que se complete la operación. Más adelante, el controlador del controlador SPB completa la solicitud de escritura durante una interrupción DPC o un DPC del temporizador.

Una EvtSpbControllerIoWrite devolución de llamada no devuelve un valor de estado. En su lugar, el controlador del controlador SPB indica el estado de la operación de escritura en el estado de finalización de la solicitud de E/S.

Si la operación de escritura se completa en su totalidad, la función de devolución de llamada debe establecer el estado de finalización en STATUS_SUCCESS. Si el dispositivo de destino indica que no puede aceptar más datos antes de que finalice una transmisión, el controlador debe establecer el estado de finalización en STATUS_SUCCESS y especificar el número de bytes transmitidos.

Si se produce un error de transmisión durante la operación de escritura, el controlador debe establecer el estado de finalización en la solicitud de E/S en un código de error adecuado. No todos los autobuses proporcionan un mecanismo para que un dispositivo de destino notifique un error de transporte o una transferencia completada parcialmente, y no todos los controladores pueden detectar estas condiciones.

Para registrar una función de devolución de llamada EvtSpbControllerIoWrite, llame al método SpbDeviceInitialize.

Ejemplos

Para definir un EvtSpbControllerIoWrite función de devolución de llamada, primero debe proporcionar una declaración de función que identifique el tipo de función de devolución de llamada que está definiendo. Windows proporciona un conjunto de tipos de función de devolución de llamada para controladores. Declarar una función mediante los tipos de función de devolución de llamada ayuda a Análisis de código para controladores, comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.

Por ejemplo, para definir un EvtSpbControllerIoWrite función de devolución de llamada denominada MyEvtSpbControllerIoWrite, use el tipo de función EVT_SPB_CONTROLLER_WRITE, como se muestra en este ejemplo de código:

EVT_SPB_CONTROLLER_WRITE  MyEvtSpbControllerIoWrite;

A continuación, implemente la función de devolución de llamada de la siguiente manera:

_Use_decl_annotations_
VOID
  MyEvtSpbControllerIoWrite(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST Request,
    size_t Length
    )
{ ... }

El tipo de función EVT_SPB_CONTROLLER_WRITE se define en el archivo de encabezado Spbcx.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación Use_decl_annotations a la definición de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función EVT_SPB_CONTROLLER_WRITE en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, consulte Declaración de funciones mediante tipos de rol de función para controladores kmDF. Para obtener más información sobre Use_decl_annotations, vea Anotación del comportamiento de la función.

Requisitos

Requisito Valor
cliente mínimo admitido Se admite a partir de Windows 8.
de la plataforma de destino de Escritorio
encabezado de spbcx.h
irQL Se llama a irQL <= DISPATCH_LEVEL.

Consulte también