Compartir a través de


MINIPORT_SYNCHRONIZE_INTERRUPT función de devolución de llamada (ndis.h)

Un controlador de minipuerto debe proporcionar un controlador MiniportSynchronizeInterrupt si alguna función de controlador que se ejecuta en menos de DIRQL comparte recursos con la función MiniportInterrupt .

En el caso de las interrupciones señaladas por mensajes, el controlador de minipuerto proporciona un controlador MiniportSynchronizeMessageInterrupt si alguna función de controlador que se ejecuta en menos de DIRQL comparte recursos para una interrupción señalada de mensaje con la función MiniportMessageInterrupt .

Nota Debe declarar esta función mediante el tipo de MINIPORT_SYNCHRONIZE_INTERRUPT para interrupciones no señaladas de mensaje o mediante el tipo de MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT para las interrupciones señaladas de mensaje. Para obtener más información, consulte la sección Ejemplos siguientes.
 

Sintaxis

MINIPORT_SYNCHRONIZE_INTERRUPT MiniportSynchronizeInterrupt;

BOOLEAN MiniportSynchronizeInterrupt(
  [in] NDIS_HANDLE SynchronizeContext
)
{...}

Parámetros

[in] SynchronizeContext

Identificador de un área de contexto que se proporciona cuando el miniportador MiniportXxx o la función interna del controlador de minipuerto llamó a . Función NdisMSynchronizeWithInterruptEx .

Valor devuelto

MiniportSynchronizeInterrupt devuelve un valor booleano con un significado determinado por el controlador. NDIS devuelve el mismo valor cuando NDIS devuelve de NdisMSynchronizeWithInterruptEx.

Comentarios

Nota La información de esta sección también se puede aplicar a las interrupciones señaladas del mensaje sustituyendo "MiniportInterrupt" por "MiniportMessageInterrupt" y sustituyendo "MiniportSynchronizeInterrupt" por "MiniportSynchronizeMessageInterrupt".
 
Si alguna función de controlador de miniporte que se ejecuta en menos de DIRQL comparte recursos, como los registros de NIC, con la función MiniportInterrupt del controlador, ese controlador no puede acceder a esos recursos directamente. Si una función de prioridad inferior intenta acceder directamente a los recursos compartidos, miniportInterrupt podría reemplazar los cambios de estado de la función de controlador de prioridad inferior.

Para sincronizar el acceso a los recursos compartidos con MiniportInterrupt, las funciones de controlador de prioridad inferior deben llamar a Función NdisMSynchronizeWithInterruptEx . La función MiniportSynchronizeInterrupt del controlador accede a los recursos compartidos en DIRQL. La llamada a NdisMSynchronizeWithInterruptEx impide las condiciones de carrera y los interbloqueos en un controlador de minipuerto.

Cualquier función de controlador de prioridad inferior que comparta recursos entre sí (pero no con ninguna función que se ejecute en DIRQL) debe usar un bloqueo de número para proteger esos recursos compartidos.

MiniportSynchronizeInterrupt se ejecuta en el DIRQL asignado cuando la función MiniportInitializeEx del controlador llama a la Función NdisMRegisterInterruptEx . Al igual que cualquier función de controlador que se ejecuta en DIRQL, MiniportSynchronizeInterrupt debe devolver el control al autor de la llamada lo antes posible, y solo puede llamar a las funciones NdisXxx que son seguras para llamar en cualquier IRQL.

Ejemplos

Para definir una función MiniportSynchronizeInterrupt , primero debe proporcionar una declaración de función que identifique el tipo de función que va a definir. Windows proporciona un conjunto de tipos de función para controladores. Declarar una función mediante los tipos de función ayuda a Code Analysis for Drivers, Static Driver Verifier (SDV) y otras herramientas de comprobación a encontrar errores y es un requisito para escribir controladores para el sistema operativo Windows.

Por ejemplo, para definir una función MiniportSynchronizeInterrupt denominada "MySynchronizeInterrupt", use el tipo MINIPORT_SYNCHRONIZE_INTERRUPT como se muestra en este ejemplo de código:

MINIPORT_SYNCHRONIZE_INTERRUPT MySynchronizeInterrupt;

A continuación, implemente la función de la siguiente manera:

_Use_decl_annotations_
BOOLEAN
 MySynchronizeInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

Para definir una función MiniportSynchronizeMessageInterrupt para las interrupciones señaladas de mensaje, use el tipo de MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT como se muestra en este ejemplo de código:

MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT MySynchronizeMessageInterrupt;

A continuación, implemente la función de la siguiente manera:

_Use_decl_annotations_
BOOLEAN
 MySynchronizeMessageInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

Los tipos de función MINIPORT_SYNCHRONIZE_INTERRUPT y MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT se definen en el archivo de encabezado Ndis.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 las definiciones de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función del archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, consulte Declaración de funciones mediante el uso de tipos de roles de función para controladores NDIS.

Para obtener información sobre Use_decl_annotations, consulte Anotación del comportamiento de la función.

Requisitos

Requisito Value
Cliente mínimo compatible Se admite en NDIS 6.0 y versiones posteriores.
Plataforma de destino Windows
Encabezado ndis.h (incluya Ndis.h)
IRQL Consulte la sección Comentarios.

Consulte también

MiniportInetrrupt

MiniportInitializeEx

NdisAllocateSpinLock

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx