EVT_SPB_CONTROLLER_OTHER función de devolución de llamada (spbcx.h)
Una función de devolución de llamada de eventos EvtSpbControllerIoOtra del controlador SPB controla las solicitudes de control de E/S del dispositivo que no se controlan mediante otras funciones de devolución de llamada de eventos o por la extensión de marco de SPB (SpbCx).
Sintaxis
EVT_SPB_CONTROLLER_OTHER EvtSpbControllerOther;
void EvtSpbControllerOther(
[in] WDFDEVICE Controller,
[in] SPBTARGET Target,
[in] SPBREQUEST Request,
[in] size_t OutputBufferLength,
[in] size_t InputBufferLength,
[in] ULONG IoControlCode
)
{...}
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
Identificador SPBREQUEST de la solicitud de E/S. El controlador spb debe completar esta solicitud. Para obtener más información, vea la sección Comentarios.
[in] OutputBufferLength
Longitud, en bytes, del búfer de salida, si se proporciona un búfer de salida con la solicitud.
[in] InputBufferLength
Longitud, en bytes, del búfer de entrada, si se proporciona un búfer de entrada con la solicitud.
[in] IoControlCode
El código de control de E/S (IOCTL) de la solicitud. Este valor es un IOCTL que la extensión de marco de SPB (SpbCx) no reconoce. Para obtener más información, vea la sección Comentarios.
Valor devuelto
None
Observaciones
SpbCx administra la cola de E/S para el controlador SPB. Si el controlador del controlador SPB registra una función de devolución de llamada EvtSpbControllerIoOther , SpbCx llama a esta función cuando una solicitud de control de E/S de dispositivo que SpbCx no admite llega a la cola de E/S del controlador. El valor del parámetro Request es un identificador que encapsula esta solicitud. El controlador del controlador SPB debe completar esta solicitud realizando la operación solicitada o devolviendo un estado de error. Si el controlador no admite el IOCTL especificado, el controlador debe devolver el estado de error STATUS_NOT_SUPPORTED. Para obtener una lista de ioCTLs compatibles con SpbCx, consulte Códigos de control de E/S de SpbCx.
La devolución de llamada EvtSpbControllerIoOther permite que los comandos específicos de bus o específicos del controlador se envíen al controlador del controlador SPB como IOCTLs. Por ejemplo, los clientes (controladores periféricos) pueden usar estas ICTL para coordinar operaciones específicas del bus, como intercambios de datos dúplex completos con un dispositivo de destino en un bus SPI. Estas ICTL están sujetas al mismo control de flujo que las IOCTLs que admite SpbCx.
La función de devolución de llamada EvtSpbControllerIoOther es similar a EvtIoDeviceControl y procesa ioCTLs de una manera similar. Para obtener información general sobre cómo los controladores de WDF controlan las solicitudes de E/S, vea Objetos de solicitud de marco.
Una devolución de llamada EvtSpbControllerIoOther no devuelve un valor de estado. En su lugar, el controlador SPB indica el estado de la operación solicitada en el estado de finalización de la solicitud de E/S.
Si no se puede completar inmediatamente una solicitud de E/S, la función de devolución de llamada debe devolverse sin esperar a que el controlador del controlador SPB termine de procesar la solicitud. El controlador del controlador SPB puede completar la solicitud de forma asincrónica.
Una función EvtSpbControllerIoOther debe validar los valores de parámetro en las solicitudes de control de E/S que recibe de los clientes en modo de usuario. Para todas las funciones de devolución de llamada EvtSpbXxx distintas de EvtSpbControllerIoOther, SpbCx valida los parámetros del modo de usuario antes de llamar a la función.
Para registrar una función de devolución de llamada EvtSpbControllerIoOther , llame al método SpbControllerSetIoOther .
Ejemplos
Para definir una función de devolución de llamada EvtSpbControllerIoOther , 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 EvtSpbControllerIoOther denominada MyEvtSpbControllerIoOther
, use el tipo de función EVT_SPB_CONTROLLER_OTHER, como se muestra en este ejemplo de código:
EVT_SPB_CONTROLLER_OTHER MyEvtSpbControllerIoOther;
A continuación, implemente la función de devolución de llamada de la siguiente manera:
_Use_decl_annotations_
VOID
MyEvtSpbControllerIoOther(
WDFDEVICE Controller,
SPBTARGET Target,
SPBREQUEST Request,
size_t OutputBufferLength,
size_t InputBufferLength,
ULONG IoControlCode
)
{ ... }
El tipo de función EVT_SPB_CONTROLLER_OTHER 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_OTHER 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. |