Condividi tramite


Funzione WdfInterruptQueueDpcForIsr (wdfinterrupt.h)

[Si applica a KMDF e UMDF]

Il metodo WdfInterruptQueueDpcForIsr accoda una funzione di callback evtInterruptDpc dell'oggetto di interruzione del framework.

Sintassi

BOOLEAN WdfInterruptQueueDpcForIsr(
  [in] WDFINTERRUPT Interrupt
);

Parametri

[in] Interrupt

Handle per un oggetto di interruzione del framework.

Valore restituito

WdfInterruptQueueDpcForIsr restituisce TRUE se esegue correttamente la coda della funzione di callback evtInterruptDpc dell'oggetto interrupt. Il metodo restituisce FALSE se la funzione di callback è stata in precedenza accodata e non è stata eseguita.

Un controllo di bug si verifica se il driver fornisce un handle di oggetti non valido.

Commenti

I driver in genere chiamano WdfInterruptQueueDpcForIsr dall'interno di una funzione di callback EvtInterruptIsr .

La funzione di callback evtInterruptDpc di un oggetto di interruzione può essere accodata una sola volta prima dell'esecuzione. Pertanto, se una chiamata a WdfInterruptQueueDpcForIsr ha esito positivo, le chiamate successive restituiranno FALSE finché il framework non dequeue la funzione di callback EvtInterruptDpc .

Il callback EvtInterruptDpc verrà eseguito nel processore che lo ha accodato. Se il driver chiama WdfInterruptQueueDpcForIsr per accodare un altro DPC mentre una funzione di callback EvtInterruptDpc è già dequeued o in esecuzione, il secondo callback EvtInterruptDpc potrebbe anche essere eseguito prima del completamento della prima.

Per altre informazioni sulla gestione degli interruzioni nei driver basati su framework, vedere Gestione degli interruzioni hardware.

In KMDF 1.11 e versioni successive un driver può chiamare WdfInterruptQueueDpcForIsr da un ISR a livello passivo. Si noti che un driver può registrare un elemento di lavoro o un DPC, ma non entrambi.

Esempio

Nell'esempio di codice seguente viene illustrato come una funzione di callback evtInterruptIsr deve accodare una funzione di callback EvtInterruptDpc .

BOOLEAN
MyEvtInterruptIsr(
    IN WDFINTERRUPT Interrupt,
    IN ULONG  MessageID
    )
{
    BOOLEAN queueDpcSuccess;

    //
    // Save interrupt information for the
    // EvtInterruptDpc function.
    //
...
    //
    // Queue the EvtInterruptDpc function.
    //
    queueDpcSuccess = WdfInterruptQueueDpcForIsr(Interrupt);
...
}

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1.0
Versione UMDF minima 2,0
Intestazione wdfinterrupt.h (include Wdf.h)
Libreria Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DIRQL
Regole di conformità DDI DriverCreate(kmdf)

Vedi anche

EvtInterruptDpc

EvtInterruptIsr

WdfInterruptCreate