EVT_SPB_CONTROLLER_READ función de devolución de llamada (spbcx.h)
Una función de devolución de llamada de eventos EvtSpbControllerIoRead del controlador SPB lee los datos del dispositivo de destino especificado en los búferes que se proporcionan con la solicitud de lectura.
Sintaxis
EVT_SPB_CONTROLLER_READ EvtSpbControllerRead;
void EvtSpbControllerRead(
[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 de marco que representa el controlador SPB.
[in] Target
Identificador SPBTARGET para el 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 la devolución de llamada EvtSpbTargetConnect que abrió la conexión al destino.
[in] Request
Un identificador 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 leer desde el dispositivo de destino.
Valor devuelto
None
Observaciones
SpbCx administra la cola de E/S para el controlador SPB. SpbCx llama a la función de devolución de llamada EvtSpbControllerIoRead del controlador SPB cuando un cliente (controlador periférico) del controlador SPB envía una solicitud de IRP_MJ_READ a un dispositivo de destino que está conectado al bus. El valor del parámetro Request es un identificador que encapsula esta solicitud.
Una devolución de llamada EvtSpbControllerIoRead no devuelve un valor de estado. En su lugar, el controlador SPB indica el estado de la operación de lectura en el estado de finalización de la solicitud de E/S.
Una devolución de llamada EvtSpbControllerIoRead es asincrónica. Es decir, la función de devolución de llamada debe iniciar la operación de lectura solicitada y, a continuación, volver sin esperar a que se complete la operación. Más adelante, el controlador spb completa la solicitud de lectura durante una interrupción DPC o un DPC del temporizador.
Si la operación de lectura se completa en su totalidad, el controlador del controlador SPB debe establecer el estado de finalización en STATUS_SUCCESS. Si el dispositivo de destino indica que puede proporcionar algunos pero no todos los datos solicitados, el controlador del controlador SPB debe recuperar tantos datos como esté disponible, especifique el número de bytes de datos recuperados y establezca el estado de finalización en la solicitud de E/S para STATUS_SUCCESS. Esta operación de lectura parcialmente completada no puede producirse en un bus SPI o I2C, pero puede producirse en otro tipo de bus.
Si se produce un error en la operación de lectura debido al ruido de línea, un error de hardware del controlador del controlador o un error de controlador, el controlador SPB 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 EvtSpbControllerIoRead , llame al método SpbDeviceInitialize .
Ejemplos
Para definir una función de devolución de llamada EvtSpbControllerIoRead , 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 Code Analysis for Drivers, Static Driver Verifier (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 una función de devolución de llamada EvtSpbControllerIoRead denominada MyEvtSpbControllerIoRead
, use el tipo de función EVT_SPB_CONTROLLER_READ, como se muestra en este ejemplo de código:
EVT_SPB_CONTROLLER_READ MyEvtSpbControllerIoRead;
A continuación, implemente la función de devolución de llamada de la siguiente manera:
_Use_decl_annotations_
VOID
MyEvtSpbControllerIoRead(
WDFDEVICE Controller,
SPBTARGET Target,
SPBREQUEST Request,
size_t Length
)
{ ... }
El tipo de función EVT_SPB_CONTROLLER_READ 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_READ 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 roles de función para controladores KMDF. Para obtener más información sobre Use_decl_annotations, consulte Anotación del comportamiento de la función.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Se admite a partir de Windows 8. |
Plataforma de destino | Escritorio |
Encabezado | spbcx.h |
IRQL | Se llama en IRQL <= DISPATCH_LEVEL. |