Compartir a través de


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

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

Para las interrupciones señaladas de mensaje, el controlador de miniport proporciona un controlador MiniportSynchronizeMessageInterrupt si alguna función de controlador que se ejecuta con menos de recursos compartidos de DIRQL para una interrupción señalada de mensaje con la función MiniportMessageInterrupt.

Nota Debe declarar esta función mediante el tipo MINIPORT_SYNCHRONIZE_INTERRUPT para interrupciones no señaladas de mensaje o mediante el tipo de MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT para las interrupciones señaladas por 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 controlador de miniporte MiniportXxx o función interna denominada 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.

Observaciones

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 registros de NIC, con la función MiniportInterrupt del controlador, ese controlador no puede acceder directamente a esos recursos. Si una función de prioridad inferior intenta acceder directamente a los recursos compartidos, es posible que MiniportInterrupt, lo que podría invalidar los cambios de estado de la función de controlador de prioridad inferior.

Para sincronizar el acceso a 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. Llamar a NdisMSynchronizeWithInterruptEx impide las condiciones de carrera y los interbloqueos en este tipo de controlador de miniport.

Las funciones de controlador de menor prioridad que compartan recursos entre sí (pero no con ninguna función que se ejecute en DIRQL) deben 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 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 de Ndis Xxx que son seguras para llamar en cualquier IRQL.

Ejemplos de

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 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 función MiniportSynchronizeInterrupt denominada "MySynchronizeInterrupt", use el tipo MINIPORT_SYNCHRONIZE_INTERRUPT tal 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 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 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 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, vea 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, vea Anotación del comportamiento de la función.

Requisitos

Requisito Valor
cliente mínimo admitido Se admite en NDIS 6.0 y versiones posteriores.
de la plataforma de destino de Windows
encabezado de ndis.h (incluya Ndis.h)
irQL Consulte la sección Comentarios.

Consulte también

miniportInetrrupt

MiniportInitializeEx

NdisAllocateSpinLock

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx