EVT_SPB_CONTROLLER_UNLOCK función de devolución de llamada (spbcx.h)
La función de devolución de llamada de eventos EvtSpbControllerUnlock de un controlador SPB del controlador SPB, bloqueada por una llamada anterior a la función de devolución de llamada de eventos EvtSpbControllerLock .
Sintaxis
EVT_SPB_CONTROLLER_UNLOCK EvtSpbControllerUnlock;
void EvtSpbControllerUnlock(
[in] WDFDEVICE Controller,
[in] SPBTARGET Target,
[in] SPBREQUEST UnlockRequest
)
{...}
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] UnlockRequest
Un identificador SPBREQUEST a una solicitud de control de E/S para desbloquear el controlador. 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.
Valor devuelto
None
Observaciones
SpbCx administra la cola de E/S para el controlador SPB. SpbCx llama a esta función cuando un cliente (controlador periférico) del controlador envía una solicitud de IOCTL_SPB_UNLOCK_CONTROLLER a un destino en el bus. El valor del parámetro UnlockRequest es un identificador que encapsula esta solicitud.
Las funciones EvtSpbControllerLock y EvtSpbControllerUnlock realizan operaciones complementarias. Ambas funciones son opcionales. Si el controlador del controlador SPB implementa una función EvtSpbControllerUnlock , el controlador no es necesario para implementar una función EvtSpbControllerLock , pero podría hacerlo. Sin embargo, si el controlador del controlador SPB implementa una función EvtSpbControllerLock , también debe implementar una función EvtSpbControllerUnlock . Para obtener más información, vea Comentarios en SPB_CONTROLLER_CONFIG.
Si el controlador del controlador SPB necesita cambiar el modo de su controlador para restaurar la selección de destino normal, puede hacerlo durante la devolución de llamada EvtSpbControllerUnlock . Si este cambio de modo implica un retraso largo o requiere que el controlador espere una interrupción del dispositivo, el controlador debe iniciar el cambio de modo y, a continuación, volver de la devolución de llamada sin retraso. Más adelante, el controlador puede completar la solicitud de desbloqueo en un DPC de interrupción o un DPC del temporizador.
Una devolución de llamada EvtSpbControllerUnlock debe evitar que se produzca un error en una solicitud de desbloqueo. Si el comprobador de controladores está habilitado, este error desencadenará una captura del comprobador, que notificará al administrador de Plug and Play que el controlador ha producido un error. SpbCx omite el error de una solicitud de desbloqueo y no intenta controlar ni mitigar el error.
La función EvtSpbControllerUnlock no devuelve un valor. En su lugar, el controlador SPB indica el estado de la operación de desbloqueo en el estado de finalización de la solicitud de E/S identificada por el parámetro UnlockRequest . Establezca el estado de finalización en STATUS_SUCCESS.
Para registrar una función de devolución de llamada EvtSpbControllerUnlock , llame al método SpbDeviceInitialize .
Para obtener más información sobre la función EvtSpbControllerUnlock , vea Control de secuencias de Client-Implemented.
Ejemplos
Para definir una función de devolución de llamada EvtSpbControllerUnlock , 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 EvtSpbControllerUnlock denominada MyEvtSpbControllerUnlock
, use el tipo de función EVT_SPB_CONTROLLER_UNLOCK, como se muestra en este ejemplo de código:
EVT_SPB_CONTROLLER_UNLOCK MyEvtSpbControllerUnlock;
A continuación, implemente la función de devolución de llamada de la siguiente manera:
_Use_decl_annotations_
VOID
MyEvtSpbControllerUnlock(
WDFDEVICE Controller,
SPBTARGET Target,
SPBREQUEST UnlockRequest
)
{ ... }
El tipo de función EVT_SPB_CONTROLLER_UNLOCK 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_UNLOCK 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. |