Dela via


Skapa ramverksbegärandeobjekt

Begärandeobjekt inom ramverk representerar I/O-begäranden som I/O-hanteraren har skickat till en drivrutin. Ramverksbaserade drivrutiner bearbetar varje I/O-begäran genom att anropa ramverksbegärande objektsmetoder.

Varje I/O-begäran innehåller ett WDM I/O-begärandepaket (IRP-struktur), men ramverksbaserade drivrutiner behöver vanligtvis inte komma åt IRP-strukturen.

De flesta ramverksbegärandeobjekt skapas av ramverket, men drivrutinen kan också skapa begärandeobjekt.

Begär objekt som skapats av ramverket

När en ramverksbaserad drivrutin tar emot ett I/O-begärandepaket (IRP) från I/O-chefen fångar ramverket upp IRP och skapar ett ramverksbegärandeobjekt. Ramverket placerar begärandeobjektet i en I/O-kö och, om drivrutinen har registrerat request handlers för kön, anropar den lämplig hanterare.

Följande diagram illustrerar de steg som inträffar när ramverket skapar ett begärandeobjekt för en läsåtgärd.

Diagram som illustrerar stegen för att skapa ett förfrågningsobjekt för en läsoperation i en drivrutin baserad på ett ramverk.

Följande steg motsvarar talen i föregående diagram:

  1. Ett program i användarläge läser en fil genom att kalla på funktionen Microsoft Win32 ReadFile.

  2. Funktionen ReadFile anropar I/O-hanteraren, som körs i kärnläge.

  3. I/O-hanteraren allokerar en IRP-struktur och lagrar en IRP_MJ_READ funktionskod i strukturen.

  4. I/O-chefen anropar #B0 #A1 DispatchRead #A2 #C3 standarddrivrutin för drivrutin #B4 x #A5 och skickar en pekare till IRP-strukturen. Eftersom drivrutinen x är en ramverksbaserad drivrutin tillhandahåller ramverket drivrutinens DispatchRead-rutin.

  5. Ramverket skapar ett begärandeobjekt som representerar IRP-strukturen. Ramverket lägger till begärandeobjektet till ett av drivrutins köobjekt.

  6. Ramverket anropar drivrutinens EvtIoRead-begäranhanterare och räknar upp ett köobjekthandtag och ett begärandeobjekthandtag.

Begär objekt som skapats av en drivrutin

Ramverksbaserade drivrutiner kan också skapa begärandeobjekt. En drivrutin kan till exempel skapa begärandeobjekt om den tar emot en läs- eller skrivbegäran för en mängd data som är större än drivrutinens #B0 I/O-mål #C1 kan hantera samtidigt. I sådana fall kan drivrutinen dela upp data i flera mindre begäranden och använda ytterligare begärandeobjekt för att skicka dessa mindre begäranden till ett eller flera I/O-mål.

För att skapa ett förfrågningsobjekt bör förardrivrutinen anropa WdfRequestCreate följt av ramverksmetoder som initierar förfrågningen, som WdfUsbTargetPipeFormatRequestForRead.

Om en förare tar emot WDM IRP:er i en WDM-sändningsrutin och sedan hanterar eller vidarebefordrar dem med hjälp av ramverket kan föraren anropa WdfRequestCreateFromIrp.