Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Waarschuwing
UMDF 2 is de nieuwste versie van UMDF en vervangt UMDF 1. Alle nieuwe UMDF-stuurprogramma's moeten worden geschreven met UMDF 2. Er worden geen nieuwe functies toegevoegd aan UMDF 1 en er is beperkte ondersteuning voor UMDF 1 op nieuwere versies van Windows 10. Universele Windows-stuurprogramma's moeten UMDF 2 gebruiken.
De gearchiveerde UMDF 1-voorbeelden vindt u in de Windows 11 versie 22H2 - update van stuurprogrammavoorbeelden van mei 2022.
Zie Aan de slag met UMDF-voor meer informatie.
Alle stuurprogrammacode die toegang heeft tot de interrupt-gegevensbuffer, moet worden gesynchroniseerd, zodat slechts één routine tegelijkertijd toegang heeft tot de gegevens.
U kunt interruptcode synchroniseren met behulp van handmatige interruptvergrendeling of automatische callback-serialisatie.
Handmatige onderbrekingsvergrendeling
UMDF verkrijgt de interruptvergrendeling voordat de OnInterruptIsr, OnInterruptDisable of OnInterruptEnable callbacks worden aangeroepen.
Als een stuurprogramma code moet synchroniseren met behulp van de interruptvergrendeling, wordt IWDFInterrupt::AcquireInterruptLock en IWDFInterrupt::ReleaseInterruptLock aanroepen. Een stuurprogramma vergrendelt en ontgrendelt bijvoorbeeld de interrupt-lock in zijn OnInterruptWorkItem callbackroutine met behulp van deze methoden. In I/O-callbacks (zoals OnRead en OnWrite) roept het stuurprogramma echter eerst IWDFInterrupt::TryToAcquireInterruptLock aan om te bepalen of een werkitem in de wachtrij moet worden geplaatst of dat het werk in dezelfde thread moet worden uitgevoerd om potentiële impasses te voorkomen. Voor een voorbeeld van een deadlockscenario dat kan worden veroorzaakt door het aanroepen van IWDFInterrupt::AcquireInterruptLock vanuit een willekeurige threadcontext, zie de sectie Opmerkingen van IWDFInterrupt::AcquireInterruptLock.
Als IWDFInterrupt::TryToAcquireInterruptLock TRUE retourneert, heeft het stuurprogramma de interruptvergrendeling in dezelfde thread verkregen. In dit geval voert de bestuurder het werk uit dat die vergrendeling vereiste en roept vervolgens ReleaseInterruptLock aan. Als IWDFInterrupt::TryToAcquireInterruptLockFALSE retourneert, plaatst de driver een werkitem in de wachtrij en wordt het werk uitgevoerd in de OnWorkItem-callback. In dit geval mag het werkitem geen automatische serialisatie gebruiken.
Automatische serialisatie gebruiken
Een UMDF-stuurprogramma kan automatische callbacksynchronisatie aanvragen door IWDFDeviceInitialize::SetLockingConstraint aan te roepen met de parameter LockType ingesteld op WdfDeviceLevel.
Het stuurprogramma stelt vervolgens het lid AutomaticSerialization van de WUDF_INTERRUPT_CONFIG structuur in op TRUE voordat createInterrupt wordt aangeroepen.
Als gevolg hiervan serialiseert UMDF de OnInterruptWorkItem-callbacks van het stuurprogramma met de I/O-wachtrij, het annuleren van verzoeken, en de callbackroutines voor bestandsobjecten. In dit scenario gebruikt UMDF de callbackvergrendeling in plaats van een objectvergrendeling per interrupt.