Metodo IWDFInterrupt::AcquireInterruptLock (wudfddi.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.]
Il metodo AcquireInterruptLock inizia una sequenza di codice che viene eseguita mantenendo il blocco di un oggetto interrupt.
Sintassi
void AcquireInterruptLock();
Valore restituito
nessuno
Osservazioni
Quando un driver chiama AcquireInterruptLock, il sistema acquisisce il blocco di interruzione del framework.
Quando il driver chiama ReleaseInterruptLock, il sistema rilascia il blocco di interruzione.
È possibile usare AcquireInterruptLock e ReleaseInterruptLock se il driver deve eseguire alcune righe di codice senza essere preceduto e con interruzioni di manutenzione disabilitate.
Il driver non può chiamare AcquireInterruptLock prima che il framework abbia chiamato la funzione di callback OnInterruptEnable del driver o dopo che il framework ha chiamato la funzione di callback OnInterruptDisable del driver.
Dopo che il driver chiama AcquireInterruptLock, non deve chiamare di nuovo il metodo per lo stesso oggetto di interruzione prima di chiamare ReleaseInterruptLock.
Quando si esegue in un thread arbitrario, ad esempio un metodo di callback della coda I/O, i driver devono chiamare IWDFInterrupt::TryToAcquireInterruptLock anziché IWDFInterrupt::AcquireInterruptLock. Ad esempio, il driver chiama IWDFInterrupt::TryToAcquireInterruptLock da IQueueCallbackRead::OnRead.
In questo modo si evita la possibilità di deadlock, come descritto nello scenario seguente.
- Per determinare se il dispositivo ha interrotto, un UMDF invia I/O al suo bus dall'interno del relativo ISR, con il blocco di interruzione tenuto.
- Il driver del bus completa una seconda richiesta nello stesso thread in cui ha ricevuto la richiesta precedente.
- La routine di completamento della seconda richiesta invia una richiesta al driver UMDF.
- La routine di invio di I/O del driver UMDF chiama IWDFInterrupt::AcquireInterruptLock, che tenta quindi di acquisire il blocco di interruzioni.
Per altre informazioni sul blocco degli interruzioni manuali, vedere Sincronizzazione del codice di interruzione.
Per altre informazioni sulla gestione degli interruzioni nei driver UMDF, vedere Accesso agli interruzioni hardware e gestione.
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 | wudfddi.h |
DLL | WUDFx.dll |