MINIPORT_MESSAGE_INTERRUPT_DPC função de retorno de chamada (ndis.h)
Um driver de miniporta deve fornecer um manipulador MiniportMessageInterruptDPC se o driver chamar a função NdisMRegisterInterruptEx para registrar uma interrupção.
Sintaxe
MINIPORT_MESSAGE_INTERRUPT_DPC MiniportMessageInterruptDpc;
void MiniportMessageInterruptDpc(
[in] NDIS_HANDLE MiniportInterruptContext,
[in] ULONG MessageId,
[in] PVOID MiniportDpcContext,
[in] PVOID ReceiveThrottleParameters,
PVOID NdisReserved2 PULONG NdisReserved1,
[in] PULONG NdisReserved2
)
{...}
Parâmetros
[in] MiniportInterruptContext
Um identificador para um bloco de informações de contexto de interrupção. O driver de miniporta forneceu esse identificador no parâmetro MiniportInterruptContext que o driver de miniporto passou para o Função NdisMRegisterInterruptEx .
[in] MessageId
Um identificador de mensagem MSI (interrupção sinalizada por mensagem). MessageId é um índice para um IO_INTERRUPT_MESSAGE_INFO_ENTRY estrutura dentro de um IO_INTERRUPT_MESSAGE_INFO estrutura. O NDIS passa um ponteiro para a estrutura de IO_INTERRUPT_MESSAGE_INFO associada no membro MessageInfoTable quando o driver se registra com êxito para MSI com a 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 o NDIS chamou MiniportMessageInterruptDPC porque o driver de miniporto retornou uma máscara de bits no parâmetro TargetProcessors do Função MiniportMessageInterrupt e, em seguida, MiniportDpcContext é NULL.
[in] ReceiveThrottleParameters
Um ponteiro para um NDIS_RECEIVE_THROTTLE_PARAMETERS estrutura especifica o número máximo de estruturas NET_BUFFER_LIST que um driver de miniporto deve indicar em um DPC.
NdisReserved1
Reservado para NDIS.
[in] NdisReserved2
Reservado para NDIS.
Retornar valor
Nenhum
Comentários
Os drivers de miniport que registram uma interrupção sinalizada por mensagem com a função NdisMRegisterInterruptEx devem fornecer uma função MiniportMessageInterruptDPC .
O NDIS chama MiniportMessageInterruptDPC 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 adiado) adicionais para outros processadores.
Os drivers de miniporta 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 causa da interrupção for uma alteração no estado do link, o driver de miniporto indicará que o novo link status para o NDIS. Se houver pacotes de recebimento pendentes, o driver de miniporto indicará os pacotes para NDIS.
Um driver de miniporta que dá suporte ao RSS (recebimento de dimensionamento lateral) e tem o recurso habilitado examina suas filas de recebimento no MiniportMessageInterruptDPC. A NIC já poderia ter enfileirado pacotes recebidos em filas separadas com base em valores de hash, se a NIC fornecesse esses recursos. Caso contrário, o driver de miniporto pode classificar os pacotes em filas separadas em MiniportMessageInterruptDPC.
MiniportMessageInterruptDPC chama o Função NdisMIndicateReceiveNetBufferLists para indicar os pacotes no processador atual. MiniportMessageInterruptDPC pode determinar 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 o Função MiniportMessageInterrupt , o driver de miniporte deve 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, MiniportMessageInterruptDPC deverá reabilitar as interrupções na NIC, para a mensagem especificada, antes de retornar.
Antes que o NDIS chame MiniportMessageInterruptDPC, as interrupções para a mensagem especificada na NIC normalmente foram desabilitadas no Função MiniportMessageInterrupt . Antes de retornar o controle, MiniportMessageInterruptDPC pode reabilitar interrupções. Se o driver de miniporta enfileirar DPCs adicionais enquanto as interrupções foram desabilitadas, o driver deverá habilitar as interrupções após a execução do último DPC.
Um driver de miniport pode chamar 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 MiniportMessageInterrupt ou MiniportMessageInterruptDPC de um driver de miniport.
O NDIS chama MiniportMessageInterruptDPC em IRQL = DISPATCH_LEVEL.
Exemplos
Para definir uma função MiniportMessageInterruptDPC , 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 MiniportMessageInterruptDPC chamada "MyMessageInterruptDPC", use o tipo MINIPORT_MESSAGE_INTERRUPT_DPC conforme mostrado neste exemplo de código:
MINIPORT_MESSAGE_INTERRUPT_DPC MyMessageInterruptDPC;
Em seguida, implemente sua função da seguinte maneira:
_Use_decl_annotations_
VOID
MyMessageInterruptDPC(
NDIS_HANDLE MiniportInterruptContext,
ULONG MessageId,
PVOID MiniportDpcContext,
PVOID ReceiveThrottleParameters,
PVOID NdisReserved2
)
{...}
O tipo de função MINIPORT_MESSAGE_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_MESSAGE_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 |