MINIPORT_MESSAGE_INTERRUPT_DPC funzione di callback (ndis.h)

Un driver miniport deve fornire un gestore MiniportMessageInterruptDPC se il driver chiama la funzione NdisMRegisterInterruptEx per registrare un interruzione.

Nota È necessario dichiarare la funzione usando il tipo di MINIPORT_MESSAGE_INTERRUPT_DPC . Per altre informazioni, vedere la sezione Esempi seguenti.
 

Sintassi

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
)
{...}

Parametri

[in] MiniportInterruptContext

Handle a un blocco di informazioni sul contesto di interruzione. Il driver miniport ha fornito questo handle nel parametro MiniportInterruptContext passato al driver miniport Funzione NdisMRegisterInterruptEx .

[in] MessageId

Identificatore del messaggio di interruzione segnalato dal messaggio .MSI. MessageId è un indice a un IO_INTERRUPT_MESSAGE_INFO_ENTRY struttura all'interno di un IO_INTERRUPT_MESSAGE_INFO struttura. NDIS passa un puntatore alla struttura di IO_INTERRUPT_MESSAGE_INFO associata nel membro MessageInfoTable quando il driver registra correttamente per MSI con la funzione NdisMRegisterInterruptEx .

[in] MiniportDpcContext

Puntatore a un'area di contesto fornita dal driver miniport quando viene chiamata la funzione NdisMQueueDpcEx o NdisMQueueDpc . Se NDIS denominato MiniportMessageInterruptDPC perché il driver miniport ha restituito una maschera di bit nel parametro TargetProcessors dell'oggetto Funzione MiniportMessageInterrupt , quindi MiniportDpcContext è NULL.

[in] ReceiveThrottleParameters

Puntatore a un oggetto NDIS_RECEIVE_THROTTLE_PARAMETERS struttura specifica il numero massimo di strutture NET_BUFFER_LIST che un driver miniport deve indicare in un DPC.

Nota In NDIS 6.1 e versioni precedenti questo parametro è denominato NdisReserved1, il relativo tipo di dati è PULONG ed è riservato per NDIS.
 

NdisReserved1

Riservato per NDIS.

[in] NdisReserved2

Riservato per NDIS.

Nota In NDIS 6.1 e versioni precedenti il tipo di dati di questo parametro è PULONG.
 

Valore restituito

nessuno

Osservazioni

I driver Miniport che registrano un interruzione segnalato dal messaggio con la funzione NdisMRegisterInterruptEx devono fornire una funzione MiniportMessageInterruptDPC .

NDIS chiama MiniportMessageInterruptDPC per completare l'elaborazione posticipata di un interruzione. Il driver miniport può chiamare la funzione NdisMQueueDpcEx o NdisMQueueDpc per richiedere chiamate di procedure posticipate aggiuntive per altri processori.

I driver Miniport determinano l'origine di ogni interruzione e prendono un'azione appropriata. Ad esempio, se un interruzione indica il completamento di un'operazione di trasmissione, il driver miniport completa una richiesta di invio in sospeso. Se la causa dell'interruzione è una modifica dello stato di collegamento, il driver miniport indica il nuovo stato del collegamento a NDIS. Se sono presenti pacchetti di ricezione in sospeso, il driver miniport indica i pacchetti a NDIS.

Un driver miniport che supporta il ridimensionamento lato (RSS) e ha la funzionalità abilitata, esamina le code di ricezione in MiniportMessageInterruptDPC. La scheda di interfaccia di rete potrebbe avere già accodato pacchetti in code separate in base ai valori hash, se la scheda di interfaccia di rete fornisce tali funzionalità. In caso contrario, il driver miniport può ordinare i pacchetti in code separate in MiniportMessageInterruptDPC.

MiniportMessageInterruptDPC chiama Funzione NdisMIndicateReceiveNetBufferLists per indicare i pacchetti nel processore corrente. MiniportMessageInterruptDPC può determinare l'elaborazione necessaria per altre CPU e richiedere NDIS per pianificare i PC in CPU in cui un DPC non è in sospeso.

Se il DPC corrente è in esecuzione nella stessa CPU dell'oggetto Funzione MiniportMessageInterrupt , il driver miniport deve indicare tutti i pacchetti che non è stato possibile eseguire il mapping a una CPU. Se questo DPC è l'ultimo DPC pianificato e non richiederà schede di dominio aggiuntive, MiniportMessageInterruptDPC dovrebbe riabilitare gli interruzioni nella scheda di interfaccia di rete, per il messaggio specificato, prima che venga restituito.

Prima di NDIS chiama MiniportMessageInterruptDPC, gli interruzioni per il messaggio specificato nella scheda di interfaccia di rete sono in genere stati disabilitati nella scheda di interfaccia di rete Funzione MiniportMessageInterrupt . Prima di restituire il controllo, MiniportMessageInterruptDPC può riattivare gli interruzioni. Se il driver miniport ha accodato altri DPC mentre gli interruzioni sono stati disabilitati, il driver deve abilitare gli interruzioni dopo l'esecuzione dell'ultimo DPC.

Nota Per migliorare le prestazioni, i driver miniport devono disabilitare solo gli interruzioni per messaggi specifici. Non devono disabilitare tutte le interruzioni segnalate dal messaggio.
 
I driver Miniport devono limitare il numero di buffer di ricezione che indicano durante l'elaborazione di un batch DPC di interruzione per completare entro il limite di tempo necessario. Un batch DPC di interruzione è la raccolta di tutti i CONTROLLER di dominio eseguiti dopo l'ISR e prima che gli interruzioni vengano riabilitabili.

Un driver miniport può chiamare NdisMDeregisterInterruptEx dalla sua funzione MiniportInitializeEx o MiniportHaltEx per rilasciare risorse allocate con NdisMRegisterInterruptEx. Dopo che NdisMDeregisterInterruptEx restituisce, NDIS non chiama una funzione MiniportMessageInterrupt o MiniportMessageInterruptDPC.

NDIS chiama MiniportMessageInterruptDPC in IRQL = DISPATCH_LEVEL.

Esempi

Per definire una funzione MiniportMessageInterruptDPC , è prima necessario fornire una dichiarazione di funzione che identifica il tipo di funzione che si sta definendo. Windows fornisce un set di tipi di funzione per i driver. La dichiarazione di una funzione usando i tipi di funzione consente l'analisi del codice per i driver, il verifica driver statico (SDV) e altri strumenti di verifica trovano errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.

Ad esempio, per definire una funzione MiniportMessageInterruptDPC denominata "MyMessageInterruptDPC ", usare il tipo di MINIPORT_MESSAGE_INTERRUPT_DPC come illustrato in questo esempio di codice:

MINIPORT_MESSAGE_INTERRUPT_DPC MyMessageInterruptDPC;

Implementare quindi la funzione come indicato di seguito:

_Use_decl_annotations_
VOID
 MyMessageInterruptDPC(
    NDIS_HANDLE  MiniportInterruptContext,
    ULONG  MessageId,
    PVOID  MiniportDpcContext,
    PVOID  ReceiveThrottleParameters,
    PVOID  NdisReserved2
    )
  {...}

Il tipo di funzione MINIPORT_MESSAGE_INTERRUPT_DPC è definito nel file di intestazione Ndis.h. Per identificare in modo più accurato gli errori durante l'esecuzione degli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione Use_decl_annotations alla definizione della funzione. L'annotazione Use_decl_annotations garantisce che vengano usate le annotazioni applicate al tipo di funzione MINIPORT_MESSAGE_INTERRUPT_DPC nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo per i driver NDIS.

Per informazioni su Use_decl_annotations, vedere Annotazione del comportamento della funzione.

Requisiti

Requisito Valore
Client minimo supportato Supportato in NDIS 6.0 e versioni successive.
Piattaforma di destinazione Windows
Intestazione ndis.h (includere Ndis.h)
IRQL DISPATCH_LEVEL

Vedi anche

IO_INTERRUPT_MESSAGE_INFO

IO_INTERRUPT_MESSAGE_INFO_ENTRY

MiniportHaltEx

MiniportInitializeEx

MiniportMessageInterrupt

NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS NDIS_RECEIVE_THROTTLE_PARAMETERS

NET_BUFFER_LIST

NdisMDeregisterInterruptEx

NdisMIndicateReceiveNetBufferLists

NdisMQueueDpc

NdisMQueueDpcEx

NdisMRegisterInterruptEx

Receive Side Scaling (RSS)