Delen via


Werkitems gebruiken

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.

Een werkitem is een taak die een stuurprogramma uitvoert in een OnWorkItem functie voor het terugbellen van gebeurtenissen. Deze functies worden asynchroon uitgevoerd.

UMDF-stuurprogramma's maken vaak gebruik van werkitems als een OnInterruptIsr extra verwerking moet uitvoeren zonder dat de uitvoering van het interruptserviceverzoek (ISR) wordt vertraagd, omdat de interruptlijn mogelijk door meerdere apparaten wordt gedeeld.

Normaal gesproken maakt de OnInterruptIsr van een stuurprogramma callbackfunctie een werkitemobject en voegt dit toe aan de werkitemwachtrij van het systeem. Vervolgens wordt het object door een thread uit de threadpool uit de wachtrij gehaald en wordt de OnWorkItem callback-functie van het werkitem aangeroepen.

Een werkitem instellen

Als u een werkitem wilt configureren, moet uw driver het volgende doen:

  1. Maak het werkitem.

    Uw stuurprogramma roept IWDFDevice3::CreateWorkItem aan om een werkitemobject te maken en een onWorkItem- callback-functie te identificeren waarmee het werkitem wordt verwerkt.

  2. Sla informatie over het werkitem op.

    Stuurprogramma's gebruiken doorgaans het contextgeheugen van het werkitemobject om informatie op te slaan over de taak die de OnWorkItem callbackfunctie moet uitvoeren. Wanneer de OnWorkItem callback-functie wordt aangeroepen, kan deze de informatie ophalen door toegang te krijgen tot dit contextgeheugen. ZieIWDFObject::AssignContextvoor informatie over het toewijzen en openen van contextgeheugen.

  3. Voeg het werkitem toe aan de werkitemwachtrij van het systeem.

    Uw stuurprogramma roept IWDFWorkItem::Enqueueaan, waarmee het werkitem van het stuurprogramma wordt toegevoegd aan de werkitemwachtrij.

Wanneer uw stuurprogramma IWDFDevice3::CreateWorkItemaanroept, kan het optioneel een bovenliggend object (bijvoorbeeld een apparaatobject of een wachtrijobject) leveren. Wanneer het systeem dat object verwijdert, worden ook bestaande werkitems verwijderd die aan het object zijn gekoppeld.

De callbackfunctie van WorkItem gebruiken

Nadat het werkitem is toegevoegd aan de werkitemwachtrij, blijft het in de wachtrij totdat een systeemwerkdraad beschikbaar is. De systeemwerkdraad verwijdert het werkitem uit de wachtrij en roept vervolgens de OnWorkItem callbackfunctie van de driver op, waarbij het werkitemobject als invoer wordt doorgegeven.

Normaal gesproken voert de callbackfunctie OnWorkItem de volgende stappen uit:

  1. Haalt door het stuurprogramma verstrekte informatie over het werkitem op door het contextgeheugen van het werkitemobject te openen.
  2. Voert de taak uit die u hebt opgegeven. Indien nodig kan de callback-functie IWDFWorkItem::GetParentObject aanroepen om het bovenliggende object van het werkitem te bepalen.
  3. Als het stuurprogramma het werkitem opnieuw in de wachtrij plaatst, wordt aangegeven dat het handvat voor het werkitem nu beschikbaar is voor hergebruik.

Een paar stuurprogramma's moeten mogelijk IWDFWorkItem::Flush aanroepen om hun werkitems uit de werkitemwachtrij te flushen. Als een stuurprogramma de methode Flush aanroept, wordt de methode pas beƫindigd als een werkthread het opgegeven werkitem uit de werkitemwachtrij heeft verwijderd en vervolgens de OnWorkItem callback-functie van het stuurprogramma heeft aangeroepen, en de OnWorkItem callback-functie is teruggekeerd nadat het werkitem was verwerkt.