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.
Wanneer I/O-aanvragen van toepassingen binnenkomen, plaatst het framework elke aanvraag in de juiste I/O-wachtrij. Hoe en wanneer de aanvragen aan het stuurprogramma worden geleverd, is afhankelijk van hoe het stuurprogramma verzending configureert voor de I/O-wachtrij en hoe het stuurprogramma synchronisatie van callback-functie opgeeft. De I/O-wachtrij communiceert ook met het PnP- en energiebeheersubsysteem van UMDF om I/O-aanvragen in de wachtrij te bewaren totdat het apparaat de juiste status heeft bereikt.
Opmerking De verzendmodus voor de I/O-wachtrij is niet gerelateerd aan de synchronisatiemodus. De verzendconfiguratie van de I/O-wachtrij bepaalt het aantal aanvragen dat het stuurprogramma op elk gewenst moment kan accepteren voor verwerking, terwijl synchronisatie de gelijktijdige uitvoering van callback-functies voor gebeurtenissen beheert die aanvragen presenteren of annuleren. Er worden echter verschillende bewerkingsmodi gemaakt door verzendings- en synchronisatiemodi te combineren.
Het stuurprogramma configureert verzending voor een I/O-wachtrij wanneer het stuurprogramma de IWDFDevice::CreateIoQueue methode aanroept om de standaardwachtrij te configureren of een secundaire wachtrij te maken. Het stuurprogramma kan een van de waarden van het WDF_IO_QUEUE_DISPATCH_TYPE opsommingstype opgeven in de parameter DispatchType parameter van IWDFDevice::CreateIoQueue om de verzendmodus te identificeren. Een I/O-wachtrijobject kan de volgende verzendmodi ondersteunen:
Sequentieel
De sequentiële afleveringsmodus wordt opgegeven met behulp van de WdfIoQueueDispatchSequential waarde. In deze verzendmodus genereert een wachtrij met de verwerkingsstatus gebeurtenissen, zodat een stuurprogramma slechts één aanvraag tegelijk verwerkt. De wachtrij stelt eventuele extra verzoeken uit totdat de driver zijn huidige verzoek heeft verwerkt of de IWDFIoRequest::ForwardToIoQueue methode gebruikt om het verzoek opnieuw in de wachtrij te plaatsen. Wanneer de huidige aanvraag is voltooid of wordt doorgestuurd, genereert de wachtrij een gebeurtenis om de volgende aanvraag op te geven.
Evenwijdig
De parallelle verzendmodus wordt opgegeven met behulp van de WdfIoQueueDispatchParallel waarde. In deze verzendmodus genereert een wachtrij in de verwerkingsmodus gebeurtenissen zodra I/O-aanvragen gereed zijn voor de driver. Wanneer het stuurprogramma een I/O-aanvraag ontvangt, kan het stuurprogramma de I/O-aanvraag op een van de volgende manieren verwerken:
- Het stuurprogramma roept de methode IWDFIoRequest::Complete of IWDFIoRequest::CompleteWithInformation aan om de I/O-aanvraag onmiddellijk te voltooien. Een stuurprogramma voltooit de I/O-aanvraag onmiddellijk als de I/O-aanvraag ongeldig is, nooit kan worden verwerkt of kan worden voltooid door gegevens te kopiëren uit een buffer of cache met de gegevens.
- Het stuurprogramma roept de methode IWDFIoRequest::ForwardToIoQueue aan om de I/O-aanvraag opnieuw in de wachtrij te zetten.
- Het stuurprogramma roept de IWDFIoRequest::Send-methode aan om de I/O-aanvraag door te geven aan een stuurprogramma op een lager niveau.
Handmatig
De handmatige verzendmodus wordt opgegeven met behulp van de WdfIoQueueDispatchManual waarde. In deze verzendmodus wordt de driver niet automatisch op de hoogte gebracht wanneer er aanvragen in de I/O-wachtrij binnenkomen. Het stuurprogramma moet de methode IWDFIoQueue::RetrieveNextRequest aanroepen om aanvragen handmatig uit de wachtrij op te halen. Dit is een enquête model.
In UMDF-versies 1.9 en hoger, als uw stuurprogramma de handmatige afhandelingsmodus gebruikt, kan het IWDFIoRequest2::Requeue aanroepen om een I/O-aanvraag terug te sturen naar het begin van de I/O-wachtrij waar het stuurprogramma deze verkregen heeft. Nadat u IWDFIoRequest2::Requeuehebt aangeroepen, haalt de volgende aanroep van het stuurprogramma naar IWDFIoQueue::RetrieveNextRequest de opnieuw in de wachtrij geplaatste aanvraag op.
Voor alle verzendmodi ontvangt en volgt het I/O-wachtrijobject de aanvraag totdat het stuurprogramma de aanvraag afhandelt of de aanvraag wordt geannuleerd.
Als het stuurprogramma de wachtrij configureert voor seriële of parallelle verzending, meldt het framework het stuurprogramma van een aanvraag via de callback-functies die door het stuurprogramma zijn geregistreerd wanneer het stuurprogramma de wachtrij maakt of de standaardwachtrij configureert. Zie I/O Queue Event Callback Functionsvoor meer informatie.