KSERVICE_ROUTINE función de devolución de llamada (wdm.h)
El InterruptService rutina (ISR) atiende rápidamente una interrupción del dispositivo y programa el procesamiento posterior a la interrupción de los datos recibidos, si es necesario.
Sintaxis
KSERVICE_ROUTINE KserviceRoutine;
BOOLEAN KserviceRoutine(
[in] _KINTERRUPT *Interrupt,
[in] PVOID ServiceContext
)
{...}
Parámetros
[in] Interrupt
Puntero proporcionado por el autor de la llamada a la estructura KINTERRUPT para la interrupción.
[in] ServiceContext
Puntero proporcionado por el autor de la llamada a la información de contexto, especificada en una llamada anterior a ioConnectInterrupt o IoConnectInterruptEx.
Valor devuelto
Si la rutina determina que la interrupción no procede de uno de los dispositivos del controlador, debe devolver FALSE. De lo contrario, la rutina debe atender la interrupción y devolver TRUE.
Observaciones
Para registrar un ISR para una afinidad específica de vector de interrupción y procesador, un controlador debe llamar a IoConnectInterrupt o IoConnectInterruptEx.
La rutina de (ISR) de un controlador se ejecuta en un contexto de interrupción, en algún DIRQL asignado por el sistema, tal como se especifica en el parámetro synchronizeIrql para IoConnectInterrupt. (Otros dispositivos, con valores DIRQL superiores, pueden interrumpir el ISR).
Antes de que el sistema llame a un ISR, adquiere el bloqueo de giro de la interrupción (el parámetro SpinLock para IoConnectInterrupt), por lo que el ISR no se puede ejecutar simultáneamente en otro procesador. Después de que el ISR vuelva, el sistema libera el bloqueo de número.
Un ISR debe determinar primero si la interrupción procede de uno de los dispositivos del controlador mediante el examen de la información de contexto proporcionada por Context. Si la interrupción no procede de uno de los dispositivos del controlador, la rutina debe devolver inmediatamente FALSE para que el administrador de E/S pueda llamar a otros controladores que hayan registrado ISR para el mismo procesador y vector de interrupción.
Para obtener más información sobre la implementación de ISR, consulte rutinas de servicio de interrupción.
Ejemplos
Para definir una rutina de devolución de llamada de InterruptService, primero debe proporcionar una declaración de función que identifique el tipo de rutina 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 una rutina de devolución de llamada InterruptService denominada MyInterruptService
, use el tipo de KSERVICE_ROUTINE tal y como se muestra en este ejemplo de código:
KSERVICE_ROUTINE MyInterruptService;
A continuación, implemente la rutina de devolución de llamada de la siguiente manera:
_Use_decl_annotations_
BOOLEAN
MyInterruptService(
struct _KINTERRUPT *Interrupt,
PVOID ServiceContext
)
{
// Function body
}
El tipo de función KSERVICE_ROUTINE se define en el archivo de encabezado Wdm.h. Para identificar con mayor 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 KSERVICE_ROUTINE en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, vea Declarar funciones mediante tipos de rol de función para controladores WDM. Para obtener información sobre _Use_decl_annotations_
, vea Anotación del comportamiento de la función.
Requisitos
Requisito | Valor |
---|---|
de la plataforma de destino de | Escritorio |
encabezado de | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
irQL | Se llama en DIRQL (consulte la sección Comentarios). |