Dela via


Skicka I/O-begäranden till ett allmänt I/O-mål i UMDF

Varning

UMDF 2 är den senaste versionen av UMDF och ersätter UMDF 1. Alla nya UMDF-drivrutiner ska skrivas med UMDF 2. Inga nya funktioner läggs till i UMDF 1 och det finns begränsat stöd för UMDF 1 på nyare versioner av Windows 10. Universella Windows-drivrutiner måste använda UMDF 2.

De arkiverade UMDF 1-exemplen finns i Windows 11 version 22H2 – maj 2022 Uppdatering av drivrutinsexempel.

Mer information finns i Komma igång med UMDF.

En UMDF-drivrutin kan skicka I/O-begäranden till allmänna I/O-mål synkront eller asynkront.

Om en drivrutin skickar I/O-begäranden synkront skickar en drivrutinstråd begäranden en i taget. Tråden väntar på att varje begäran ska slutföras innan den skickar nästa. Den här processen är enklare än att skicka I/O-begäranden asynkront. Drivrutinen kan skicka I/O-begäranden synkront om den inte skickar många begäranden och om systemets eller enhetens prestanda inte minskar medan drivrutinen väntar på varje I/O-begäran.

Om en drivrutin skickar I/O-begäranden asynkront skickar en drivrutinstråd varje begäran så snart begäran är klar att skickas, utan att vänta på att tidigare skickade begäranden ska slutföras. Om drivrutinen måste hantera många I/O-begäranden under korta tidsperioder kan drivrutinen förmodligen inte vänta tills varje begäran har slutförts innan nästa begäran skickas. Annars kan drivrutinen förlora data, eller så kan dess enheters prestanda och hela systemets prestanda eventuellt minska.

Innan en UMDF-drivrutin kan skicka en I/O-begäran till ett I/O-mål måste drivrutinen formatera begäran. I följande tabell visas de metoder som drivrutinen kan anropa för att formatera I/O-begäranden. Drivrutinen kan använda dessa metoder för att formatera en begäran som drivrutinen tog emot i en av sina I/O-köer eller som drivrutinen skapade.

Metod Avsikt

IWDFIoRequest::FormatUsingCurrentType

Formaterar en begäran som drivrutinen tog emot från ramverket så att drivrutinen kan skicka begäran, oförändrad, till målet

IWDFIoTarget::FormatRequestForIoctl

Formatering av enhetskontrollbegäran

IWDFIoTarget::FormatRequestForRead

Formaterar en läsbegäran

IWDFIoTarget::FormatRequestForWrite

Formaterar en skrivbegäran

IWDFIoTarget2::FormatRequestForFlush

Formaterar en begäran om att rensa buffertar.

IWDFIoTarget2::FormatRequestForQueryInformation

Formaterar en begäran om att hämta filinformation.

IWDFIoTarget2::FormatRequestForSetInformation

Formaterar en begäran om att ange filinformation.

Om du vill skicka I/O-begäran till I/O-målet anropar drivrutinen metoden IWDFIoRequest::Send . Om du vill skicka I/O-begäran synkront skickar drivrutinen flaggan WDF_REQUEST_SEND_OPTION_SYNCHRONOUS till parametern Flaggor . Annars skickar drivrutinen I/O-begäran asynkront. Om drivrutinen skickar I/O-begäran asynkront kräver drivrutinen vanligtvis avisering när en annan drivrutin slutför begäran. Drivrutinen bör definiera en IRequestCallbackRequestCompletion::OnCompletion-funktion och registrera den genom att anropa metoden IWDFIoRequest::SetCompletionCallback. Mer information finns i Slutföra I/O-begäranden.

En drivrutin som anropar IWDFIoRequest::Skicka för att skicka en I/O-begäran kan försöka avbryta begäran senare genom att anropa metoden IWDFIoRequest::CancelSentRequest . Om drivrutinen avbryter en I/O-begäran som drivrutinen tog emot från ramverket måste drivrutinen alltid slutföra begäran genom att anropa metoden IWDFIoRequest::Complete eller IWDFIoRequest::CompleteWithInformation med parametern CompletionStatus inställd på STATUS_CANCELLED. Om drivrutinen skapade begäranobjektet, anropar den IWDFObject::DeleteWdfObject istället för att slutföra begäran.