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.
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.
NdisReserved1
Riservato per NDIS.
[in] NdisReserved2
Riservato per NDIS.
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.
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 |