Compartilhar via


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

Um driver de miniporte deverá fornecer uma função MiniportInterruptDPC se o driver chamar a função NdisMRegisterInterruptEx para registrar uma interrupção.

Nota Você deve declarar a função usando o tipo MINIPORT_INTERRUPT_DPC . Para obter mais informações, consulte a seção Exemplos a seguir.
 

Sintaxe

MINIPORT_INTERRUPT_DPC MiniportInterruptDpc;

void MiniportInterruptDpc(
  [in] NDIS_HANDLE MiniportInterruptContext,
  [in] PVOID MiniportDpcContext,
  [in] PVOID ReceiveThrottleParameters,
  [in] PVOID NdisReserved2
)
{...}

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 .

[in] MiniportDpcContext

Um ponteiro para uma área de contexto que o driver de miniporto forneceu quando chamou a função NdisMQueueDpcEx ou NdisMQueueDpc . Se NDIS chamado MiniportInterruptDPC porque o driver de miniporto retornou uma máscara de bits no parâmetro TargetProcessors da função MiniportInterrupt , MiniportDpcContext será NULL.

[in] ReceiveThrottleParameters

Um ponteiro para um NDIS_RECEIVE_THROTTLE_PARAMETERS estrutura. Essa estrutura especifica o número máximo de estruturas de NET_BUFFER_LIST que um driver de miniporte deve indicar em um DPC.

[in] NdisReserved2

Reservado para NDIS.

Retornar valor

Nenhum

Comentários

Os drivers de miniport que registram uma interrupção com a função NdisMRegisterInterruptEx devem fornecer uma função MiniportInterruptDPC .

O NDIS chama MiniportInterruptDPC para concluir o processamento adiado de uma interrupção. O driver de miniport pode chamar a função NdisMQueueDpcEx ou NdisMQueueDpc para solicitar DPCs (chamadas de procedimento adiadas) adicionais para outros processadores.

Os drivers de miniporte determinam a origem de cada interrupção e tomam as medidas apropriadas. Por exemplo, se uma interrupção indicar a conclusão de uma operação de transmissão, o driver de miniporto concluirá uma solicitação de envio pendente. Se a origem da interrupção for uma alteração no estado do link, o driver de miniporto indicará que o novo link status ao NDIS. Se houver pacotes de recebimento pendentes, o driver de miniporto indicará os pacotes para o NDIS.

Um driver de miniporte que dá suporte ao RSS (dimensionamento lateral de recebimento) e tem o recurso habilitado, examina suas filas de recebimento no MiniportInterruptDPC. A NIC pode já ter enfileirado pacotes recebidos em filas separadas com base em valores de hash, se a NIC fornecer tais recursos. Caso contrário, o driver de miniporto pode classificar os pacotes em filas separadas em MiniportInterruptDPC.

MiniportInterruptDPC chama o Função NdisMIndicateReceiveNetBufferLists para indicar pacotes no processador atual. MiniportInterruptDPC pode identificar o processamento necessário para outras CPUs e solicitar que o NDIS agende DPCs em CPUs em que um DPC não está pendente.

Se o DPC atual estiver em execução na mesma CPU que a função MiniportInterrupt , o driver de miniporto deverá indicar todos os pacotes que não puderam ser mapeados para uma CPU. Se esse DPC for o último DPC agendado e não solicitar DPCs adicionais, MiniportInterruptDPC deverá reabilitar as interrupções na NIC antes de retornar.

Normalmente, as interrupções já estão desabilitadas na NIC na função MiniportInterrupt antes que o NDIS chame MiniportInterruptDPC. Antes de retornar o controle, MiniportInterruptDPC pode reabilitar interrupções. Se o driver de miniporto enfileirar DPCs adicionais enquanto as interrupções foram desabilitadas, o driver deverá habilitar as interrupções antes que o último DPC retorne.

Os drivers de miniporte devem limitar o número de buffers de recebimento que eles indicam enquanto estão processando um lote de DPC de interrupção para ser concluído dentro do limite de tempo necessário. Um lote de DPC de interrupção é a coleção de todos os DPCs executados após o ISR e antes que as interrupções sejam reenabled.

Um driver de miniporte 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 driver de miniport.

O NDIS chama MiniportInterruptDPC em IRQL = DISPATCH_LEVEL.

Exemplos

Para definir uma função MiniportInterruptDPC , 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 MiniportInterruptDPC chamada "MyInterruptDPC", use o tipo MINIPORT_INTERRUPT_DPC conforme mostrado neste exemplo de código:

MINIPORT_INTERRUPT_DPC MyInterruptDPC;

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

_Use_decl_annotations_
VOID
 MyInterruptDPC(
    NDIS_HANDLE  MiniportInterruptContext,
    PVOID  MiniportDpcContext,
    PVOID  ReceiveThrottleParameters,
    PVOID  NdisReserved2
    )
  {...}

O tipo de função MINIPORT_INTERRUPT_DPC é 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_INTERRUPT_DPC 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 DISPATCH_LEVEL

Confira também

MiniportHaltEx

MiniportInitializeEx

MiniportInterrupt

NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS NDIS_RECEIVE_THROTTLE_PARAMETERS

NET_BUFFER_LIST

NdisMDeregisterInterruptEx

NdisMIndicateReceiveNetBufferLists

NdisMQueueDpc

NdisMQueueDpcEx

NdisMRegisterInterruptEx

RSS (Receive Side Scaling)