Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O NDIS chama a função MiniportInterrupt quando uma NIC ou outro dispositivo que compartilha a interrupção com a NIC gera uma interrupção.
Sintaxe
MINIPORT_ISR MiniportIsr;
BOOLEAN MiniportIsr(
[in] NDIS_HANDLE MiniportInterruptContext,
[out] PBOOLEAN QueueDefaultInterruptDpc,
[out] PULONG TargetProcessors
)
{...}
Parâmetros
[in] MiniportInterruptContext
Um identificador para um bloco de informações de contexto de interrupção. O driver de miniporto forneceu esse identificador no parâmetro MiniportInterruptContext que o driver de miniporto passou para o Função NdisMRegisterInterruptEx .
[out] QueueDefaultInterruptDpc
Um ponteiro para uma variável BOOLEAN que o driver de miniporto define antes de retornar dessa chamada. Um driver de miniporto define esse valor como TRUE para indicar que o driver requer um DPC na CPU padrão (atual). Se esse valor for definido como TRUE, o NDIS ignorará o valor do parâmetro TargetProcessors . Se for definido como FALSE, o NDIS usará o valor do parâmetro TargetProcessors para agendar DPCs. Se QueueDefaultInterruptDpc for TRUE, o NDIS agendará um DPC independentemente do valor retornado de MiniportInterrupt.
[out] TargetProcessors
Uma máscara de bits que indica os processadores de destino para os quais o NDIS deve agendar um DPC. Essa máscara de bits representa os primeiros 32 processadores no grupo de processadores 0. Cada bit na máscara de bits identifica uma CPU. Se o chamador definir o bit 0, o NDIS agenda um DPC para CPU 0. Se o chamador definir o bit 1, o NDIS agenda um DPC para CPU 1 e assim por diante. Se QueueDefaultInterruptDpc estiver definido como FALSE e TargetProcessors estiver definido como zero, o NDIS não agendará nenhum DPCs. Caso contrário, o NDIS agendará DPCs independentemente do valor retornado do MiniportInterrupt.
Valor de retorno
MiniportInterrupt retorna um dos seguintes valores:
| Código de retorno | Description |
|---|---|
|
MiniportInterrupt determinou que a NIC subjacente gerou a interrupção. |
|
MiniportInterrupt determinou que a NIC subjacente não gerou a interrupção. |
Observações
Os drivers de miniport que registram uma interrupção com a função NdisMRegisterInterruptEx devem fornecer uma função MiniportInterrupt .
Um driver de miniporto deve fazer o menor trabalho possível em sua função MiniportInterrupt . Ele deve adiar as operações de E/S para as interrupções que a NIC gera para a função MiniportInterruptDPC .
Quando ocorre uma interrupção na linha de interrupção de uma NIC, o NDIS chama a função MiniportInterrupt do driver de miniport.
Todas as NICs podem compartilhar interrupções baseadas em linha com outros dispositivos no barramento de E/S. Se a NIC não gerou a interrupção, MiniportInterrupt deverá retornar FALSE imediatamente para que o sistema possa chamar o driver do dispositivo que gerou a interrupção. Se QueueDefaultInterruptDpc estiver definido como FALSE e o parâmetro TargetProcessors estiver definido como zero, o NDIS não agendará nenhum DPCs. Caso contrário, o NDIS agendará DPCs independentemente do valor de turno reMiniportInterruptdo MiniportInterrupt.
Se a interrupção for para a NIC, MiniportInterrupt descartará a interrupção na NIC, salvará qualquer estado necessário sobre a interrupção e adiará o máximo possível do processamento de E/S para a função MiniportInterruptDPC .
Se a NIC subjacente gerou a interrupção especificada e o driver de miniporto solicitará DPCs (chamadas de procedimento adiado), o driver de miniporto deverá desabilitar todas as interrupções adicionais da NIC e reabilitar as interrupções depois que todos os DPCs forem concluídos.
O driver de miniporto deve definir QueueDefaultInterruptDpc como TRUE para agendar um DPC somente para a CPU padrão. O driver poderia fazer isso, por exemplo, se:
- A NIC gerou a interrupção para sinalizar a conclusão de uma operação de envio ou qualquer outra solicitação que não seja executada em outras CPUs.
- A NIC gerou a interrupção para sinalizar os dados recebidos e o driver de miniporto não pode processar pacotes recebidos em DPCs separados.
- A interrupção indica os pacotes recebidos e o driver de miniporto pode processar pacotes recebidos em DPCs separados, mas o RSS (dimensionamento lateral de recebimento) não está habilitado para o driver de miniporto. Para obter mais informações, consulte OID_GEN_RECEIVE_SCALE_CAPABILITIES e OID_GEN_RECEIVE_SCALE_PARAMETERS.
Um driver de miniporto pode chamar o Função NdisMDeregisterInterruptEx de sua função MiniportInitializeEx ou MiniportHaltEx para liberar recursos alocados com NdisMRegisterInterruptEx. Depois que NdisMDeregisterInterruptEx retornar, o NDIS não chamará a função MiniportInterrupt ou MiniportInterruptDPC de um miniport driver.
O NDIS chama MiniportInterrupt no DIRQL da interrupção que o driver de miniporto registrou em uma chamada anterior para NdisMRegisterInterruptEx. Portanto, MiniportInterrupt deve chamar o subconjunto das funções NDIS, como as funções NdisRawXxx ou NdisRead/WriteRegisterXxx , que são seguras de chamar em qualquer IRQL.
Exemplos
Para definir uma função MiniportInterrupt , 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 escrever drivers para o sistema operacional Windows.Por exemplo, para definir uma função MiniportInterrupt chamada "MyInterrupt", use o tipo MINIPORT_ISR conforme mostrado neste exemplo de código:
MINIPORT_ISR MyInterrupt;
Em seguida, implemente sua função da seguinte maneira:
_Use_decl_annotations_
BOOLEAN
MyInterrupt(
NDIS_HANDLE MiniportInterruptContext,
PBOOLEAN QueueDefaultInterruptDpc,
PULONG TargetProcessors
)
{...}
O tipo de função MINIPORT_ISR é definido 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 à sua definição de função. A anotação Use_decl_annotations garante que as anotações aplicadas ao tipo de função MINIPORT_ISR no arquivo de cabeçalho sejam usadas. Para obter mais informações sobre os requisitos para declarações de função, consulte Declareing Functions by Using Function Role Types for NDIS Drivers.
Para obter informações sobre Use_decl_annotations, consulte Anotando o comportamento da função.
Requirements
| Requirement | Value |
|---|---|
| Cliente mínimo suportado | Com suporte no NDIS 6.0 e posterior. |
| da Plataforma de Destino |
Windows |
| Header | ndis.h (inclua Ndis.h) |
| IRQL | Consulte a seção Comentários |