Compartilhar via


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

Um driver de miniporto deve fornecer um manipulador 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 fornecerá um manipulador MiniportSynchronizeMessageInterrupt se qualquer função de driver executada em menos de DIRQL compartilhar recursos para uma interrupção sinalizada por mensagem com a função MiniportMessageInterrupt .

Nota 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 que é fornecida quando o MiniportXxx do driver de miniporto ou função interna chamado de Função NdisMSynchronizeWithInterruptEx .

Retornar valor

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

Comentários

Nota 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 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 essa função de prioridade mais baixa tentar acessar os recursos compartilhados diretamente, ela poderá ser preempída por MiniportInterrupt, o que pode substituir as alterações de estado da função de driver de prioridade mais baixa.

Para sincronizar o acesso a recursos compartilhados com o 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 em DIRQL. Chamar NdisMSynchronizeWithInterruptEx impede condições de corrida e deadlocks em um piloto de miniport.

Todas as funções de driver de prioridade mais baixa que compartilham 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 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 apenas as funções NdisXxx que são seguras de chamar em qualquer IRQL.

Exemplos

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 a 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 chamada "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
Cliente mínimo com suporte Com suporte no NDIS 6.0 e posterior.
Plataforma de Destino Windows
Cabeçalho ndis.h (inclua Ndis.h)
IRQL Consulte a seção Comentários

Confira também

MiniportInetrrupt

MiniportInitializeEx

NdisAllocateSpinLock

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx