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 .
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
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 |