EVT_SPB_CONTROLLER_OTHER función de devolución de llamada (spbcx.h)
Un controlador de controlador SPB EvtSpbControllerIoOther función de devolución de llamada de eventos 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 del marco 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 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
El de SPBREQUEST a la solicitud de E/S. El controlador del controlador SPB debe completar esta solicitud. Para obtener más información, vea 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
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 Comentarios.
Valor devuelto
Ninguno
Observaciones
SpbCx administra la cola de E/S para el controlador SPB. Si el controlador del controlador SPB registra un EvtSpbControllerIoOther función de devolución de llamada, 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 EvtSpbControllerIoOther devolución de llamada permite enviar comandos específicos de bus o específicos del controlador al 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. Estos ICTL están sujetos al mismo control de flujo que los IOCTLs admitidos por SpbCx.
La función de devolución de llamada EvtSpbControllerIoOther es similar a la EvtIoDeviceControl y procesa ioCTLs de forma similar. Para obtener información general sobre cómo los controladores WDF controlan las solicitudes de E/S, vea Framework Request Objects.
Una EvtSpbControllerIoOther 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 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 en 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 un EvtSpbControllerIoOther 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 EvtSpbControllerIoOther función de devolución de llamada 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 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. |