WUDF_INTERRUPT_ISR funzione di callback (wudfinterrupt.h)
Avviso
UMDF 2 è la versione più recente di UMDF e sostituisce UMDF 1. Tutti i nuovi driver UMDF devono essere scritti usando UMDF 2. Nessuna nuova funzionalità viene aggiunta a UMDF 1 ed è disponibile un supporto limitato per UMDF 1 nelle versioni più recenti di Windows 10. I driver di Windows universali devono usare UMDF 2. Per altre informazioni, vedere Introduzione con UMDF.
Una funzione di callback dell'evento OnInterruptIsr di un driver esegue un interruzione hardware.
Sintassi
typedef
BOOLEAN
_Function_class_(WUDF_INTERRUPT_ISR)
WUDF_INTERRUPT_ISR(
_In_
IWDFInterrupt* Interrupt,
_In_
ULONG MessageID,
_In_
ULONG Reserved
);
typedef WUDF_INTERRUPT_ISR *PFN_WUDF_INTERRUPT_ISR;
Parametri
[in] Interrupt
Puntatore all'interfaccia IWDFInterrupt .
[in] MessageID
Se il dispositivo usa interruzioni segnalate dal messaggio (MSIs), questo parametro è il numero di messaggio che identifica il messaggio di interruzione hardware del dispositivo. In caso contrario, questo valore è 0.
[in] Reserved
Riservato per l'utilizzo nel sistema.
Valore restituito
nessuno
Osservazioni
Restituisce TRUE se il driver riconosce la proprietà dell'interruzione e ha arrestato e riconosciuto l'interruzione nel dispositivo. In caso contrario, restituisce FALSE.
Per registrare una funzione di callback onInterruptIsr , il driver deve inserire l'indirizzo della funzione di callback in una struttura di WUDF_INTERRUPT_CONFIG prima di chiamare IWDFDevice3::CreateInterrupt.
La funzione di callback onInterruptIsr è una routine del servizio di interruzione del driver UMDF (ISR), chiamata in PASSIVE_LEVEL quando si verifica un interruzione hardware.
Per un interruzione attivata da edge o un interruzione con segnale di messaggio (MSI), il framework chiama OnInterruptIsr all'esterno del contesto di invio dell'interruzione del sistema operativo. Ciò avviene perché UMDF consente solo interruzioni con trigger perimetrali non condivisi o msi e il driver non deve interagire con il relativo hardware all'interno di questo contesto.
Per un interruzione attivata a livello, il framework chiama OnInterruptIsr nel contesto dell'interruzione del sistema operativo. Di conseguenza, il thread di invio di interruzioni del sistema operativo viene bloccato in modalità kernel in attesa di una risposta dal driver.
In genere, OnInterruptIsr salva tutte le informazioni volatili che potrebbero essere perse e cancella l'interruzione hardware. Per un interruzione attivata a livello, il driver deve arrestare e riconoscere l'interruzione nel dispositivo e quindi restituire TRUE se è proprietario dell'interruzione. Il driver deve eseguire ulteriori elaborazioni in un callback OnInterruptWorkItem . Per accodare un elemento di lavoro, il driver chiama il metodo IWDFInterrupt::QueueWorkItemForIsr .
Per altre informazioni sulla gestione degli interruzioni nei driver UMDF, vedere Accesso agli interruzioni hardware e gestione.
Esempio
Il tipo di funzione è dichiarato in Wudfinterrupt.h, come indicato di seguito.
typedef
BOOLEAN
WUDF_INTERRUPT_ISR(
_In_
IWDFInterrupt* Interrupt,
_In_
ULONG MessageID,
_In_
ULONG Reserved
);
typedef WUDF_INTERRUPT_ISR *PFN_WUDF_INTERRUPT_ISR;
Per definire una funzione di callback onInterruptIsr denominata MyInterruptIsr, è prima necessario fornire una dichiarazione di funzione richiesta da SDV e altri strumenti di verifica, come indicato di seguito:
WUDF_INTERRUPT_NOTIFY MyInterruptIsr;
Implementare quindi la funzione di callback come indicato di seguito:
BOOLEAN
MyInterruptIsr (
IN IWDFInterrupt* Interrupt,
IN ULONG MessageID,
IN ULONG Reserved
)
{…}
Requisiti
Requisito | Valore |
---|---|
Fine del supporto | Non disponibile in UMDF 2.0 e versioni successive. |
Piattaforma di destinazione | Desktop |
Versione UMDF minima | 1.11 |
Intestazione | wudfinterrupt.h |