Condividi tramite


MINIPORT_MESSAGE_INTERRUPT funzione di callback (ndis.h)

NDIS chiama la funzione MiniportMessageInterrupt quando una scheda di interfaccia di rete genera un interruzione basata su messaggi.

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

Sintassi

MINIPORT_MESSAGE_INTERRUPT MiniportMessageInterrupt;

BOOLEAN MiniportMessageInterrupt(
  [in]  NDIS_HANDLE MiniportInterruptContext,
  [in]  ULONG MessageId,
  [out] PBOOLEAN QueueDefaultInterruptDpc,
  [out] PULONG TargetProcessors
)
{...}

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 .

[out] QueueDefaultInterruptDpc

Puntatore a una variabile booleana impostata dal driver miniport prima di tornare da questa chiamata. Un driver miniport imposta questo valore su TRUE per indicare che il driver richiede un DPC nella CPU predefinita (corrente). Se impostato su TRUE, NDIS ignora il valore del parametro TargetProcessors . Se impostato su FALSE, NDIS usa il valore del parametro TargetProcessors per pianificare i controller di dominio.

[out] TargetProcessors

Maschera di bit che indica i processori di destinazione per i quali NDIS deve pianificare un DPC. Questa maschera di bit rappresenta i primi 32 processori nel gruppo di processori 0. Ogni bit nella maschera di bit identifica una CPU. Se il chiamante imposta bit 0, NDIS pianifica un DPC per CPU 0. Se il chiamante imposta bit 1, NDIS pianifica un DPC per CPU 1 e così via.

Nota I driver NDIS 6.20 e versioni successive non devono usare questo parametro per pianificare i controller di dominio. È invece necessario impostare questo parametro su zero e usare la funzione NdisMQueueDpcEx per pianificare i controller di dominio.
 

Valore restituito

MiniportMessageInterrupt restituisce TRUE se la scheda di interfaccia di rete sottostante ha generato l'interruzione; in caso contrario, restituisce FALSE.

Commenti

I driver miniport che registrano gli interruzioni con segnale di messaggio (MSI) supportano la funzione NdisMRegisterInterruptEx devono fornire una funzione MiniportMessageInterrupt .

Un driver miniport deve fare il meno possibile nella sua funzione MiniportMessageInterrupt . Deve rinviare le operazioni di I/O per gli interruzioni generati dalla scheda di interfaccia di rete Funzione MiniportMessageInterruptDPC .

Quando una scheda di interfaccia di rete genera un'NIC, NDIS chiama la funzione MiniportMessageInterrupt del driver miniport .

MiniportMessageInterrupt salva le informazioni sullo stato necessarie relative all'interruzione e ai deferatori la maggior parte dell'elaborazione di I/O il più possibile all'oggetto Funzione MiniportMessageInterruptDPC .

Se il driver miniport richiede chiamate di routine posticipate (DPCS) per un messaggio specificato, il driver miniport deve disabilitare tutti gli interruzioni aggiuntivi per tale messaggio e riabilitare gli interruzioni dopo il completamento di tutti i DPC.

Il driver miniport deve impostare QueueDefaultInterruptDpc su TRUE per pianificare un DPC solo per la CPU predefinita. Il driver può eseguire questa operazione, ad esempio se:

  • La scheda di interfaccia di rete ha generato l'interruzione per segnalare il completamento di un'operazione di invio o qualsiasi altra richiesta che non viene eseguita su altre CPU.
  • La scheda di interfaccia di rete ha generato l'interruzione per segnalare i dati ricevuti e il driver miniport non può elaborare i pacchetti ricevuti in schede di rete separate.
  • L'interruzione indica i pacchetti ricevuti e il driver miniport può elaborare i pacchetti ricevuti in schede dpc separate, ma il ridimensionamento lato ricezione (RSS) non è abilitato per il driver miniport. Per ulteriori informazioni, vedere OID_GEN_RECEIVE_SCALE_CAPABILITIES e OID_GEN_RECEIVE_SCALE_PARAMETERS.
  • Il ridimensionamento lato ricezione è abilitato per il driver miniport e il driver miniport può generare messaggi diversi in ogni coda di ricezione.
Se un driver miniport elabora pacchetti ricevuti in controller di dominio separati, il driver miniport imposta il parametro QueueDefaultInterruptDpc su FALSE. Il driver miniport deve impostare il bit TargetProcessors per la CPU associata a ogni coda di ricezione non interrotta. NDIS pianifica un DPC in ognuna delle CPU indicate nel gruppo di processori 0.

Se MiniportMessageInterrupt condivide le risorse per un messaggio specificato, ad esempio i registri della scheda di interfaccia di rete o le variabili di stato, con un'altra funzione MiniportXxx che viene eseguita in una funzione IRQL inferiore, tale funzione MiniportXxx deve chiamare la funzione Funzione NdisMSynchronizeWithInterruptEx . Ciò garantisce che la funzione MiniportSynchronizeMessageInterrupt acceda alle risorse condivise in modo sincronizzato e multiprocessore.

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

NDIS chiama MiniportMessageInterrupt all'istanza DIRQL dell'msi che il driver miniport registrato in una chiamata precedente a NdisMRegisterInterruptEx. Pertanto, MiniportMessageInterrupt deve chiamare il subset delle funzioni NDIS, ad esempio NdisRawXxx o NdisRead/WriteRegisterXxx , che sono sicure per chiamare in qualsiasi irQL.

Esempi

Per definire una funzione MiniportMessageInterrupt , è prima necessario specificare 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 MiniportMessageInterrupt denominata "MyMessageInterrupt ", usare il tipo di MINIPORT_MESSAGE_INTERRUPT come illustrato in questo esempio di codice:

MINIPORT_MESSAGE_INTERRUPT MyMessageInterrupt;

Implementare quindi la funzione come indicato di seguito:

_Use_decl_annotations_
BOOLEAN
 MyMessageInterrupt(
    NDIS_HANDLE  MiniportInterruptContext,
    ULONG  MessageId,
    PBOOLEAN  QueueDefaultInterruptDpc,
    PULONG  TargetProcessors
    )
  {...}

Il tipo di funzione MINIPORT_MESSAGE_INTERRUPT è 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 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 Vedere La sezione Osservazioni

Vedi anche

IO_INTERRUPT_MESSAGE_INFO

IO_INTERRUPT_MESSAGE_INFO_ENTRY

MiniportHaltEx

MiniportInitializeEx

MiniportMessageInterruptDPC

MiniportSynchronizeMessageInterrupt

NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS

NdisMDeregisterInterruptEx

NdisMQueueDpcEx

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx OID_GEN_RECEIVE_SCALE_CAPABILITIES OID_GEN_RECEIVE_SCALE_PARAMETERS

Receive Side Scaling (RSS)