Partilhar via


MINIPORT_SYNCHRONIZE_INTERRUPT função de retorno de chamada (ndis.h)

Um driver de miniporto deve fornecer um manipulador de MiniportSynchronizeInterrupt se qualquer função de driver executada em menos de DIRQL compartilhar recursos com a função MiniportInterrupt.

Para interrupções sinalizadas por mensagem, o driver de miniporto fornece um manipulador MiniportSynchronizeMessageInterrupt se qualquer função de driver executada em menos de DIRQL compartilhar recursos para uma mensagem sinalizada interrupção com a função MiniportMessageInterrupt.

Observação Você deve declarar essa função usando o tipo MINIPORT_SYNCHRONIZE_INTERRUPT para interrupções não sinalizadas por mensagem ou usando o tipo MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT para interrupções sinalizadas por mensagem. Para obter mais informações, consulte a seção Exemplos a seguir.
 

Sintaxe

MINIPORT_SYNCHRONIZE_INTERRUPT MiniportSynchronizeInterrupt;

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

Parâmetros

[in] SynchronizeContext

Um identificador para uma área de contexto fornecida quando o driver de miniporto MiniportXxx ou a função interna chamada de função NdisMSynchronizeWithInterruptEx.

Valor de retorno

MiniportSynchronizeInterrupt retorna um valor booliano com um significado determinado pelo driver. O NDIS retorna o mesmo valor quando o NDIS retorna de NdisMSynchronizeWithInterruptEx.

Observações

Observação As informações nesta seção também podem ser aplicadas a interrupções sinalizadas por mensagem substituindo "MiniportInterrupt" por "MiniportMessageInterrupt" e substituindo "MiniportSynchronizeInterrupt" por "MiniportSynchronizeMessageInterrupt".
 
Se qualquer função de driver de miniporto que é executada em menos de DIRQL compartilhar recursos, como registros NIC, com a função MiniportInterrupt do driver, esse driver não poderá acessar esses recursos diretamente. Se uma função de prioridade mais baixa tentar acessar os recursos compartilhados diretamente, ela poderá ser preempída por miniportInterrupt, o que poderia substituir as alterações de estado da função de driver de prioridade mais baixa.

Para sincronizar o acesso a recursos compartilhados com MiniportInterrupt, as funções de driver de prioridade mais baixa devem chamar o função NdisMSynchronizeWithInterruptEx. A função MiniportSynchronizeInterrupt do driver acessa os recursos compartilhados no DIRQL. Chamar NdisMSynchronizeWithInterruptEx impede condições de corrida e deadlocks em um piloto de miniporto.

Quaisquer funções de driver de prioridade mais baixa que compartilhem recursos entre si (mas não com qualquer função executada no DIRQL) devem usar um bloqueio de rotação para proteger esses recursos compartilhados.

MiniportSynchronizeInterrupt é executado no DIRQL atribuído quando a função MiniportInitializeEx do driver chama a função função NdisMRegisterInterruptEx. Como qualquer função de driver executada no DIRQL, MiniportSynchronizeInterrupt deve retornar o controle de volta ao chamador o mais rápido possível e pode chamar somente as funções NdisXxx que são seguras para chamar em qualquer IRQL.

exemplos de

Para definir uma função MiniportSynchronizeInterrupt, primeiro você deve fornecer uma declaração de função que identifique o tipo de função que você está definindo. O Windows fornece um conjunto de tipos de função para drivers. Declarar uma função usando os tipos de função ajuda Análise de Código para Drivers, SDV (Verificador de Driver Estático) e outras ferramentas de verificação a encontrar erros e é um requisito para gravar drivers para o sistema operacional Windows.

Por exemplo, para definir uma função MiniportSynchronizeInterrupt denominada "MySynchronizeInterrupt", use o tipo MINIPORT_SYNCHRONIZE_INTERRUPT conforme mostrado neste exemplo de código:

MINIPORT_SYNCHRONIZE_INTERRUPT MySynchronizeInterrupt;

Em seguida, implemente sua função da seguinte maneira:

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

Para definir uma função miniportSynchronizeMessageInterrupt para interrupções sinalizadas por mensagem, use o tipo MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT conforme mostrado neste exemplo de código:

MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT MySynchronizeMessageInterrupt;

Em seguida, implemente sua função da seguinte maneira:

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

Os tipos de função MINIPORT_SYNCHRONIZE_INTERRUPT e MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT são definidos no arquivo de cabeçalho Ndis.h. Para identificar erros com mais precisão ao executar as ferramentas de análise de código, adicione a anotação Use_decl_annotations às definições de função. A anotação Use_decl_annotations garante que as anotações aplicadas ao tipo de função no arquivo de cabeçalho sejam usadas. Para obter mais informações sobre os requisitos para declarações de função, consulte Declarando funções usando tipos de função de função para drivers NDIS.

Para obter informações sobre Use_decl_annotations, consulte Anotando o comportamento da função.

Requisitos

Requisito Valor
de cliente com suporte mínimo Com suporte no NDIS 6.0 e posterior.
da Plataforma de Destino Windows
cabeçalho ndis.h (inclua Ndis.h)
IRQL Consulte a seção Comentários

Consulte também

MiniportInetrrupt

MiniportInitializeEx

NdisAllocateSpinLock

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx