KSYNCHRONIZE_ROUTINE función de devolución de llamada (wdm.h)
La rutina SynchCritSection se usa para acceder a los recursos de hardware o a los datos del controlador que se comparten con la rutina InterruptService de un controlador.
Sintaxis
KSYNCHRONIZE_ROUTINE KsynchronizeRoutine;
BOOLEAN KsynchronizeRoutine(
[in] PVOID SynchronizeContext
)
{...}
Parámetros
[in] SynchronizeContext
Información de contexto proporcionada por el autor de la llamada, especificada por la llamada del controlador a KeSynchronizeExecution.
Valor devuelto
Si la operación de la rutina se realiza correctamente, la rutina debe devolver TRUE; de lo contrario, debe devolver FALSE. (El éxito y el error de esta rutina son definidos por el controlador). El valor devuelto especificado se convierte en el valor devuelto de KeSynchronizeExecution.
Comentarios
Los controladores deben usar rutinas SynchCritSection para acceder a los recursos de hardware o a los datos de controladores a los que también puede acceder una rutina de InterruptService (ISR).
El sistema llama a la rutina SynchCritSection de un controlador cuando el controlador llama a KeSynchronizeExecution. Cuando un controlador llama a KeSynchronizeExecution, especifica la dirección de una rutina SynchCritSection , información de contexto para la rutina y un puntero de objeto de interrupción. La rutina KeSynchronizeExecution adquiere el bloqueo de número del objeto de interrupción y, a continuación, llama a la rutina SynchCritSection .
La rutina SynchCritSection de un controlador se ejecuta en el mismo IRQL que el ISR con el que está asociado. En concreto, se ejecuta en algún DIRQL asignado por el sistema, según lo especificado por el parámetro SynchronizeIrql en IoConnectInterrupt. (Otros dispositivos, con valores DIRQL superiores, pueden interrumpir una rutina SynchCritSection ).
Ejemplos
Para definir una rutina de devolución de llamada synchCritSection , 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 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 rutina de devolución de llamada SynchCritSection denominada MySynchCritSection
, use el tipo KSYNCHRONIZE_ROUTINE como se muestra en este ejemplo de código:
KSYNCHRONIZE_ROUTINE MySynchCritSection;
A continuación, implemente la rutina de devolución de llamada de la siguiente manera:
_Use_decl_annotations_
BOOLEAN
MySynchCritSection(
PVOID SynchronizeContext
)
{
// Function body
}
El tipo de función KSYNCHRONIZE_ROUTINE se define en el archivo de encabezado Wdm.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 a la _Use_decl_annotations_
definición de la función. La _Use_decl_annotations_
anotación garantiza que se usen las anotaciones que se aplican al tipo de función KSYNCHRONIZE_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 roles de función para controladores WDM. Para obtener información sobre _Use_decl_annotations_
, consulte Anotación del comportamiento de la función.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Escritorio |
Encabezado | wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Se llama en DIRQL (consulte la sección Comentarios). |